diff --git a/ARCHITECT/AppManager/.gitignore b/ARCHITECT/AppManager/.gitignore
deleted file mode 100644
index 79ccbc52e30d3bdf247ce1b2f05f25d1cf44d15b..0000000000000000000000000000000000000000
--- a/ARCHITECT/AppManager/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.settings/
-/classes/
-/target/
-.classpath
\ No newline at end of file
diff --git a/ARCHITECT/AppManager/.gitkeep b/ARCHITECT/AppManager/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/ARCHITECT/AppManager/.project b/ARCHITECT/AppManager/.project
deleted file mode 100644
index 20f42f7033bac807a42b213faa885e15b46d69f4..0000000000000000000000000000000000000000
--- a/ARCHITECT/AppManager/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>eu.DECIDEh2020.architect.appManager</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/ARCHITECT/AppManager/LICENSE.txt b/ARCHITECT/AppManager/LICENSE.txt
deleted file mode 100644
index 3276fe0690e8305937007c7653ffaf71fb65cf7f..0000000000000000000000000000000000000000
--- a/ARCHITECT/AppManager/LICENSE.txt
+++ /dev/null
@@ -1,281 +0,0 @@
-Copyright (C) 2017 Fraunhofer FOKUS.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the Eclipse Public License version 2.0.
-
-Eclipse Public License - v 2.0
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
-PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
-OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-a) in the case of the initial Contributor, the initial content
-Distributed under this Agreement, and
-
-b) in the case of each subsequent Contributor:
-i) changes to the Program, and
-ii) additions to the Program;
-where such changes and/or additions to the Program originate from
-and are Distributed by that particular Contributor. A Contribution
-"originates" from a Contributor if it was added to the Program by
-such Contributor itself or anyone acting on such Contributor's behalf.
-Contributions do not include changes or additions to the Program that
-are not Modified Works.
-
-"Contributor" means any person or entity that Distributes the Program.
-
-"Licensed Patents" mean patent claims licensable by a Contributor which
-are necessarily infringed by the use or sale of its Contribution alone
-or when combined with the Program.
-
-"Program" means the Contributions Distributed in accordance with this
-Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement
-or any Secondary License (as applicable), including Contributors.
-
-"Derivative Works" shall mean any work, whether in Source Code or other
-form, that is based on (or derived from) the Program and for which the
-editorial revisions, annotations, elaborations, or other modifications
-represent, as a whole, an original work of authorship.
-
-"Modified Works" shall mean any work in Source Code or other form that
-results from an addition to, deletion from, or modification of the
-contents of the Program, including, for purposes of clarity any new file
-in Source Code form that contains any contents of the Program. Modified
-Works shall not include works that contain only declarations,
-interfaces, types, classes, structures, or files of the Program solely
-in each case in order to link to, bind by name, or subclass the Program
-or Modified Works thereof.
-
-"Distribute" means the acts of a) distributing or b) making available
-in any manner that enables the transfer of a copy.
-
-"Source Code" means the form of a Program preferred for making
-modifications, including but not limited to software source code,
-documentation source, and configuration files.
-
-"Secondary License" means either the GNU General Public License,
-Version 2.0, or any later versions of that license, including any
-exceptions or additional permissions as identified by the initial
-Contributor.
-
-2. GRANT OF RIGHTS
-
-a) Subject to the terms of this Agreement, each Contributor hereby
-grants Recipient a non-exclusive, worldwide, royalty-free copyright
-license to reproduce, prepare Derivative Works of, publicly display,
-publicly perform, Distribute and sublicense the Contribution of such
-Contributor, if any, and such Derivative Works.
-
-b) Subject to the terms of this Agreement, each Contributor hereby
-grants Recipient a non-exclusive, worldwide, royalty-free patent
-license under Licensed Patents to make, use, sell, offer to sell,
-import and otherwise transfer the Contribution of such Contributor,
-if any, in Source Code or other form. This patent license shall
-apply to the combination of the Contribution and the Program if, at
-the time the Contribution is added by the Contributor, such addition
-of the Contribution causes such combination to be covered by the
-Licensed Patents. The patent license shall not apply to any other
-combinations which include the Contribution. No hardware per se is
-licensed hereunder.
-
-c) Recipient understands that although each Contributor grants the
-licenses to its Contributions set forth herein, no assurances are
-provided by any Contributor that the Program does not infringe the
-patent or other intellectual property rights of any other entity.
-Each Contributor disclaims any liability to Recipient for claims
-brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the
-rights and licenses granted hereunder, each Recipient hereby
-assumes sole responsibility to secure any other intellectual
-property rights needed, if any. For example, if a third party
-patent license is required to allow Recipient to Distribute the
-Program, it is Recipient's responsibility to acquire that license
-before distributing the Program.
-
-d) Each Contributor represents that to its knowledge it has
-sufficient copyright rights in its Contribution, if any, to grant
-the copyright license set forth in this Agreement.
-
-e) Notwithstanding the terms of any Secondary License, no
-Contributor makes additional grants to any Recipient (other than
-those set forth in this Agreement) as a result of such Recipient's
-receipt of the Program under the terms of a Secondary License
-(if permitted under the terms of Section 3).
-
-3. REQUIREMENTS
-
-3.1 If a Contributor Distributes the Program in any form, then:
-
-a) the Program must also be made available as Source Code, in
-accordance with section 3.2, and the Contributor must accompany
-the Program with a statement that the Source Code for the Program
-is available under this Agreement, and informs Recipients how to
-obtain it in a reasonable manner on or through a medium customarily
-used for software exchange; and
-
-b) the Contributor may Distribute the Program under a license
-different than this Agreement, provided that such license:
-i) effectively disclaims on behalf of all other Contributors all
-warranties and conditions, express and implied, including
-warranties or conditions of title and non-infringement, and
-implied warranties or conditions of merchantability and fitness
-for a particular purpose;
-
-ii) effectively excludes on behalf of all other Contributors all
-liability for damages, including direct, indirect, special,
-incidental and consequential damages, such as lost profits;
-
-iii) does not attempt to limit or alter the recipients' rights
-in the Source Code under section 3.2; and
-
-iv) requires any subsequent distribution of the Program by any
-party to be under a license that satisfies the requirements
-of this section 3.
-
-3.2 When the Program is Distributed as Source Code:
-
-a) it must be made available under this Agreement, or if the
-Program (i) is combined with other material in a separate file or
-files made available under a Secondary License, and (ii) the initial
-Contributor attached to the Source Code the notice described in
-Exhibit A of this Agreement, then the Program may be made available
-under the terms of such Secondary Licenses, and
-
-b) a copy of this Agreement must be included with each copy of
-the Program.
-
-3.3 Contributors may not remove or alter any copyright, patent,
-trademark, attribution notices, disclaimers of warranty, or limitations
-of liability ("notices") contained within the Program from any copy of
-the Program which they Distribute, provided that Contributors may add
-their own appropriate notices.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities
-with respect to end users, business partners and the like. While this
-license is intended to facilitate the commercial use of the Program,
-the Contributor who includes the Program in a commercial product
-offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes
-the Program in a commercial product offering, such Contributor
-("Commercial Contributor") hereby agrees to defend and indemnify every
-other Contributor ("Indemnified Contributor") against any losses,
-damages and costs (collectively "Losses") arising from claims, lawsuits
-and other legal actions brought by a third party against the Indemnified
-Contributor to the extent caused by the acts or omissions of such
-Commercial Contributor in connection with its distribution of the Program
-in a commercial product offering. The obligations in this section do not
-apply to any claims or Losses relating to any actual or alleged
-intellectual property infringement. In order to qualify, an Indemnified
-Contributor must: a) promptly notify the Commercial Contributor in
-writing of such claim, and b) allow the Commercial Contributor to control,
-and cooperate with the Commercial Contributor in, the defense and any
-related settlement negotiations. The Indemnified Contributor may
-participate in any such claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial
-product offering, Product X. That Contributor is then a Commercial
-Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance
-claims and warranties are such Commercial Contributor's responsibility
-alone. Under this section, the Commercial Contributor would have to
-defend claims against the other Contributors related to those performance
-claims and warranties, and if a court requires any other Contributor to
-pay any damages as a result, the Commercial Contributor must pay
-those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
-PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
-BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
-IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
-TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
-PURPOSE. Each Recipient is solely responsible for determining the
-appropriateness of using and distributing the Program and assumes all
-risks associated with its exercise of rights under this Agreement,
-including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs
-or equipment, and unavailability or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
-PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
-SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
-PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
-EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of
-the remainder of the terms of this Agreement, and without further
-action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity
-(including a cross-claim or counterclaim in a lawsuit) alleging that the
-Program itself (excluding combinations of the Program with other software
-or hardware) infringes such Recipient's patent(s), then such Recipient's
-rights granted under Section 2(b) shall terminate as of the date such
-litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it
-fails to comply with any of the material terms or conditions of this
-Agreement and does not cure such failure in a reasonable period of
-time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use
-and distribution of the Program as soon as reasonably practicable.
-However, Recipient's obligations under this Agreement and any licenses
-granted by Recipient relating to the Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement,
-but in order to avoid inconsistency the Agreement is copyrighted and
-may only be modified in the following manner. The Agreement Steward
-reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement
-Steward has the right to modify this Agreement. The Eclipse Foundation
-is the initial Agreement Steward. The Eclipse Foundation may assign the
-responsibility to serve as the Agreement Steward to a suitable separate
-entity. Each new version of the Agreement will be given a distinguishing
-version number. The Program (including Contributions) may always be
-Distributed subject to the version of the Agreement under which it was
-received. In addition, after a new version of the Agreement is published,
-Contributor may elect to Distribute the Program (including its
-Contributions) under the new version.
-
-Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
-receives no rights or licenses to the intellectual property of any
-Contributor under this Agreement, whether expressly, by implication,
-estoppel or otherwise. All rights in the Program not expressly granted
-under this Agreement are reserved. Nothing in this Agreement is intended
-to be enforceable by any entity that is not a Contributor or Recipient.
-No third-party beneficiary rights are created under this Agreement.
-
-Exhibit A - Form of Secondary Licenses Notice
-
-"This Source Code may also be made available under the following
-Secondary Licenses when the conditions for such availability set forth
-in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
-version(s), and exceptions or additional permissions here}."
-
-Simply including a copy of this Agreement, including this Exhibit A
-is not sufficient to license the Source Code under Secondary Licenses.
-
-If it is not possible or desirable to put the notice in a particular
-file, then You may include the notice in a location (such as a LICENSE
-file in a relevant directory) where a recipient would be likely to
-look for such a notice.
-
-You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/ARCHITECT/AppManager/pom.xml b/ARCHITECT/AppManager/pom.xml
deleted file mode 100644
index 48ee9ed424276f687c1b23ccbe9ea3f8df6c9427..0000000000000000000000000000000000000000
--- a/ARCHITECT/AppManager/pom.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>de.decideh2020</groupId>
-	<artifactId>appManager</artifactId>
-	<version>0.0.1-SNAPSHOT</version>
-	<repositories>
-		<repository>
-			<id>jgit-repository</id>
-			<url>https://repo.eclipse.org/content/groups/releases/</url>
-		</repository>
-	</repositories>
-	<build>
-		<sourceDirectory>src</sourceDirectory>
-		<plugins>
-			<plugin>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>3.7.0</version>
-				<configuration>
-					<source>1.8</source>
-					<target>1.8</target>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-	<dependencies>
-		<!-- Cloudpatterns dependency -->
-		<dependency>
-			<groupId>de.decideh2020</groupId>
-			<artifactId>cloudpatterns</artifactId>
-			<version>1.0-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>org.eclipse.jgit</groupId>
-			<artifactId>org.eclipse.jgit</artifactId>
-			<version>4.9.0.201710071750-r</version>
-		</dependency>
-		<!-- Gson: Java to Json conversion -->
-		<dependency>
-			<groupId>com.google.code.gson</groupId>
-			<artifactId>gson</artifactId>
-			<version>2.8.2</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.jena</groupId>
-			<artifactId>apache-jena-libs</artifactId>
-			<type>pom</type>
-			<version>3.4.0</version>
-		</dependency>
-
-
-	</dependencies>
-</project>
\ No newline at end of file
diff --git a/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/models/AppDescriptor.java b/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/models/AppDescriptor.java
deleted file mode 100644
index 0f43e0ff7ac7fd5206178582abe7694ee4705214..0000000000000000000000000000000000000000
--- a/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/models/AppDescriptor.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.appManager.models;
-
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.UUID;
-
-import org.apache.jena.rdf.model.Resource;
-
-public class AppDescriptor {
-	private UUID id;
-	private String name, description, version;
-	private Boolean highTechnologicalRisk;
-	
-	private LinkedList<Microservice> microservices;
-	private HashSet<Resource> projectNfrs;
-	private Object app_mcsla,containers[], virtual_machines[];
-	final public static String plugin_version ="0.2.2-alpha";
-	
-	public AppDescriptor() {
-		id = UUID.randomUUID();
-		microservices = new LinkedList<Microservice>();
-		setDeploymentOrder();
-		this.projectNfrs = new HashSet<Resource>();
-		this.version = plugin_version;
-	}
-	
-	
-	
-	/**
-	 * @return the description
-	 */
-	public String getDescription() {
-		return description;
-	}
-
-
-
-	/**
-	 * @param description the description to set
-	 */
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-
-
-	/**
-	 * @return the version
-	 */
-	public String getVersion() {
-		return version;
-	}
-
-
-
-	/**
-	 * @param version the version to set
-	 */
-	public void setVersion(String version) {
-		this.version = version;
-	}
-
-
-
-	/**
-	 * @return the highTechnologicalRisk
-	 */
-	public Boolean getHighTechnologicalRisk() {
-		return highTechnologicalRisk;
-	}
-
-
-
-	/**
-	 * @param highTechnologicalRisk the highTechnologicalRisk to set
-	 */
-	public void setHighTechnologicalRisk(Boolean highTechnologicalRisk) {
-		this.highTechnologicalRisk = highTechnologicalRisk;
-	}
-
-
-
-	/**
-	 * @return the app_mcsla
-	 */
-	public Object getApp_mcsla() {
-		return app_mcsla;
-	}
-
-
-
-	/**
-	 * @param app_mcsla the app_mcsla to set
-	 */
-	public void setApp_mcsla(Object app_mcsla) {
-		this.app_mcsla = app_mcsla;
-	}
-
-
-
-	
-
-
-
-	/**
-	 * @return the containers
-	 */
-	public Object[] getContainers() {
-		return containers;
-	}
-
-
-
-	/**
-	 * @param containers the containers to set
-	 */
-	public void setContainers(Object[] containers) {
-		this.containers = containers;
-	}
-
-
-
-	/**
-	 * @return the virtual_machines
-	 */
-	public Object[] getVirtual_machines() {
-		return virtual_machines;
-	}
-
-
-
-	/**
-	 * @param virtual_machines the virtual_machines to set
-	 */
-	public void setVirtual_machines(Object[] virtual_machines) {
-		this.virtual_machines = virtual_machines;
-	}
-
-
-
-	/**
-	 * @param id the id to set
-	 */
-	public void setId(UUID id) {
-		this.id = id;
-	}
-
-
-
-	public LinkedList<Microservice> changeIndex(int index, int plus) {
-		
-		int size = microservices.size();
-		if (index+plus>=0&& index+plus<size) {
-			Microservice mscv = microservices.get(index);
-			microservices.remove(index);
-			microservices.add(index+plus, mscv);
-		}
-		setDeploymentOrder();
-		return microservices;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-
-
-	
-
-	public void setDeploymentOrder(){
-		
-		for (Microservice m: microservices) {
-			m.setDeployment_order(microservices.indexOf(m));
-			
-		}
-	}
-
-
-	public LinkedList<Microservice> getMicroservices() {
-		return microservices;
-	}
-
-	public void setMicroservices(LinkedList<Microservice> microservices) {
-		this.microservices = microservices;
-		setDeploymentOrder();
-	}
-	
-	public LinkedList<Microservice> addMicroservice(Microservice microservice) {
-		this.microservices.add(microservice);
-		setDeploymentOrder();
-		return this.microservices;
-	}
-	
-	public LinkedList<Microservice> addMicroservices(int number){
-		for (int j = 0; j < number; j++) {
-			this.microservices.add(new Microservice());
-		}
-		setDeploymentOrder();
-		return this.microservices;
-	}
-	
-	public LinkedList<Microservice> removeMicroservice(int index) {
-		this.microservices.remove(index);
-		setDeploymentOrder();
-		return this.microservices;
-	}
-	
-	
-	public LinkedList<Microservice> removeMicroservice(Microservice microservice) {
-		this.microservices.remove(microservice);
-		setDeploymentOrder();
-		return this.microservices;
-	}
-
-	public String getIDString() {
-		return id.toString();
-	}
-	
-	/**
-	 * @return the id
-	 */
-	public UUID getUID() {
-		return id;
-	}
-
-
-	public HashSet<Resource> getProjectNfrs() {
-		return projectNfrs;
-	}
-
-
-
-	public void setProjectNfrs(HashSet<Resource> projectNfrs) {
-		this.projectNfrs = projectNfrs;
-		
-	}
-	public void addProjectNfr(Resource nfr) {
-		projectNfrs.add(nfr);
-		
-	}
-	public void removeProjectNfr(Resource nfr) {
-		projectNfrs.remove(nfr);
-		
-	}
-}
diff --git a/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/models/Microservice.java b/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/models/Microservice.java
deleted file mode 100644
index be48c5b32f890ddc8480a1466dc90a204714c2f4..0000000000000000000000000000000000000000
--- a/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/models/Microservice.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.appManager.models;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.UUID;
-
-import org.apache.jena.rdf.model.Resource;
-
-public class Microservice {
-	
-	private class InfrastructureRequirements{
-		private String disk_min, disk_max, ram;
-
-		/**
-		 * @return the disk_min
-		 */
-		public String getDisk_min() {
-			return disk_min;
-		}
-
-		/**
-		 * @param disk_min the disk_min to set
-		 */
-		public void setDisk_min(String disk_min) {
-			this.disk_min = disk_min;
-		}
-
-		/**
-		 * @return the disk_max
-		 */
-		public String getDisk_max() {
-			return disk_max;
-		}
-
-		/**
-		 * @param disk_max the disk_max to set
-		 */
-		public void setDisk_max(String disk_max) {
-			this.disk_max = disk_max;
-		}
-
-		/**
-		 * @return the ram
-		 */
-		public String getRam() {
-			return ram;
-		}
-
-		/**
-		 * @param ram the ram to set
-		 */
-		public void setRam(String ram) {
-			this.ram = ram;
-		}
-	}
-	private String  ms_name, patterns[], programming_language ="", type, category, ms_repo ;
-	private HashSet<Resource> nfrs;
-	private UUID ms_uid;
-	private boolean stateless = false, publicIP =false;
-	private URI endpoint[], container_ref;
-	private int deployment_order;
-	private ArrayList<String> dependencies = new ArrayList<String>();
-	private InfrastructureRequirements infrastructure_requirements; 
-	
-	/**
-	 * @return the programmingLanguage
-	 */
-	public String getProgrammingLanguage() {
-		return programming_language;
-	}
-
-
-	/**
-	 * @param programmingLanguage the programmingLanguage to set
-	 */
-	public void setProgrammingLanguage(String programmingLanguage) {
-		this.programming_language = programmingLanguage;
-	}
-
-
-	/**
-	 * @return the category
-	 */
-	public String getCategory() {
-		return category;
-	}
-
-
-	/**
-	 * @param category the category to set
-	 */
-	public void setCategory(String category) {
-		this.category = category;
-	}
-
-
-	/**
-	 * @return the endpoint
-	 */
-	public URI[] getEndpoint() {
-		return endpoint;
-	}
-
-
-	/**
-	 * @param endpoint the endpoint to set
-	 */
-	public void setEndpoint(URI[] endpoint) {
-		this.endpoint = endpoint;
-	}
-
-
-	/**
-	 * @return the container_ref
-	 */
-	public URI getContainer_ref() {
-		return container_ref;
-	}
-
-
-	/**
-	 * @param container_ref the container_ref to set
-	 */
-	public void setContainer_ref(URI container_ref) {
-		this.container_ref = container_ref;
-	}
-
-
-	/**
-	 * @return the deployment_order
-	 */
-	public int getDeployment_order() {
-		return deployment_order;
-	}
-
-
-	/**
-	 * @param deployment_order the deployment_order to set
-	 */
-	public void setDeployment_order(int deployment_order) {
-		this.deployment_order = deployment_order;
-	}
-
-
-	/**
-	 * @return the infrastructure_requirements
-	 */
-	public InfrastructureRequirements getInfrastructure_requirements() {
-		return infrastructure_requirements;
-	}
-
-
-	/**
-	 * @param infrastructure_requirements the infrastructure_requirements to set
-	 */
-	public void setInfrastructure_requirements(InfrastructureRequirements infrastructure_requirements) {
-		this.infrastructure_requirements = infrastructure_requirements;
-	}
-
-
-	/**
-	 * @return the repo
-	 */
-	public String getRepo() {
-		return ms_repo;
-	}
-
-
-	/**
-	 * @param repo the repo to set
-	 */
-	public void setRepo(String repo) {
-		this.ms_repo = repo;
-	}
-
-
-	/**
-	 * @return the id
-	 */
-	public UUID getUID() {
-		return ms_uid;
-	}
-
-
-	/**
-	 * @param dependencies the dependencies to set
-	 */
-	public void setDependencies(ArrayList<String> dependencies) {
-		this.dependencies = dependencies;
-	}
-
-	public void addDependency(String dependency) {
-		this.dependencies.add(dependency);
-	}
-
-
-
-	
-	public Microservice() {
-		
-		this("Microservice ", UUID.randomUUID());
-		String uuid = this.getUIDstring().substring(0, 8);
-		this.setName("Microservice " + uuid);
-	}
-	
-
-	public Microservice(String name) {
-		this(name, UUID.randomUUID());
-	}
-	
-	public Microservice(UUID id) {
-		this("Microservice", id);
-	}
-	
-	public Microservice(HashSet<Resource> nfrs) {
-		this("Microservice", nfrs);
-	}
-	
-	public Microservice(String name,  HashSet<Resource> nfrs) {
-		this(name, UUID.randomUUID(),nfrs );
-	}
-	
-	public Microservice(String name,  UUID id) {
-		this(name, id, new HashSet<Resource>() );
-	}
-	public Microservice(UUID id,  HashSet<Resource> nfrs) {
-		this("Microservice", id,nfrs );
-	}
-	
-	
-	public Microservice(String name,  UUID id, HashSet<Resource> nfrs) {
-		super();
-		this.ms_name = name;
-		this.ms_uid = id;
-		this.stateless=true;
-		this.nfrs = nfrs;
-	}
-
-	public String getUIDstring(){
-		return ms_uid.toString();
-	}
-	
-	public String getName(){
-		return ms_name;
-	}
-	
-	public void setName(String name) {
-		this.ms_name = name;
-	}
-
-	public HashSet<Resource> getNfrs() {
-		return nfrs;
-	}
-
-	public void setNfrs(HashSet<Resource> nfrs) {
-		this.nfrs = nfrs;
-	}
-
-	public String[] getPatterns() {
-		return patterns;
-	}
-
-	public void setPatterns(String[] patterns) {
-		this.patterns = patterns;
-	}
-
-	public String getLanguage() {
-		return programming_language;
-	}
-
-	public void setLanguage(String language) {
-		this.programming_language = language;
-	}
-
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	public boolean isStateless() {
-		return stateless;
-	}
-	
-	public void setStateless(boolean stateless) {
-		this.stateless = stateless;
-	}
-
-
-	/**
-	 * @return the dependencies
-	 */
-	public ArrayList<String> getDependencies() {
-		return dependencies;
-	}
-
-
-
-
-}
diff --git a/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/persistence/GitHandler.java b/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/persistence/GitHandler.java
deleted file mode 100644
index ae94aeed3ab16008baa1ef90f9ec55bd001d696a..0000000000000000000000000000000000000000
--- a/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/persistence/GitHandler.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.appManager.persistence;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-
-import org.eclipse.jgit.api.AddCommand;
-import org.eclipse.jgit.api.Git;
-import org.eclipse.jgit.api.PushCommand;
-import org.eclipse.jgit.api.errors.CanceledException;
-import org.eclipse.jgit.api.errors.ConcurrentRefUpdateException;
-import org.eclipse.jgit.api.errors.DetachedHeadException;
-import org.eclipse.jgit.api.errors.GitAPIException;
-import org.eclipse.jgit.api.errors.InvalidConfigurationException;
-import org.eclipse.jgit.api.errors.InvalidRemoteException;
-import org.eclipse.jgit.api.errors.JGitInternalException;
-import org.eclipse.jgit.api.errors.NoFilepatternException;
-import org.eclipse.jgit.api.errors.NoHeadException;
-import org.eclipse.jgit.api.errors.NoMessageException;
-import org.eclipse.jgit.api.errors.RefNotFoundException;
-import org.eclipse.jgit.api.errors.TransportException;
-import org.eclipse.jgit.api.errors.WrongRepositoryStateException;
-import org.eclipse.jgit.transport.CredentialsProvider;
-import org.eclipse.jgit.transport.PushResult;
-import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
-
-
-
-public class GitHandler {
-	public static class Repository {
-		private String uri, path, host, user, password, name, port, protocol;
-		private boolean secureStorage = true, newRepo = true, localRepo=true;
-
-		public Repository(String uri, String path, String host, String user, String password, String port, String name, String protocol, boolean secureStorage) {
-			this.uri = uri;
-			this.path = path;
-			this.host = host;
-			this.user = user;
-			this.name = name;
-			this.port = port;
-			this.protocol = protocol;
-			this.password = password;
-			this.setSecureStorage(secureStorage);
-		}
-
-		public Repository() {
-			this.setSecureStorage(false);
-		}
-
-		/**
-		 * @return the URI
-		 */
-		public String getURI() {
-			return uri;
-		}
-
-		/**
-		 * @param URI
-		 *            the URI to set
-		 */
-		public void setURI(String uri) {
-			this.uri = uri;
-		}
-
-		/**
-		 * @return the path
-		 */
-		public String getPath() {
-			return path;
-		}
-
-		/**
-		 * @param path
-		 *            the path to set
-		 */
-		public void setPath(String path) {
-			this.path = path;
-		}
-
-		/**
-		 * @return the host
-		 */
-		public String getHost() {
-			return host;
-		}
-
-		/**
-		 * @param host
-		 *            the host to set
-		 */
-		public void setHost(String host) {
-			this.host = host;
-		}
-
-		/**
-		 * @return the user
-		 */
-		public String getUser() {
-			return user;
-		}
-
-		/**
-		 * @param user
-		 *            the user to set
-		 */
-		public void setUser(String user) {
-			this.user = user;
-		}
-
-		/**
-		 * @return the password
-		 */
-		public String getPassword() {
-			return password;
-		}
-
-		/**
-		 * @param password
-		 *            the password to set
-		 */
-		public void setPassword(String password) {
-			this.password = password;
-		}
-
-		/**
-		 * @return the secureStorage
-		 */
-		public boolean isSecureStorage() {
-			return secureStorage;
-		}
-
-		/**
-		 * @param secureStorage
-		 *            the secureStorage to set
-		 */
-		public void setSecureStorage(boolean secureStorage) {
-			this.secureStorage = secureStorage;
-		}
-
-
-		/**
-		 * @return the name
-		 */
-		public String getName() {
-			return name;
-		}
-
-		/**
-		 * @param name the name to set
-		 */
-		public void setName(String name) {
-			this.name = name;
-		}
-
-		/**
-		 * @return the port
-		 */
-		public String getPort() {
-			return port;
-		}
-
-		/**
-		 * @param port the port to set
-		 */
-		public void setPort(String port) {
-			this.port = port;
-		}
-
-		/**
-		 * @return the protocol
-		 */
-		public String getProtocol() {
-			return protocol;
-		}
-
-		/**
-		 * @param protocol the protocol to set
-		 */
-		public void setProtocol(String protocol) {
-			this.protocol = protocol;
-		}
-
-		/**
-		 * @return the newRepo
-		 */
-		public boolean isNewRepo() {
-			return newRepo;
-		}
-
-		/**
-		 * @param newRepo the newRepo to set
-		 */
-		public void setNewRepo(boolean newRepo) {
-			this.newRepo = newRepo;
-		}
-
-		/**
-		 * @return the localRepo
-		 */
-		public boolean isLocalRepo() {
-			return localRepo;
-		}
-
-		/**
-		 * @param localRepo the localRepo to set
-		 */
-		public void setLocalRepo(boolean localRepo) {
-			this.localRepo = localRepo;
-		}
-
-	}
-	
-	private Repository repository;
-	private Git git;
-	private File directory;
-	private CredentialsProvider cp;
-	
-	public GitHandler(Repository repository) {
-		this.repository=repository;
-		if(repository.getName()!=null && !repository.getName().isEmpty() 
-				&& repository.getPassword()!=null && !repository.getPassword().isEmpty()) {
-			cp=new UsernamePasswordCredentialsProvider(repository.getName(), repository.getPassword());
-		}
-		
-	}
-	
-	
-	public void cloneRepositoryTo(File dir) throws InvalidRemoteException, TransportException, GitAPIException {
-		
-		
-		Git git = Git.cloneRepository()
-				.setURI(repository.getURI())
-				.setCredentialsProvider(cp)
-				.setDirectory(dir)
-				.call();
-		
-		setDirectory(git.getRepository().getDirectory());
-		git.close();
-		
-	}
-	
-	public void createRepositoryIn(File dir) throws IllegalStateException, GitAPIException {
-		git = Git.init().setDirectory(dir).call();
-		directory= git.getRepository().getDirectory();
-		
-	}
-	
-    public void cloneRepo() throws IOException, NoFilepatternException, GitAPIException {
-        Git.cloneRepository()
-                .setURI(repository.getURI())
-                .setDirectory(directory)
-                .call();
-    }
-
-    public void addToRepo() throws IOException, NoFilepatternException, GitAPIException {
-        AddCommand add = git.add();
-        add.addFilepattern(".").call();
-    }
-
-    public void commitToRepo(String message) throws IOException, NoHeadException,
-            NoMessageException, ConcurrentRefUpdateException,
-            JGitInternalException, WrongRepositoryStateException, GitAPIException {
-        git.commit().setMessage(message).call();
-    }
-
-    public void pushToRepo() throws IOException, JGitInternalException,
-            InvalidRemoteException, GitAPIException {
-        PushCommand pc = git.push();
-        pc.setCredentialsProvider(cp)
-                .setForce(true)
-                .setPushAll();
-        try {
-            Iterator<PushResult> it = pc.call().iterator();
-            if (it.hasNext()) {
-                System.out.println(it.next().toString());
-            }
-        } catch (InvalidRemoteException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void pullFromRepo() throws IOException, WrongRepositoryStateException,
-            InvalidConfigurationException, DetachedHeadException,
-            InvalidRemoteException, CanceledException, RefNotFoundException,
-            NoHeadException, GitAPIException {
-        git.pull().call();
-    }
-
-    public void setCredentials(String name,String password) {
-    	cp=new UsernamePasswordCredentialsProvider(repository.getName(), repository.getPassword());
-    }
-    
-    
-	/**
-	 * @return the repository
-	 */
-	public Repository getRepository() {
-		return repository;
-	}
-
-	/**
-	 * @param repository the repository to set
-	 */
-	public void setRepository(Repository repository) {
-		this.repository = repository;
-	}
-
-
-	/**
-	 * @return the directory
-	 */
-	public File getDirectory() {
-		return directory;
-	}
-
-
-	/**
-	 * @param directory the directory to set
-	 */
-	public void setDirectory(File directory) {
-		this.directory = directory;
-	}
-}
diff --git a/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/persistence/JsonHandler.java b/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/persistence/JsonHandler.java
deleted file mode 100644
index 8f85fe15f333239e042a259c158f2fadfb8092de..0000000000000000000000000000000000000000
--- a/ARCHITECT/AppManager/src/eu/DECIDEh2020/architect/appManager/persistence/JsonHandler.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-
-/**
- * 
- */
-package eu.DECIDEh2020.architect.appManager.persistence;
-
-import java.lang.reflect.Type;
-
-import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.rdf.model.ResourceFactory;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.InstanceCreator;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-import com.google.gson.JsonSyntaxException;
-
-import eu.DECIDEh2020.architect.appManager.models.AppDescriptor;
-import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
-/**
- * @author tja
- *
- */
-public class JsonHandler {
-
-	public static class AppDescriptorWrapper {
-		// Old version means an older version than the one this class currently uses
-		private boolean oldVersion = false;
-		private String fileVersion = "";
-		private AppDescriptor appDescriptor = null;
-
-		public AppDescriptor getAppDescriptor() {
-			return appDescriptor;
-		}
-
-		public void setAppDescriptor(AppDescriptor appDescriptor) {
-			this.appDescriptor = appDescriptor;
-		}
-
-		public boolean isOldVersion() {
-			return oldVersion;
-		}
-
-		public void setOldVersion(boolean oldVersion) {
-			this.oldVersion = oldVersion;
-		}
-
-		public String getFileVersion() {
-			return fileVersion;
-		}
-
-		public void setFileVersion(String fileVersion) {
-			this.fileVersion = fileVersion;
-		}
-	}
-
-	private static class ResourceSerializer implements JsonSerializer<Resource> {
-		public JsonElement serialize(Resource src, Type typeOfSrc, JsonSerializationContext context) {
-			return new JsonPrimitive(src.toString());
-		}
-	}
-
-	private static class ResourceDeserializer implements JsonDeserializer<Resource> {
-		public Resource deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
-				throws JsonParseException {
-
-			return Patterns.createDefaultPatterns().getModel().createResource(json.getAsJsonPrimitive().getAsString());
-		}
-	}
-
-	private static class ResourceInstanceCreator implements InstanceCreator<Resource> {
-		public Resource createInstance(Type type) {
-
-			return ResourceFactory.createResource();
-		}
-	}
-
-	/**
-	 * @param jsonString the String in JSON format to convert into an AppDescriptor Object
-	 * @return AppDescriptorWrapper a wrapper Object containing the AppDescriptor and a Boolean value which might provide the reason for possible conversion errors by indicating the version of the AppDescriptor file. 
-	 * @throws JsonSyntaxException TODO
-	 */
-	public static AppDescriptorWrapper toAppDescriptor(String jsonString) throws JsonSyntaxException {
-		AppDescriptorWrapper app = new AppDescriptorWrapper();
-
-		Gson gson = new GsonBuilder().registerTypeAdapter(Resource.class, new ResourceInstanceCreator())
-				.registerTypeAdapter(Resource.class, new ResourceDeserializer()).create();
-
-		app.appDescriptor = gson.fromJson(jsonString, AppDescriptor.class);
-
-		JsonParser parser = new JsonParser();
-		JsonObject jsonObject = parser.parse(jsonString).getAsJsonObject();
-
-		if (jsonObject.has("version")) {
-			String version = parser.parse(jsonString).getAsJsonObject().get("version").getAsString();
-
-			if (!version.equals(AppDescriptor.plugin_version)) {
-				app.setOldVersion(true);
-				app.setFileVersion(version);
-			}
-
-		}
-		return app;
-
-	}
-	
-	public static String fromAppDescriptor(AppDescriptor app) {
-		//create new gson with pretty printing activated and Serializer & deserializer for Resource Type
-		Gson gson = new GsonBuilder()
-				.setPrettyPrinting()
-				.registerTypeAdapter(Resource.class, new ResourceSerializer())
-				.registerTypeAdapter(Resource.class, new ResourceDeserializer())
-				.create();
-		
-		
-		
-		//convert app descriptor object to json string
-		return gson.toJson(app);
-		
-	}
-	
-
-}
diff --git a/ARCHITECT/CloudPatterns/.gitkeep b/ARCHITECT/CloudPatterns/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/ARCHITECT/CloudPatterns/pom.xml b/ARCHITECT/CloudPatterns/pom.xml
deleted file mode 100644
index 68eab2cc67264daf48fbe889e6e0c2a2789d5f8b..0000000000000000000000000000000000000000
--- a/ARCHITECT/CloudPatterns/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>eu.DECIDEh2020</groupId>
-    <artifactId>cloudpatterns</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.2.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jena</groupId>
-            <artifactId>apache-jena-libs</artifactId>
-            <type>pom</type>
-            <version>3.4.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.11</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.6.1</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/decide-patterns.ttl b/ARCHITECT/CloudPatterns/src/main/resources/patterns/decide-patterns.ttl
deleted file mode 100644
index 0f3b295d5320f9e727c6faf935f292b4984af905..0000000000000000000000000000000000000000
--- a/ARCHITECT/CloudPatterns/src/main/resources/patterns/decide-patterns.ttl
+++ /dev/null
@@ -1,231 +0,0 @@
-#
-# Copyright (c) 2017 Fraunhofer FOKUS.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the
-# GNU AGPL v3 which accompanies
-# this distribution, and is available at
-# http://www.gnu.org/licenses/agpl.txt
-#
-# Contributors:
-#
-# Simon Dutkowski Fraunhofer FOKUS
-#
-# Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-#
-
-@base <http://decideh2020.eu/resources/patterns/> .
-
-@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .
-@prefix dct:  <http://purl.org/dc/terms/> .
-@prefix foaf: <http://xmlns.com/foaf/0.1/> .
-@prefix dp:   <http://decideh2020.eu/ns/patterns/> .
-
-@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
-
-<http://decideh2020.eu/resources/patterncategories>
-    a skos:ConceptScheme ;
-    rdfs:label "Cloud Pattern Categories"@en .
-
-<http://decideh2020.eu/resources/patterncategories/fundamental>
-    a skos:Concept ;
-    skos:inScheme <http://decideh2020.eu/resources/patterncategories> ;
-    skos:prefLabel "Fundamental Pattern"@en .
-
-<http://decideh2020.eu/resources/patterncategories/development>
-    a skos:Concept ;
-    skos:inScheme <http://decideh2020.eu/resources/patterncategories> ;
-    skos:prefLabel "Development Pattern"@en .
-
-<http://decideh2020.eu/resources/patterncategories/optimization>
-    a skos:Concept ;
-    skos:inScheme <http://decideh2020.eu/resources/patterncategories> ;
-    skos:prefLabel "Optimization Pattern"@en .
-
-<http://decideh2020.eu/resources/patterncategories/deployment>
-    a skos:Concept ;
-    skos:inScheme <http://decideh2020.eu/resources/patterncategories> ;
-    skos:prefLabel "Deployment Pattern"@en .
-
-<availability>
-    a dp:NFR ;
-    dct:title "Availability"@en ;
-    dct:description ""@en .
-
-<cost>
-    a dp:NFR ;
-    dct:title "Cost"@en ;
-    dct:description ""@en .
-
-<scalability>
-    a dp:NFR ;
-    dct:title "Scalability"@en ;
-    dct:description ""@en .
-
-<performance>
-    a dp:NFR ;
-    dct:title "Performance"@en ;
-    dct:description ""@en .
-
-<location>
-    a dp:NFR ;
-    dct:title "Location"@en ;
-    dct:description ""@en .
-
-<distributed-application>
-    a dp:Pattern ;
-    dct:title "Distributed Application"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/fundamental> ;
-    dp:icon <urn:distributed_application.png> ;
-    dct:subject "How can application functionality be decomposed to be handled by separate application components?"@en ;
-    dct:description "A cloud application divides provided functionality among multiple application components that can be scaled out independently."@en ;
-    dp:context "Applications have to respect the distribution and the scaling-out support of cloud environments in their architecture to efficiently benefit from it. Cloud applications, therefore, should to rely on multiple, possibly redundant IT resources. This can especially be the case if the cloud provider assures Environment-based Availability – the availability of the complete environment and not of single IT resources hosted in it."@en ;
-    dp:solution "The functionality of the application is divided into multiple independent components that provide a certain function. This componentization of application functionality introduces a logical decomposition of the application. These logical components are subsumed to multiple tiers to denote that they shall be deployed together physically, i.e., on one server (cluster)."@en ;
-    dct:license <https://creativecommons.org/licenses/by/4.0/> ;
-    foaf:page [
-        a foaf:Document ;
-        foaf:topic "Distributed Application Pattern" ;
-        foaf:primaryTopic <http://www.cloudcomputingpatterns.org/distributed_application/> ;
-    ] ;
-    dct:relation <elastic-infrastructure> ;
-    dct:relation <watchdog> .
-
-<two-tier-cloud-application>
-    a dp:Pattern ;
-    dct:title "Two-Tier Cloud Application"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/fundamental> ;
-    dp:icon <urn:two_tier_cloud_application.png> ;
-    dct:subject "How can application functionality be separated from data handling to scale them independently?"@en ;
-    dct:description "Presentation and business logic is bundled to one stateless tier that is easy to scale. This tier is separated from the data tier that is harder to scale and often handled by a provider-supplied storage offering."@en ;
-    dp:context "A Distributed Application is decomposed into application components to scale individual application functions independently. In this scope, data handling functionality is significantly harder to scale than Stateless Components, because Stateful Components have to coordinate state information between instances. Therefore, the application shall be decomposed in a fashion that separates the easy-to-scale functionality from the hard-to-scale functionality."@en ;
-    dp:solution "Application functionality is decomposed into data handling functionality, provided by one or several Storage Offerings, and application components handling presentation and business logic. This separation enables the two tiers to elastically scale independently with their workloads."@en ;
-    dct:license <https://creativecommons.org/licenses/by/4.0/> ;
-    foaf:page [
-        a foaf:Document ;
-        foaf:topic "Two-Tier Cloud Application" ;
-        foaf:primaryTopic <http://www.cloudcomputingpatterns.org/two_tier_cloud_application/> ;
-    ] ;
-    dct:relation <three-tier-cloud-application> ;
-    dct:relation <content-distribution-network> ;
-    dct:relation <hybrid-data> ;
-    dct:relation <hybrid-backup> ;
-    dct:relation <hybrid-application-functions> ;
-    dct:relation <hybrid-development-environment> .
-
-<three-tier-cloud-application>
-    a dp:Pattern ;
-    dct:title "Three-Tier Cloud Application"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/fundamental> ;
-    dp:icon <urn:three_tier_cloud_application.png> ;
-    dct:subject "How can presentation logic, business logic, and data handling be decomposed into separate tiers that are scaled independently?"@en ;
-    dct:description "The presentation, business logic, and data handling is realized as separate tiers to scale stateless presentation and compute-intensive processing independently of the data tier, which is harder to scale and often handled by the cloud provider."@en ;
-    dp:context "A Distributed Application is decomposed into application components to scale individual application functions independently. There can be many differentiating factors of application tiers. For example, if Processing Components are more computation intensive or are used less frequently than User Interface Components, aligning the elastic scaling of these two components by summarizing their implementation in one tier can be inefficient. This issue arises every time components experiences different Application Workloads. The number of provisioned component instances cannot be aligned well to the different workloads if they are summarized to coarse grained tiers."@en ;
-    dp:solution "The application is decomposed into three tiers, where each tier is elastically scaled independently. The presentation tier is comprised of a load balancer and an application component that implements the Stateless Component pattern and User Interface Component pattern. The business logic tier is comprised of an application component implementing the Stateless Component pattern in addition to the Processing Component pattern."@en ;
-    dct:license <https://creativecommons.org/licenses/by/4.0/> ;
-    foaf:page [
-        a foaf:Document ;
-        foaf:topic "Three-Tier Cloud Application" ;
-        foaf:primaryTopic <http://www.cloudcomputingpatterns.org/three_tier_cloud_application/> ;
-    ] ;
-    dct:relation <two-tier-cloud-application> ;
-    dct:relation <content-distribution-network> ;
-    dct:relation <hybrid-cloud-applications> .
-
-<loose-coupling>
-    a dp:Pattern ;
-    dct:title "Loose Coupling"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/fundamental> ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/development> ;
-    dp:icon <urn:loose_coupling.png> ;
-    dct:subject "How can dependencies between Distributed Applications and between individual components of these applications be reduced?"@en ;
-    dct:description "Information exchange between applications and their individual components as well as associated management tasks, such as scaling, failure handling, or update management can be simplified significantly if application components can be treated individually and the dependencies among them are kept to a minimum."@en ;
-    dp:context "Information exchange between applications and their individual components as well as associated management tasks, such as scaling, failure handling, or update management can be simplified significantly if application components can be treated individually and the dependencies among them are kept to a minimum."@en ;
-    dp:solution "Communicating components and multiple integrated applications are decoupled from each other by interacting through a broker. This broker encapsulates the assumptions that communication partners would otherwise have to make about one other and, thus, ensures separation of concerns."@en ;
-    dct:license <https://creativecommons.org/licenses/by/4.0/> ;
-    foaf:page [
-        a foaf:Document ;
-        foaf:topic "Loose Coupling Pattern" ;
-        foaf:primaryTopic <http://www.cloudcomputingpatterns.org/loose_coupling/> ;
-    ] ;
-    dct:relation <distributed-application> ;
-    dct:relation <two-tier-cloud-application> ;
-    dct:relation <hypervisor> ;
-    dct:relation <eventual-consistency> ;
-    dct:relation <message-oriented-middleware> ;
-    dct:relation <watchdog> ;
-    dp:hasPositiveImpactOn <scalability> .
-
-<managed-configuration>
-    a dp:Pattern ;
-    dct:title "Managed Configuration"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/fundamental> ;
-    dp:icon <urn:managed_configuration.png> ;
-    dct:subject ""@en ;
-    dct:description ""@en ;
-    dp:context ""@en ;
-    dp:solution ""@en .
-
-<containerization>
-    a dp:Pattern ;
-    dct:title "Containerization"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/fundamental> ;
-    dct:subject ""@en ;
-    dct:description ""@en ;
-    dp:context ""@en ;
-    dp:solution ""@en .
-
-<service-registry>
-    a dp:Pattern ;
-    dct:title "Service Registry"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/fundamental> .
-
-<provider-adapter>
-    a dp:Pattern ;
-    dct:title "Provider Adapter"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/optimization> .
-
-<elasticity-manager>
-    a dp:Pattern ;
-    dct:title "Elasticity Manager"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/optimization> ;
-    dp:hasPositiveImpactOn <scalability> .
-
-<resiliency-management-process>
-    a dp:Pattern ;
-    dct:title "Resiliency Management Process"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/optimization> ;
-    dp:hasPositiveImpactOn <availability> .
-
-<elastic-load-balancer>
-    a dp:Pattern ;
-    dct:title "Elastic Load Balancer"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/optimization> ;
-    dp:hasPositiveImpactOn <availability> .
-
-<elastic-queue>
-    a dp:Pattern ;
-    dct:title "Elastic Queue"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/optimization> ;
-    dp:hasPositiveImpactOn <scalability> .
-
-<stateless-component>
-    a dp:Pattern ;
-    dct:title "Stateless Component"@en ;
-    dct:type <http://decideh2020.eu/resources/patterncategories/development> ;
-    dp:icon <urn:stateless_component.png> ;
-    dct:subject "How can elasticity and robustness of an application component be increased?"@en ;
-    dct:description "State is handled external of application components to ease their scaling-out and to make the application more tolerant to component failures."@en ;
-    dp:context "The components of a Distributed Application are deployed among multiple cloud resources to benefit from this distributed runtime environment through scaling out.The most significant factor complicating addition and removal of component instances in this scope is the internal state maintained by them. In case of failure, this information may even be lost."@en ;
-    dp:solution "Application components are implemented in a fashion that they do not have an internal state. Instead, their state and configuration is stored externally in Storage Offerings or provided to the component with each request."@en ;
-    dct:license <https://creativecommons.org/licenses/by/4.0/> ;
-    foaf:page [
-        a foaf:Document ;
-        foaf:topic "Stateless Component Pattern" ;
-        foaf:primaryTopic <http://www.cloudcomputingpatterns.org/stateless_component/> ;
-    ] ;
-    dct:relation <relational-database> ;
-    dct:relation <key-value-storage> ;
-    dct:relation <blob-storage> ;
-    dct:relation <message-oriented-middleware> ;
-    dp:hasPositiveImpactOn <scalability> .
diff --git a/ARCHITECT/CloudPatterns/src/test/java/eu/DECIDEh2020/architect/patterns/PatternsTest.java b/ARCHITECT/CloudPatterns/src/test/java/eu/DECIDEh2020/architect/patterns/PatternsTest.java
deleted file mode 100644
index 81b4da02d61920b7132809c9e519b890e5a537d5..0000000000000000000000000000000000000000
--- a/ARCHITECT/CloudPatterns/src/test/java/eu/DECIDEh2020/architect/patterns/PatternsTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
-package eu.DECIDEh2020.architect.patterns;
-
-import eu.DECIDEh2020.architect.cloudpatterns.DECIDEPatterns;
-import eu.DECIDEh2020.architect.cloudpatterns.DP;
-import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
-import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.vocabulary.DCTerms;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-import java.io.InputStream;
-import java.util.Collections;
-import java.util.List;
-
-public class PatternsTest {
-
-    private Patterns patterns;
-
-    @BeforeTest
-    void initPatterns() {
-        patterns = Patterns.createDefaultPatterns();
-        assert patterns.getModel() != null : "Expected initial patterns model.";
-    }
-
-    @Test
-    void listPatterns() {
-        List<Resource> patternList = patterns.listPatterns();
-        assert patternList.size() == 13 : "Expected to get a list with 13 elements.";
-    }
-
-    @Test
-    void getPattern() {
-        Resource pattern = patterns.getPattern(DECIDEPatterns.BASE + "patterns/loose-coupling");
-        assert pattern != null : "Expected to get loose coupling pattern.";
-        assert pattern.getProperty(DCTerms.title).getString().equals("Loose Coupling") : "Expected 'Loose Coupling' in title";
-    }
-
-    @Test
-    void getIcon() {
-        Resource pattern = patterns.getPattern(DECIDEPatterns.BASE + "patterns/stateless-component");
-        assert pattern != null : "Expected stateless component pattern.";
-        Resource icon = pattern.getProperty(DP.icon).getResource();
-        assert icon != null : "Expected icon property";
-        InputStream stream = patterns.getIcon(icon);
-        assert stream != null : "Expected icon as input stream.";
-    }
-
-    @Test
-    void getSolution() {
-        Resource pattern = patterns.getPattern(DECIDEPatterns.BASE + "patterns/stateless-component");
-        assert pattern != null : "Expected stateless component pattern.";
-        assert !pattern.getProperty(DP.solution).getString().isEmpty(): "Expected non empty string.";
-    }
-
-    @Test
-    void testCategories() {
-        List<Resource> patternList = patterns.getPatternsByCategory(patterns.getModel().createResource(":dummy"));
-        assert patternList == null : "Expected null list";
-        patternList = patterns.getPatternsByCategory(DECIDEPatterns.fundamentalCategory);
-        assert patternList.size() == 7 : "Expected list of patterns with 7 elements.";
-        patternList = patterns.getPatternsByCategory(DECIDEPatterns.optimizationCategory);
-        assert patternList.size() == 5 : "Expected empty list of 5 patterns.";
-        patternList = patterns.getPatternsByCategory(DECIDEPatterns.developmentCategory);
-        assert patternList.size() == 2 : "Expected list of patterns with two elements.";
-    }
-
-    @Test
-    void listNFRs() {
-        List<Resource> patternList = patterns.listNFRs();
-        assert patternList.size() == 5 : "Expected to get a list with 5 elements.";
-    }
-
-    @Test
-    void testInference() {
-        List<Resource> patternList = patterns.inferPatterns(Collections.singletonList(DECIDEPatterns.scalability));
-        assert patternList.size() == 3 : "Expected to get a list with 3 elements.";
-    }
-    
-    @Test
-    void testBadInference() {
-        List<Resource> patternList = patterns.inferBadPatterns(Collections.singletonList(DECIDEPatterns.scalability));
-        assert patternList.size() == 0 : "Expected to get a list with 0 elements.";
-    }
-}
diff --git a/ARCHITECT/CloudPatternsMicroservice/.gitkeep b/ARCHITECT/CloudPatternsMicroservice/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/ARCHITECT/CloudPatternsMicroservice/3rdpartylibs/cloudpatterns-1.0-SNAPSHOT.jar b/ARCHITECT/CloudPatternsMicroservice/3rdpartylibs/cloudpatterns-1.0-SNAPSHOT.jar
deleted file mode 100644
index 5e3aebd310045237383724384b5075b2d3bf4421..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/CloudPatternsMicroservice/3rdpartylibs/cloudpatterns-1.0-SNAPSHOT.jar and /dev/null differ
diff --git a/ARCHITECT/CloudPatternsMicroservice/3rdpartylibs/pom.xml b/ARCHITECT/CloudPatternsMicroservice/3rdpartylibs/pom.xml
deleted file mode 100644
index 68eab2cc67264daf48fbe889e6e0c2a2789d5f8b..0000000000000000000000000000000000000000
--- a/ARCHITECT/CloudPatternsMicroservice/3rdpartylibs/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>eu.DECIDEh2020</groupId>
-    <artifactId>cloudpatterns</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.2.3</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jena</groupId>
-            <artifactId>apache-jena-libs</artifactId>
-            <type>pom</type>
-            <version>3.4.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.11</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.6.1</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/ARCHITECT/CloudPatternsMicroservice/pom.xml b/ARCHITECT/CloudPatternsMicroservice/pom.xml
deleted file mode 100644
index 16fbc4d3103119a70349ba6921e2541cccfe39ef..0000000000000000000000000000000000000000
--- a/ARCHITECT/CloudPatternsMicroservice/pom.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>eu.DECIDEh2020</groupId>
-    <artifactId>cloudpatternscompendium</artifactId>
-    <version>1.0-SNAPSHOT</version>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <verticle.name>eu.DECIDEh2020.architect.cloudpatterns.compendium.Server</verticle.name>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>6.11</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>1.2.3</version>
-        </dependency>
-        <dependency>
-            <groupId>io.vertx</groupId>
-            <artifactId>vertx-web</artifactId>
-            <version>3.4.2</version>
-        </dependency>
-        <dependency>
-            <groupId>io.vertx</groupId>
-            <artifactId>vertx-web-templ-thymeleaf</artifactId>
-            <version>3.4.2</version>
-        </dependency>
-        <dependency>
-            <groupId>io.vertx</groupId>
-            <artifactId>vertx-health-check</artifactId>
-            <version>3.4.2</version>
-        </dependency>
-        <dependency>
-            <groupId>io.vertx</groupId>
-            <artifactId>vertx-dropwizard-metrics</artifactId>
-            <version>3.4.2</version>
-        </dependency>
-        <dependency>
-            <groupId>io.vertx</groupId>
-            <artifactId>vertx-service-proxy</artifactId>
-            <version>3.4.2</version>
-        </dependency>
-        <dependency>
-            <groupId>io.vertx</groupId>
-            <artifactId>vertx-codegen</artifactId>
-            <version>3.4.2</version>
-        </dependency>
-        <dependency>
-            <groupId>eu.DECIDEh2020</groupId>
-            <artifactId>cloudpatterns</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.6.1</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                    <useIncrementalCompilation>false</useIncrementalCompilation>
-                    <annotationProcessors>
-                        <annotationProcessor>io.vertx.codegen.CodeGenProcessor</annotationProcessor>
-                    </annotationProcessors>
-                    <generatedSourcesDirectory>${project.basedir}/src/main/generated</generatedSourcesDirectory>
-                    <compilerArgs>
-                        <arg>-Acodegen.output=${project.basedir}/src/main</arg>
-                    </compilerArgs>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-clean-plugin</artifactId>
-                <version>3.0.0</version>
-                <configuration>
-                    <filesets>
-                        <fileset>
-                            <directory>${project.basedir}/src/main/generated</directory>
-                        </fileset>
-                    </filesets>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <version>2.3</version>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <transformers>
-                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                                    <manifestEntries>
-                                        <Main-Class>io.vertx.core.Launcher</Main-Class>
-                                        <Main-Verticle>${verticle.name}</Main-Verticle>
-                                    </manifestEntries>
-                                </transformer>
-                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
-                                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-                                    <resource>META-INF/services/io.vertx.core.spi.VerticleFactory</resource>
-                                </transformer>
-                            </transformers>
-                            <artifactSet>
-                            </artifactSet>
-                            <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-fat.jar</outputFile>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/package-info.java b/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/package-info.java
deleted file mode 100644
index 43f47cf898709b3e3ba5e73a6028ebeca7157ecf..0000000000000000000000000000000000000000
--- a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-@ModuleGen(groupPackage = "eu.DECIDEh2020.architect.cloudpatterns", name = "cloudpatternscompendium")
-package eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
-
-import io.vertx.codegen.annotations.ModuleGen;
\ No newline at end of file
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/resources/openapi/images/logoDecide_300ppp.jpg b/ARCHITECT/CloudPatternsMicroservice/src/main/resources/openapi/images/logoDecide_300ppp.jpg
deleted file mode 100644
index 9b4c3f9bdc961c0c3f2f0032856e7a241c06d442..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/CloudPatternsMicroservice/src/main/resources/openapi/images/logoDecide_300ppp.jpg and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/.gitignore b/ARCHITECT/EclipsePlugin/.gitignore
deleted file mode 100644
index a29c26e7379f3550175b524822ea334b1bc0232b..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.class
-/target/
-*/bin/
\ No newline at end of file
diff --git a/ARCHITECT/EclipsePlugin/feature/.gitignore b/ARCHITECT/EclipsePlugin/feature/.gitignore
deleted file mode 100644
index b83d22266ac8aa2f8df2edef68082c789727841d..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/feature/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/target/
diff --git a/ARCHITECT/EclipsePlugin/feature/.project b/ARCHITECT/EclipsePlugin/feature/.project
deleted file mode 100644
index d82803dc16954b4b7f7ef8d7aa3c6dbbf176c736..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/feature/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>feature</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/ARCHITECT/EclipsePlugin/feature/.settings/org.eclipse.core.resources.prefs b/ARCHITECT/EclipsePlugin/feature/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0203a7844de00dbfc56e6a35d8ed3c022c..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/feature/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/ARCHITECT/EclipsePlugin/feature/.settings/org.eclipse.m2e.core.prefs b/ARCHITECT/EclipsePlugin/feature/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index f897a7f1cb2389f85fe6381425d29f0a9866fb65..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/feature/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/ARCHITECT/EclipsePlugin/feature/feature.xml b/ARCHITECT/EclipsePlugin/feature/feature.xml
deleted file mode 100644
index a6a9b00a8765caa0dbc74c362d4562d888f4bffb..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/feature/feature.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="eu.DECIDEh2020.architect.feature"
-      label="Architect"
-      version="1.0.0.qualifier">
-
-   <description url="http://decide-h2020.eu/">
-      ARCHITECT description
-   </description>
-
-   <copyright url="http://www.example.com/copyright">
-      (C) 2017
-   </copyright>
-
-   <license url="http://www.example.com/license">
-      ARCHITECT license agreement
-   </license>
-
-   <plugin
-         id="eu.DECIDEh2020.architect.plugin"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/ARCHITECT/EclipsePlugin/plugin/.classpath b/ARCHITECT/EclipsePlugin/plugin/.classpath
deleted file mode 100644
index 6096f799a34b4b7518a0caaaadce43849424883e..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/.classpath
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="libs"/>
-	<classpathentry kind="lib" path="libs/AppManager.jar"/>
-	<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry exported="true" kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="lib" path="libs/jena/lib/collection-0.7.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/commons-cli-1.4.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/commons-codec-1.10.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/commons-csv-1.4.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/commons-io-2.5.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/commons-lang3-3.4.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/httpclient-4.5.3.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/httpclient-cache-4.5.3.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/httpcore-4.4.6.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jackson-annotations-2.8.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jackson-core-2.8.6.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jackson-databind-2.8.6.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jcl-over-slf4j-1.7.25.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jena-arq-3.4.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jena-base-3.4.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jena-cmds-3.4.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jena-core-3.4.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jena-iri-3.4.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jena-rdfconnection-3.4.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jena-shaded-guava-3.4.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jena-tdb-3.4.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/jsonld-java-0.10.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/libthrift-0.9.3.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/log4j-1.2.17.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/slf4j-api-1.7.25.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/slf4j-log4j12-1.7.25.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/xercesImpl-2.11.0.jar"/>
-	<classpathentry kind="lib" path="libs/jena/lib/xml-apis-1.4.01.jar"/>
-	<classpathentry kind="lib" path="libs/cloudpatterns-1.0-SNAPSHOT.jar"/>
-	<classpathentry kind="lib" path="libs/gson-2.8.2.jar"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/ARCHITECT/EclipsePlugin/plugin/.gitignore b/ARCHITECT/EclipsePlugin/plugin/.gitignore
deleted file mode 100644
index b83d22266ac8aa2f8df2edef68082c789727841d..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/target/
diff --git a/ARCHITECT/EclipsePlugin/plugin/.project b/ARCHITECT/EclipsePlugin/plugin/.project
deleted file mode 100644
index 8b0bb0596c62758cf8cc68e1f277632bc117e99a..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/.project
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>plugin</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/ARCHITECT/EclipsePlugin/plugin/.settings/org.eclipse.jdt.core.prefs b/ARCHITECT/EclipsePlugin/plugin/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 0c68a61dca867ceb49e79d2402935261ec3e3809..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/ARCHITECT/EclipsePlugin/plugin/.settings/org.eclipse.m2e.core.prefs b/ARCHITECT/EclipsePlugin/plugin/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index f897a7f1cb2389f85fe6381425d29f0a9866fb65..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/ARCHITECT/EclipsePlugin/plugin/META-INF/MANIFEST.MF b/ARCHITECT/EclipsePlugin/plugin/META-INF/MANIFEST.MF
deleted file mode 100644
index 91ea2ff2adb64267281387f5ee16be03517f7f95..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,53 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Architect Plugin
-Bundle-SymbolicName: eu.DECIDEh2020.architect.plugin;singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Require-Bundle: org.eclipse.jface.text,
- org.eclipse.core.resources,
- org.eclipse.ui,
- org.eclipse.ui.ide,
- org.eclipse.core.runtime,
- org.eclipse.wst.json.core;bundle-version="1.0.100",
- org.eclipse.wst.sse.ui;bundle-version="1.3.600",
- org.eclipse.core.databinding.observable,
- org.eclipse.core.databinding.property,
- org.eclipse.jgit;bundle-version="4.8.0",
- org.eclipse.core.databinding.beans,
- org.eclipse.core.databinding,
- org.eclipse.jface.databinding
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Bundle-ClassPath: .,
- libs/cloudpatterns-1.0-SNAPSHOT.jar,
- libs/jena/lib/jena-core-3.4.0.jar,
- libs/jena/lib/slf4j-log4j12-1.7.25.jar,
- libs/jena/lib/slf4j-api-1.7.25.jar,
- libs/jena/lib/log4j-1.2.17.jar,
- libs/jena/lib/xml-apis-1.4.01.jar,
- libs/jena/lib/xercesImpl-2.11.0.jar,
- libs/jena/lib/collection-0.7.jar,
- libs/jena/lib/commons-cli-1.4.jar,
- libs/jena/lib/commons-codec-1.10.jar,
- libs/jena/lib/commons-csv-1.4.jar,
- libs/jena/lib/commons-io-2.5.jar,
- libs/jena/lib/commons-lang3-3.4.jar,
- libs/jena/lib/httpclient-4.5.3.jar,
- libs/jena/lib/httpclient-cache-4.5.3.jar,
- libs/jena/lib/httpcore-4.4.6.jar,
- libs/jena/lib/jackson-annotations-2.8.0.jar,
- libs/jena/lib/jackson-core-2.8.6.jar,
- libs/jena/lib/jackson-databind-2.8.6.jar,
- libs/jena/lib/jcl-over-slf4j-1.7.25.jar,
- libs/jena/lib/jena-arq-3.4.0.jar,
- libs/jena/lib/jena-base-3.4.0.jar,
- libs/jena/lib/jena-cmds-3.4.0.jar,
- libs/jena/lib/jena-iri-3.4.0.jar,
- libs/jena/lib/jena-rdfconnection-3.4.0.jar,
- libs/jena/lib/jena-shaded-guava-3.4.0.jar,
- libs/jena/lib/jena-tdb-3.4.0.jar,
- libs/jena/lib/jsonld-java-0.10.0.jar,
- libs/jena/lib/libthrift-0.9.3.jar,
- libs/AppManager.jar,
- libs/gson-2.8.2.jar,
- libs/
-Import-Package: org.eclipse.ui.views.contentoutline
diff --git a/ARCHITECT/EclipsePlugin/plugin/README.md b/ARCHITECT/EclipsePlugin/plugin/README.md
deleted file mode 100644
index 570b11f8a82ff1a3b33c6e8f1ab0c9202880331b..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# ARCHITECT
\ No newline at end of file
diff --git a/ARCHITECT/EclipsePlugin/plugin/build.properties b/ARCHITECT/EclipsePlugin/plugin/build.properties
deleted file mode 100644
index 6e5f863c1023ab4014bc0a83fb537d53951c0afa..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/build.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-source.. = src/,\
-           libs/
-output.. = bin/
-bin.includes = plugin.xml,\
-               META-INF/,\
-               .,\
-               icons/,\
-               libs/,\
-               libs/AppManager.jar
-jars.compile.order = .
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/AppManager.jar b/ARCHITECT/EclipsePlugin/plugin/libs/AppManager.jar
deleted file mode 100644
index 802925b899deb575dbef13d9d35d2af06f9d263f..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/AppManager.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/cloudpatterns-1.0-SNAPSHOT.jar b/ARCHITECT/EclipsePlugin/plugin/libs/cloudpatterns-1.0-SNAPSHOT.jar
deleted file mode 100644
index 307a1429af607987c169334e5c15e29a7ef3c3b7..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/cloudpatterns-1.0-SNAPSHOT.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/gson-2.8.2.jar b/ARCHITECT/EclipsePlugin/plugin/libs/gson-2.8.2.jar
deleted file mode 100644
index d0d030c6371cb44e7caee238f7bf148c7732ce28..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/gson-2.8.2.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/collection-0.7.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/collection-0.7.jar
deleted file mode 100644
index aa5de6b95fa45dd3ca55b4e9441db7f79ce7e8ab..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/collection-0.7.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-cli-1.4.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-cli-1.4.jar
deleted file mode 100644
index 22deb3089e2f79a983406bd13a75a3e6238afdcf..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-cli-1.4.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-codec-1.10.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-codec-1.10.jar
deleted file mode 100644
index 1d7417c4031324cc6577a306cde57ae220f55523..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-codec-1.10.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-csv-1.4.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-csv-1.4.jar
deleted file mode 100644
index e9eb0bd35ccf5876b3d2f1fce3afecdfc3cd12b7..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-csv-1.4.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-io-2.5.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-io-2.5.jar
deleted file mode 100644
index 107b061f5fa84cecca645eae9bdefc98e084ce03..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-io-2.5.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-lang3-3.4.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-lang3-3.4.jar
deleted file mode 100644
index 8ec91d454c31f73638de2994711a8487822247c1..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/commons-lang3-3.4.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/httpclient-4.5.3.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/httpclient-4.5.3.jar
deleted file mode 100644
index 8af45610819f7afb6c72f37ca3cc20c029b84810..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/httpclient-4.5.3.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/httpclient-cache-4.5.3.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/httpclient-cache-4.5.3.jar
deleted file mode 100644
index 3f609f5dcf5a5d84c5b885722fabb42ed0df0b08..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/httpclient-cache-4.5.3.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/httpcore-4.4.6.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/httpcore-4.4.6.jar
deleted file mode 100644
index 16ed0d160d7deed898d2f65f7c970bc2ccf6d97f..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/httpcore-4.4.6.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jackson-annotations-2.8.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jackson-annotations-2.8.0.jar
deleted file mode 100644
index d19b67b0f11086544c2dc2ab36a6b09abc9962a0..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jackson-annotations-2.8.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jackson-core-2.8.6.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jackson-core-2.8.6.jar
deleted file mode 100644
index 2b10bf3030f994b6cf9717b510243ffa6250a585..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jackson-core-2.8.6.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jackson-databind-2.8.6.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jackson-databind-2.8.6.jar
deleted file mode 100644
index 2784d1f82760589dcec0f64e87b122e0dc8105ac..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jackson-databind-2.8.6.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jcl-over-slf4j-1.7.25.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jcl-over-slf4j-1.7.25.jar
deleted file mode 100644
index 8e7fec880f401e6e8f2a979192c1870448ff1ad0..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jcl-over-slf4j-1.7.25.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-arq-3.4.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-arq-3.4.0.jar
deleted file mode 100644
index c8ed9bcceae730ce1202ed3d6f41a25e6d1fe5cd..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-arq-3.4.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-base-3.4.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-base-3.4.0.jar
deleted file mode 100644
index 3043f31786f8be37e5cb526c52f96109e926bc45..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-base-3.4.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-cmds-3.4.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-cmds-3.4.0.jar
deleted file mode 100644
index 98b54ddede9223d7ebb6ba4ad79be7b615096f6e..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-cmds-3.4.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-core-3.4.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-core-3.4.0.jar
deleted file mode 100644
index 525a1e2cc9a047f621de8f7e539cfec087953ca1..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-core-3.4.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-iri-3.4.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-iri-3.4.0.jar
deleted file mode 100644
index f6804576f2c1eabd22c38b967ca5768f7e2b3442..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-iri-3.4.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-rdfconnection-3.4.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-rdfconnection-3.4.0.jar
deleted file mode 100644
index bb3eccf0284c23d27edf5039693f30491051c038..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-rdfconnection-3.4.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-shaded-guava-3.4.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-shaded-guava-3.4.0.jar
deleted file mode 100644
index 31de884565ea70a731e57abca214ee23d41af45f..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-shaded-guava-3.4.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-tdb-3.4.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-tdb-3.4.0.jar
deleted file mode 100644
index a54ba4e3968145993ceea096073ea2ab11373f2d..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jena-tdb-3.4.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jsonld-java-0.10.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jsonld-java-0.10.0.jar
deleted file mode 100644
index 8c98b7ba27b8a892b3e6af80f030aab9b021a842..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/jsonld-java-0.10.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/libthrift-0.9.3.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/libthrift-0.9.3.jar
deleted file mode 100644
index f9221a9f958f2ac140e33a71abaf1d31adb6a3f7..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/libthrift-0.9.3.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/log4j-1.2.17.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/log4j-1.2.17.jar
deleted file mode 100644
index 1d425cf7d7e25f81be64d32c406ff66cfb6c4766..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/log4j-1.2.17.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/slf4j-api-1.7.25.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/slf4j-api-1.7.25.jar
deleted file mode 100644
index 0143c099699ee843cde6d95c9dbc7751039d2463..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/slf4j-api-1.7.25.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/slf4j-log4j12-1.7.25.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/slf4j-log4j12-1.7.25.jar
deleted file mode 100644
index 7d88a6e75bcee54464e70f57a595cab677ce77fc..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/slf4j-log4j12-1.7.25.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/xercesImpl-2.11.0.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/xercesImpl-2.11.0.jar
deleted file mode 100644
index 0aaa990f3ecadf60d28b5395dc87bbe49da0cdd7..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/xercesImpl-2.11.0.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/xml-apis-1.4.01.jar b/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/xml-apis-1.4.01.jar
deleted file mode 100644
index 46733464fc746776c331ecc51061f3a05e662fd1..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/libs/jena/lib/xml-apis-1.4.01.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/plugin.xml b/ARCHITECT/EclipsePlugin/plugin/plugin.xml
deleted file mode 100644
index eb02ecb2c7206c320c33b609d54037e11edce919..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/plugin.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE project>
-<?eclipse version="3.4"?>
-<plugin>
-
-   <extension
-         point="org.eclipse.ui.editors">
-      <editor
-            class="eu.DECIDEh2020.architect.plugin.editor.MultiPageEditor"
-            contributorClass="eu.DECIDEh2020.architect.plugin.editor.MultiPageEditorContributor"
-            default="true"
-            extensions="json"
-            icon="icons/icon_000.jpg"
-            id="eu.DECIDEh2020.architect.plugin.editor.MultiPageEditor"
-            name="DECIDE Editor">
-      </editor>
-   </extension>
-   <extension
-         point="org.eclipse.ui.newWizards">
-      <category
-            name="DECIDE Wizards"
-            id="eu.DECIDEh2020.architect.plugin">
-      </category>
-      <wizard
-            category="eu.DECIDEh2020.architect.plugin"
-            class="eu.DECIDEh2020.architect.plugin.descriptorWizard.NewProjectWizard"
-            finalPerspective="org.eclipse.jdt.ui.JavaPerspective"
-            icon="icons/icon_000.jpg"
-            id="eu.DECIDEh2020.architect.plugin.descriptorWizard.NewProjectWizard"
-            name="DECIDE project"
-            project="true">
-      </wizard>
-   </extension>
-   <extension
-         id="eu.DECIDEh2020.architect.plugin.ProjectNature"
-         point="org.eclipse.core.resources.natures">
-      <runtime>
-         <run
-               class="eu.DECIDEh2020.architect.plugin.natures.ProjectNature">
-         </run>
-      </runtime>
-   </extension>
-   <extension
-         point="org.eclipse.ui.perspectives">
-      <perspective
-            class="eu.DECIDEh2020.architect.plugin.perspectives.Perspective"
-            icon="icons/icon_000.jpg"
-            id="eu.DECIDEh2020.architect.plugin.perspective"
-            name="DECIDE Plug-in Perspective">
-      </perspective>
-   </extension>
-   <extension
-         point="org.eclipse.ui.perspectiveExtensions">
-      <perspectiveExtension
-            targetID="org.eclipse.jdt.ui.JavaPerspective">
-         <view
-               id="eu.DECIDEh2020.architect.customnavigator.navigator"
-               minimized="false"
-               relationship="left"
-               relative="org.eclipse.ui.editorss">
-         </view>
-         <newWizardShortcut
-               id="eu.DECIDEh2020.architect.plugin.descriptorWizard.NewProjectWizard">
-         </newWizardShortcut>
-      </perspectiveExtension>
-   </extension>
-
-</plugin>
diff --git a/ARCHITECT/EclipsePlugin/plugin/pom.xml b/ARCHITECT/EclipsePlugin/plugin/pom.xml
deleted file mode 100644
index 9f941479412dad90743323af0066b7c19d1568f6..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/pom.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>eu.DECIDEh2020.architect.plugin</artifactId>
-  <packaging>eclipse-plugin</packaging>
-
-  <parent>
-  	<groupId>de.decideh2020</groupId>
-  	<artifactId>eu.DECIDEh2020.architect.releng</artifactId>
-  	<version>1.0.0-SNAPSHOT</version>
-  	<relativePath>../releng</relativePath>
-  </parent>
-
-</project>
\ No newline at end of file
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/ConfigPage.java b/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/ConfigPage.java
deleted file mode 100644
index 404c4b3a227223b9c306ff27a66a4761561092a5..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/ConfigPage.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-
-package eu.DECIDEh2020.architect.plugin.descriptorWizard;
-
-
-import org.apache.jena.rdf.model.Resource;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.wb.swt.SWTResourceManager;
-
-import eu.DECIDEh2020.architect.appManager.models.AppDescriptor;
-import eu.DECIDEh2020.architect.plugin.layoutComponents.MicroserviceListComposite;
-import eu.DECIDEh2020.architect.plugin.layoutComponents.NfrListViewer;
-import eu.DECIDEh2020.architect.plugin.layoutComponents.PageCompleteListener;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-
-public class ConfigPage extends WizardPage {
-	
-	private Composite container;
-	private AppDescriptor project;
-	private MicroserviceListComposite microserviceList;
-	private Text txtProjectdescription;
-	
-	
-	
-
-
-	/**
-	 * @wbp.parser.constructor
-	 */
-	public ConfigPage( AppDescriptor project) {
-		super("Project Configuration");
-		// TODO Auto-generated constructor stub
-		this.project=project;
-	}
-
-
-
-	@Override
-	public void createControl(Composite parent) {
-		container = new Composite(parent, SWT.NULL);
-		setControl(container);
-		container.setLayout(new GridLayout(1, false));
-
-		 Composite compositeNFR = new Composite(container, SWT.NONE);
-	        compositeNFR.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-	        GridLayout gl_compositeNFR = new GridLayout(2, false);
-	        gl_compositeNFR.horizontalSpacing = 15;
-	        gl_compositeNFR.verticalSpacing = 15;
-	        compositeNFR.setLayout(gl_compositeNFR);
-	        
-	        Label lblNFRs = new Label(compositeNFR, SWT.NONE);
-	        lblNFRs.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
-	        lblNFRs.setText("Project NFRs:     ");
-	        
-	        NfrListViewer nfrListViewer = new NfrListViewer(compositeNFR, SWT.BORDER | SWT.V_SCROLL| SWT.MULTI);
-	        
-	        GridData gd_listNfrs = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
-	        gd_listNfrs.heightHint = 75;
-	        nfrListViewer.setLayoutData(gd_listNfrs);
-	        
-	        nfrListViewer.addSelectionListener(new SelectionAdapter() {
-	        	@Override
-	        	public void widgetSelected(SelectionEvent e) {
-	        		HashSet<Resource> pNfrs = new HashSet<Resource>();
-	        		for (Resource r: nfrListViewer.getSelection()) {
-	        			try {
-	        				pNfrs.add(r);
-	        			} catch (IllegalArgumentException e1) {
-	        				// TODO Auto-generated catch block
-	        				e1.printStackTrace();
-	        			}
-	        		}
-	        		project.setProjectNfrs(pNfrs);
-	        	}
-	        });
-	        if(project.getProjectNfrs().size() != 0) {
-				nfrListViewer.addSelection(new ArrayList<Resource>(project.getProjectNfrs()));
-			}
-	        addMicroserviceControls();
-		
-		setPageComplete(false);
-	}
-	
-	private void addMicroserviceControls(){
-		
-		Composite compositeProjectDescription = new Composite(container, SWT.NONE);
-		compositeProjectDescription.setLayout(new GridLayout(2, false));
-		compositeProjectDescription.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Label lblAppDescription = new Label(compositeProjectDescription, SWT.NONE);
-		lblAppDescription.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 1));
-		lblAppDescription.setText("App Description:");
-		
-		txtProjectdescription = new Text(compositeProjectDescription, SWT.BORDER | SWT.MULTI);
-		txtProjectdescription.addKeyListener(new KeyAdapter() {
-			@Override
-			public void keyReleased(KeyEvent e) {
-				project.setDescription(txtProjectdescription.getText());
-			}
-		});
-		txtProjectdescription.setText("ProjectDescription");
-		GridData gd_txtProjectdescription = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
-		gd_txtProjectdescription.heightHint = 52;
-		txtProjectdescription.setLayoutData(gd_txtProjectdescription);
-		new Label(compositeProjectDescription, SWT.NONE);
-		
-	/*	Button btnMonolithic = new Button(compositeProjectDescription, SWT.CHECK);
-		btnMonolithic.setText("monolithic");*/
-		
-		Group grpMicroservices = new Group(container, SWT.NONE);
-       
-        grpMicroservices.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
-        grpMicroservices.setText("Microservices");
-        grpMicroservices.setLayout(new GridLayout(1, false));
-        
-		microserviceList = new MicroserviceListComposite(grpMicroservices,SWT.NONE, project, true,SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
-		microserviceList.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		microserviceList.addPageCompleteListener(new PageCompleteListener() {
-			@Override
-			public void pageCompleted(Boolean complete) {
-				setPageComplete(complete);
-			}
-		});
-		
-	}
-	
-	
-	
-	public void setVisible(boolean visible) {
-		 super.setVisible(visible);
-
-		 if (visible) microserviceList.refresh();
-	 }
-	
-}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MicroservicePage.java b/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MicroservicePage.java
deleted file mode 100644
index 90158adcd7de5d472ab4739d44d044ff00151de4..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MicroservicePage.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-
-package eu.DECIDEh2020.architect.plugin.descriptorWizard;
-
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.layout.GridLayout;
-
-import eu.DECIDEh2020.architect.appManager.models.AppDescriptor;
-import eu.DECIDEh2020.architect.appManager.models.Microservice;
-import eu.DECIDEh2020.architect.plugin.layoutComponents.MicroserviceComposite;
-
-import java.util.LinkedList;
-
-import org.eclipse.swt.custom.ScrolledComposite;
-
-public class MicroservicePage extends WizardPage {
-	
-	 private ScrolledComposite scrolledComposite;
-	 private Composite container;
-	 private AppDescriptor project;
-
-
-
-		
-	public MicroservicePage(AppDescriptor project) {
-		super("Microservice Settings");
-		setTitle("Microservice Settings");
-		setDescription("Configure each Microservice here");
-		this.project=project;
-	}
-	
-
-	
-	@Override
-	public void createControl(Composite parent) {
-		
-		scrolledComposite = new ScrolledComposite(parent, SWT.V_SCROLL);
-		
-		scrolledComposite.setExpandHorizontal(true);
-		scrolledComposite.setExpandVertical(true);
-		setControl(scrolledComposite);
-		
-		
-		container = new Composite(scrolledComposite, SWT.NONE);
-		scrolledComposite.setContent(container);
-		container.setLayout(new GridLayout(1, false));
-		
-		
-		scrolledComposite.setExpandVertical( true );
-	    scrolledComposite.setExpandHorizontal( true );
-		scrolledComposite.addListener( SWT.Resize, event -> {
-			  int width = scrolledComposite.getClientArea().width;
-			  scrolledComposite.setMinSize( parent.computeSize( width, SWT.DEFAULT ) );
-			} );
-
-		
-		
-		
-		/*
-	
-		Microservice m = new Microservice();
-		m.setRepo("Repo");
-		m.getRepo().endsWith("o");
-		addMicroserviceComposite(m);
-		*/
-		setPageComplete(true);
-	}
-	
-	private void addMicroserviceComposite(Microservice microservice){
-		if(microservice!=null) {
-		
-		@SuppressWarnings("unused")
-		Composite msvContainer = new MicroserviceComposite(container, microservice);
-		}
-		
-	}
-	
-	public void setMicroservices(){
-		
-		Control[] children = container.getChildren();
-	    for (int i = 0 ; i < children.length; i++) {
-	        children[i].dispose();
-	    }
-		
-		addMicroservices();
-		container.requestLayout();
-		int width = scrolledComposite.getClientArea().width;
-	    scrolledComposite.setMinSize( scrolledComposite.getParent().computeSize( width, SWT.DEFAULT ) );
-		scrolledComposite.requestLayout();
-		
-	}
-	private void addMicroservices() {
-		
-		LinkedList<Microservice> microservices = project.getMicroservices();
-		if(microservices.size()>0){
-			for(Microservice m: microservices) {
-				addMicroserviceComposite(m);
-			}
-			
-		}
-		
-		
-	}
-}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectPage.java b/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectPage.java
deleted file mode 100644
index f5db0a3d452d790cf0a49b28eb7961902ffebca3..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectPage.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.descriptorWizard;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
-
-import eu.DECIDEh2020.architect.appManager.models.AppDescriptor;
-import eu.DECIDEh2020.architect.appManager.persistence.GitHandler.Repository;
-
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-
-import java.net.URISyntaxException;
-
-import org.eclipse.core.databinding.DataBindingContext;
-import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.jgit.transport.URIish;
-import org.eclipse.core.databinding.beans.PojoProperties;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-
-public class NewProjectPage extends WizardNewProjectCreationPage {
-	private DataBindingContext m_bindingContext;
-
-	
-	private Composite container;
-	private AppDescriptor project;
-	private Repository repo;
-	private Text txtUser;
-	private Text txtPassword;
-	private Text txtPort;
-	private Text txtReponame;
-	private Text txtUri;
-	private Text txtHost;
-	private Text txtRepopath;
-	private Combo comboProtocol;
-	private Button btnSecurestore;
-	private Button btnCreateLocalRepository;
-	private Button btnOpenLocalRepository;
-	private Button btnCloneRemoteRepository;
-	
-	public NewProjectPage(String pageName, AppDescriptor project) {
-		super(pageName);
-		this.project = project;
-		repo = new Repository();
-		
-	}
-
-	@Override
-	public void createControl(Composite parent) {
-		super.createControl(parent);
-		Composite p = (Composite) getControl();
-
-		
-		p.setLayout(new GridLayout(1, false));
-		container = new Composite(p, SWT.NONE);
-		container.setLayout(new GridLayout(1, false));
-		container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
-		
-		Composite compositeLocal_Remote = new Composite(container, SWT.NONE);
-		compositeLocal_Remote.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
-		compositeLocal_Remote.setLayout(new FillLayout(SWT.HORIZONTAL));
-		
-		btnOpenLocalRepository = new Button(compositeLocal_Remote, SWT.RADIO);
-		btnOpenLocalRepository.setText("Open Local repository");
-		
-		btnCreateLocalRepository = new Button(compositeLocal_Remote, SWT.RADIO);
-	
-		
-		btnCreateLocalRepository.setText("Create Local repository");
-		
-		btnCloneRemoteRepository = new Button(compositeLocal_Remote, SWT.RADIO);
-
-		btnCloneRemoteRepository.setText("Clone Remote Repository");
-		
-		Group grpGitRepository = new Group(container, SWT.NONE);
-		grpGitRepository.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		grpGitRepository.setText("Git Repository");
-		grpGitRepository.setLayout(new GridLayout(1, false));
-		
-		Composite composite_1 = new Composite(grpGitRepository, SWT.NONE);
-		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		composite_1.setLayout(new GridLayout(2, false));
-		
-		Label lblName = new Label(composite_1, SWT.NONE);
-		lblName.setText("Name:");
-		
-		txtReponame = new Text(composite_1, SWT.BORDER);
-		txtReponame.setEnabled(false);
-		txtReponame.addKeyListener(new KeyAdapter() {
-			@Override
-			public void keyPressed(KeyEvent e) {
-				
-				
-			}
-		});
-		txtReponame.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Composite composite = new Composite(grpGitRepository, SWT.NONE);
-		composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		composite.setLayout(new GridLayout(1, false));
-		
-		Group grpLocation = new Group(composite, SWT.NONE);
-		grpLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		grpLocation.setText("Location");
-		grpLocation.setLayout(new GridLayout(2, false));
-		
-		Label lblUri = new Label(grpLocation, SWT.NONE);
-		lblUri.setText("URI:");
-		
-		txtUri = new Text(grpLocation, SWT.BORDER);
-	
-		txtUri.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Label lblHost = new Label(grpLocation, SWT.NONE);
-		lblHost.setText("Host:");
-		
-		txtHost = new Text(grpLocation, SWT.BORDER);
-		txtHost.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Label lblRepositoryPath = new Label(grpLocation, SWT.NONE);
-		lblRepositoryPath.setText("Repository Path:");
-		
-		txtRepopath = new Text(grpLocation, SWT.BORDER);
-		txtRepopath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-	
-		Group grpConnection = new Group(composite, SWT.NONE);
-		grpConnection.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		grpConnection.setText("Connection");
-		grpConnection.setLayout(new GridLayout(2, false));
-		
-		Label lblProtocol = new Label(grpConnection, SWT.NONE);
-		lblProtocol.setText("Protocol:");
-		
-		comboProtocol = new Combo(grpConnection, SWT.READ_ONLY);
-		comboProtocol.setItems(new String[] {"https", "ssh"});
-		comboProtocol.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
-		comboProtocol.select(0);
-		
-		Label lblPort = new Label(grpConnection, SWT.NONE);
-		lblPort.setText("Port:");
-		
-		txtPort = new Text(grpConnection, SWT.BORDER);
-		txtPort.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
-		
-		Group grpAuthentication = new Group(composite, SWT.NONE);
-		grpAuthentication.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		grpAuthentication.setText("Authentication");
-		grpAuthentication.setLayout(new GridLayout(2, false));
-		
-		Label lblUser = new Label(grpAuthentication, SWT.NONE);
-		lblUser.setText("User:");
-		
-		txtUser = new Text(grpAuthentication, SWT.BORDER);
-		txtUser.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Label lblPassword = new Label(grpAuthentication, SWT.NONE);
-		lblPassword.setText("Password:");
-		
-		txtPassword = new Text(grpAuthentication, SWT.BORDER | SWT.PASSWORD);
-		txtPassword.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Label lblStoreInSecure = new Label(grpAuthentication, SWT.NONE);
-		lblStoreInSecure.setText("Store in Secure Store:");
-		
-		
-		txtUri.addKeyListener(new KeyAdapter() {
-			@Override
-			public void keyReleased(KeyEvent e) {
-				URIish uri = null;
-				try {
-					if (!txtUri.getText().isEmpty()){
-						uri = new URIish(txtUri.getText());
-					}
-				} catch (URISyntaxException e1) {
-					// TODO Auto-generated catch block
-					e1.printStackTrace();
-					
-				}
-				if (uri!=null) {
-					txtHost.setText(uri.getHost()!=null?uri.getHost():"");
-					txtRepopath.setText(uri.getPath()!=null?uri.getPath():"");
-					
-					comboProtocol.setText(uri.getScheme()!=null?uri.getScheme():"ssh");
-					txtUser.setText(uri.getUser()!=null?uri.getUser():"");
-					txtPassword.setText(uri.getPass()!=null?uri.getPass():"");
-					
-					
-					if (uri.getPort()>=0) {
-						txtPort.setText(String.valueOf(uri.getPort()));
-					}
-					
-					
-				}
-				setPageComplete(true);
-			}
-		});
-		
-		btnSecurestore = new Button(grpAuthentication, SWT.CHECK);
-		txtUri.setEnabled(false);
-		txtHost.setEnabled(false);
-		txtRepopath.setEnabled(false);
-		comboProtocol.setEnabled(false);
-		txtPort.setEnabled(false);
-		txtUser.setEnabled(false);
-		txtPassword.setEnabled(false);
-		btnSecurestore.setEnabled(false);
-		
-		btnOpenLocalRepository.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				txtReponame.setEnabled(false);
-				txtUri.setEnabled(false);
-				txtHost.setEnabled(false);
-				txtRepopath.setEnabled(false);
-				comboProtocol.setEnabled(false);
-				txtPort.setEnabled(false);
-				txtUser.setEnabled(false);
-				txtPassword.setEnabled(false);
-				btnSecurestore.setEnabled(false);
-				repo.setNewRepo(false);
-				repo.setLocalRepo(true);
-				
-				setPageComplete(true);
-				getWizard().getContainer().updateButtons();
-				getWizard().getContainer().updateButtons();
-				
-			}
-		});
-		
-		btnCreateLocalRepository.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				
-				txtReponame.setEnabled(false);
-				txtUri.setEnabled(false);
-				txtHost.setEnabled(false);
-				txtRepopath.setEnabled(false);
-				comboProtocol.setEnabled(false);
-				txtPort.setEnabled(false);
-				txtUser.setEnabled(false);
-				txtPassword.setEnabled(false);
-				btnSecurestore.setEnabled(false);
-				repo.setNewRepo(true);
-				
-				setPageComplete(true);
-				getWizard().getContainer().updateButtons();
-				getWizard().getContainer().updateButtons();
-			}
-		});
-		
-		
-		btnCloneRemoteRepository.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				txtReponame.setEnabled(false);
-				txtUri.setEnabled(true);
-				txtHost.setEnabled(true);
-				txtRepopath.setEnabled(true);
-				comboProtocol.setEnabled(true);
-				txtPort.setEnabled(true);
-				txtUser.setEnabled(true);
-				txtPassword.setEnabled(true);
-				btnSecurestore.setEnabled(true);
-				repo.setNewRepo(false);
-				repo.setLocalRepo(false);
-				
-				setPageComplete(true);
-				getWizard().getContainer().updateButtons();
-				getWizard().getContainer().updateButtons();
-			}
-		});
-		btnCreateLocalRepository.setSelection(true);
-		setPageComplete(false);
-		// required to avoid an error in the system
-		setControl(p);
-		m_bindingContext = initDataBindings();
-		
-
-	}
-
-	
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.wizard.WizardPage#setPageComplete(boolean)
-	 */
-	@Override
-	public void setPageComplete(boolean complete) {
-		Boolean thisComplete = false;
-		if ((btnOpenLocalRepository != null && btnOpenLocalRepository.getSelection())
-				|| (btnCreateLocalRepository != null && btnCreateLocalRepository.getSelection())) {
-			thisComplete = true;
-		} else {
-			if (repo != null && repo.getURI() != null && !repo.getURI().isEmpty()) {
-				thisComplete = true;
-			}
-		}
-		thisComplete = thisComplete && this.getProjectName()!=null && this.getProjectName()!="" && getErrorMessage()== null;
-
-		super.setPageComplete(thisComplete &&  complete);
-		if (getWizard() != null && getWizard().getContainer() != null) {
-			getWizard().getContainer().updateButtons();
-		}
-		//System.out.println("NewProject Page Complete: "+ isPageComplete());
-	}
-
-	public boolean isPageComplete() {
-		if (project != null) {
-			project.setName(getProjectName());
-		}
-		return super.isPageComplete();
-	}
-
-	public Repository getRepository() {
-		return repo;
-	}
-	
-	protected DataBindingContext initDataBindings() {
-		DataBindingContext bindingContext = new DataBindingContext();
-		//
-		IObservableValue observeTextTxtReponameObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtReponame);
-		IObservableValue nameRepoObserveValue = PojoProperties.value("name").observe(repo);
-		bindingContext.bindValue(observeTextTxtReponameObserveWidget, nameRepoObserveValue, null, null);
-		//
-		IObservableValue observeTextTxtUriObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtUri);
-		IObservableValue uRIRepoObserveValue = PojoProperties.value("URI").observe(repo);
-		bindingContext.bindValue(observeTextTxtUriObserveWidget, uRIRepoObserveValue, null, null);
-		//
-		IObservableValue observeTextTxtHostObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtHost);
-		IObservableValue hostRepoObserveValue = PojoProperties.value("host").observe(repo);
-		bindingContext.bindValue(observeTextTxtHostObserveWidget, hostRepoObserveValue, null, null);
-		//
-		IObservableValue observeTextTxtRepopathObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtRepopath);
-		IObservableValue pathRepoObserveValue = PojoProperties.value("path").observe(repo);
-		bindingContext.bindValue(observeTextTxtRepopathObserveWidget, pathRepoObserveValue, null, null);
-		//
-		IObservableValue observeTextComboProtocolObserveWidget = WidgetProperties.text().observe(comboProtocol);
-		IObservableValue protocolRepoObserveValue = PojoProperties.value("protocol").observe(repo);
-		bindingContext.bindValue(observeTextComboProtocolObserveWidget, protocolRepoObserveValue, null, null);
-		//
-		IObservableValue observeTextTextPortObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtPort);
-		IObservableValue portRepoObserveValue = PojoProperties.value("port").observe(repo);
-		bindingContext.bindValue(observeTextTextPortObserveWidget, portRepoObserveValue, null, null);
-		//
-		IObservableValue observeTextTxtUserObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtUser);
-		IObservableValue userRepoObserveValue = PojoProperties.value("user").observe(repo);
-		bindingContext.bindValue(observeTextTxtUserObserveWidget, userRepoObserveValue, null, null);
-		//
-		IObservableValue observeTextTxtPasswordObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtPassword);
-		IObservableValue passwordRepoObserveValue = PojoProperties.value("password").observe(repo);
-		bindingContext.bindValue(observeTextTxtPasswordObserveWidget, passwordRepoObserveValue, null, null);
-		//
-		IObservableValue observeSelectionBtnSecurestoreObserveWidget = WidgetProperties.selection().observe(btnSecurestore);
-		IObservableValue secureStorageRepoObserveValue = PojoProperties.value("secureStorage").observe(repo);
-		bindingContext.bindValue(observeSelectionBtnSecurestoreObserveWidget, secureStorageRepoObserveValue, null, null);
-		//
-		return bindingContext;
-	}
-}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrListViewer.java b/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrListViewer.java
deleted file mode 100644
index 044058335f02b2897fb5024798d867ded0f94af8..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrListViewer.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.List;
-
-
-import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
-
-import java.util.Arrays;
-import java.util.EnumSet;
-import java.util.HashSet;
-
-import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.rdf.model.Statement;
-import org.apache.jena.vocabulary.DCTerms;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.FillLayout;
-
-public class NfrListViewer extends Composite {
-	private static class NFRLabelProvider extends LabelProvider {
-		public Image getImage(Object element) {
-			return null;
-		}
-		public String getText(Object element) {
-			return  ((Resource) element).getProperty(DCTerms.title).getString();
-		}
-	}
-	
-	
-	private static class NFRContentProvider implements IStructuredContentProvider {
-		@SuppressWarnings("unchecked")
-		public Object[] getElements(Object inputElement) {
-			return ((java.util.List<Resource>) inputElement).toArray();
-			
-		}
-		public void dispose() {
-		}
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		}
-	}
-	
-	private List list;
-	private ListViewer listViewer;
-	
-	/**
-	 * Create the composite.
-	 * @param parent
-	 * @param style
-	 */
-	public NfrListViewer(Composite parent, int style) {
-		super(parent, SWT.NONE);
-		setLayout(new FillLayout(SWT.HORIZONTAL));
-		Patterns patterns = Patterns.createDefaultPatterns();
-		java.util.List<Resource> nfrs = patterns.listNFRs();
-		
-		
-		listViewer = new ListViewer(this, style);
-		list = listViewer.getList();
-		
-		
-		listViewer.setLabelProvider(new NFRLabelProvider());
-		listViewer.setContentProvider(new NFRContentProvider());
-		listViewer.setInput(nfrs);
-		
-
-	}
-
-	
-	public java.util.List<Resource> getSelection(){
-		@SuppressWarnings("unchecked")
-		java.util.List<Resource> selection = listViewer.getStructuredSelection().toList();
-		
-		return selection;
-		
-		
-		
-		
-	}
-	
-	
-	public void addSelection(java.util.List<Resource> nfrs) {
-		
-		
-		HashSet<String> selection = new HashSet<String>(Arrays.asList(list.getSelection()));
-		
-		for(Resource nfr: nfrs) {
-			Statement title = nfr.getProperty(DCTerms.title);
-			String stitle = title.getString();
-			selection.add(stitle);
-		}
-		list.setSelection(selection.toArray(new String[selection.size()]));
-		
-	}
-	@Override
-	protected void checkSubclass() {
-		// Disable the check that prevents subclassing of SWT components
-	}
-	
-	public void addSelectionListener(SelectionAdapter a) {
-		list.addSelectionListener(a);
-	}
-	
-	
-}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/natures/ProjectNature.java b/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/natures/ProjectNature.java
deleted file mode 100644
index 37ad49e7c02e6fae5e0474888ced0a8aefde3ed7..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/natures/ProjectNature.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.natures;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectNature;
-import org.eclipse.core.runtime.CoreException;
-
-public class ProjectNature implements IProjectNature {
-	public static final String NATURE_ID = "eu.DECIDEh2020.architect.plugin.ProjectNature"; //$NON-NLS-1$
-	private IProject project;
-	
-	@Override
-	public void configure() throws CoreException {
-		// TODO Auto-generated method stub
-		
-	}
-
-	@Override
-	public void deconfigure() throws CoreException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public IProject getProject() {
-		// TODO Auto-generated method stub
-		return project;
-	}
-
-	@Override
-	public void setProject(IProject project) {
-		// TODO Auto-generated method stub
-		this.project = project;
-	}
-
-}
diff --git a/ARCHITECT/EclipsePlugin/plugin/swing2swt.jar b/ARCHITECT/EclipsePlugin/plugin/swing2swt.jar
deleted file mode 100644
index a09053c46521dd13dd9d1ca6370b3e9324e24dde..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/plugin/swing2swt.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/test.xml b/ARCHITECT/EclipsePlugin/plugin/test.xml
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/ARCHITECT/EclipsePlugin/releng/.project b/ARCHITECT/EclipsePlugin/releng/.project
deleted file mode 100644
index 43a73bfe165b5c923007df9ee52612292eafcb80..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/releng/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>releng</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-	</natures>
-</projectDescription>
diff --git a/ARCHITECT/EclipsePlugin/releng/.settings/org.eclipse.m2e.core.prefs b/ARCHITECT/EclipsePlugin/releng/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index f897a7f1cb2389f85fe6381425d29f0a9866fb65..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/releng/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/ARCHITECT/EclipsePlugin/releng/pom.xml b/ARCHITECT/EclipsePlugin/releng/pom.xml
deleted file mode 100644
index 9a2f0adcbfeef8da2b5f98ac8a59bb3af118c20b..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/releng/pom.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>de.decideh2020</groupId>
-  <artifactId>eu.DECIDEh2020.architect.releng</artifactId>
-  <version>1.0.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-  
-  
-  
- <properties>
-  <tycho.version>0.23.0</tycho.version>
-  
-  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <repositories>
-  <repository>
-   <id>Oxygen</id>
-   <layout>p2</layout>
-   <url>http://download.eclipse.org/releases/oxygen/</url>
-  </repository>
- </repositories>
-
- <build>
-  <plugins>
-   <plugin>
-    <!-- enable tycho build extension -->
-    <groupId>org.eclipse.tycho</groupId>
-    <artifactId>tycho-maven-plugin</artifactId>
-    <version>${tycho.version}</version>
-    <extensions>true</extensions>
-   </plugin>
-   <plugin>
-    <groupId>org.eclipse.tycho</groupId>
-    <artifactId>target-platform-configuration</artifactId>
-    <version>${tycho.version}</version>
-    <configuration>
-     <environments>
-      <environment>
-       <os>win32</os>
-       <ws>win32</ws>
-       <arch>x86</arch>
-      </environment>
-     </environments>
-    </configuration>
-   </plugin>
-  </plugins>
- </build>
-  
-  
- <modules>
- 	<module>../plugin</module>
- 	<module>../feature</module>
- 	<module>../site</module>
- </modules>
-</project>
\ No newline at end of file
diff --git a/ARCHITECT/EclipsePlugin/site/.gitignore b/ARCHITECT/EclipsePlugin/site/.gitignore
deleted file mode 100644
index b83d22266ac8aa2f8df2edef68082c789727841d..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/site/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/target/
diff --git a/ARCHITECT/EclipsePlugin/site/.project b/ARCHITECT/EclipsePlugin/site/.project
deleted file mode 100644
index 7090d957fbcf2e507447fb68c56659eca8c8fcca..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/site/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>site</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.UpdateSiteBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.pde.UpdateSiteNature</nature>
-	</natures>
-</projectDescription>
diff --git a/ARCHITECT/EclipsePlugin/site/.settings/org.eclipse.core.resources.prefs b/ARCHITECT/EclipsePlugin/site/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0203a7844de00dbfc56e6a35d8ed3c022c..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/site/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/ARCHITECT/EclipsePlugin/site/.settings/org.eclipse.m2e.core.prefs b/ARCHITECT/EclipsePlugin/site/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index f897a7f1cb2389f85fe6381425d29f0a9866fb65..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/site/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/ARCHITECT/EclipsePlugin/site/artifacts.jar b/ARCHITECT/EclipsePlugin/site/artifacts.jar
deleted file mode 100644
index 48dcbc692f3715c7b3fd72730713b95f41ab249a..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/site/artifacts.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/site/category.xml b/ARCHITECT/EclipsePlugin/site/category.xml
deleted file mode 100644
index 68efbe7c61249b270c450dd118339db11c1011a2..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/site/category.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<site>
-   <feature url="features/eu.DECIDEh2020.architect.feature_1.0.0.qualifier.jar" id="eu.DECIDEh2020.architect.feature" version="1.0.0.qualifier">
-      <category name="Architect"/>
-   </feature>
-   <category-def name="Architect" label="Architect"/>
-</site>
diff --git a/ARCHITECT/EclipsePlugin/site/content.jar b/ARCHITECT/EclipsePlugin/site/content.jar
deleted file mode 100644
index 75c7687fd4e361f3ccac7ca22a3ae127f154ad73..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/site/content.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/site/features/eu.DECIDEh2020.architect.feature_1.0.0.201709251632.jar b/ARCHITECT/EclipsePlugin/site/features/eu.DECIDEh2020.architect.feature_1.0.0.201709251632.jar
deleted file mode 100644
index 2ad194742d3b1de470a9e7485cc5e1a65ad897e1..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/site/features/eu.DECIDEh2020.architect.feature_1.0.0.201709251632.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/site/features/eu.DECIDEh2020.architect.feature_1.0.0.201709251634.jar b/ARCHITECT/EclipsePlugin/site/features/eu.DECIDEh2020.architect.feature_1.0.0.201709251634.jar
deleted file mode 100644
index 751feafdfdb26523e6fbf76a1dfea17f6071e7f9..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/site/features/eu.DECIDEh2020.architect.feature_1.0.0.201709251634.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/site/plugins/eu.DECIDEh2020.architect.wizard_1.0.0.201709251632.jar b/ARCHITECT/EclipsePlugin/site/plugins/eu.DECIDEh2020.architect.wizard_1.0.0.201709251632.jar
deleted file mode 100644
index 37ce3f1e47a0d6b8e19d9f2fb5ae4ce1c95ab990..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/site/plugins/eu.DECIDEh2020.architect.wizard_1.0.0.201709251632.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/site/plugins/eu.DECIDEh2020.architect.wizard_1.0.0.201709251634.jar b/ARCHITECT/EclipsePlugin/site/plugins/eu.DECIDEh2020.architect.wizard_1.0.0.201709251634.jar
deleted file mode 100644
index fcb694edd36a579dc8f2be796c1cc52bc518fd83..0000000000000000000000000000000000000000
Binary files a/ARCHITECT/EclipsePlugin/site/plugins/eu.DECIDEh2020.architect.wizard_1.0.0.201709251634.jar and /dev/null differ
diff --git a/ARCHITECT/EclipsePlugin/site/pom.xml b/ARCHITECT/EclipsePlugin/site/pom.xml
deleted file mode 100644
index b8983217f23c37780a622cd1495291a1d07b4900..0000000000000000000000000000000000000000
--- a/ARCHITECT/EclipsePlugin/site/pom.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>eu.DECIDEh2020.architect.site</artifactId>
-  <packaging>eclipse-repository</packaging>
-  <parent>
-  	<groupId>de.decideh2020</groupId>
-  	<artifactId>eu.DECIDEh2020.architect.releng</artifactId>
-  	<version>1.0.0-SNAPSHOT</version>
-  	<relativePath>../releng</relativePath>
-  </parent>
-</project>
\ No newline at end of file
diff --git a/ARCHITECT/architect/.gitignore b/ARCHITECT/architect/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..1e17081ec9b5bda69ca0a7b082b77d2699fb7405
--- /dev/null
+++ b/ARCHITECT/architect/.gitignore
@@ -0,0 +1,7 @@
+
+**/.settings/
+**/.project
+**/.classpath
+
+**/libs/
+**/target/
diff --git a/ARCHITECT/EclipsePlugin/LICENSE.txt b/ARCHITECT/architect/LICENSE.txt
similarity index 98%
rename from ARCHITECT/EclipsePlugin/LICENSE.txt
rename to ARCHITECT/architect/LICENSE.txt
index 3276fe0690e8305937007c7653ffaf71fb65cf7f..90ad6b2b683c5ee5f7d315afba11285f9c72538e 100644
--- a/ARCHITECT/EclipsePlugin/LICENSE.txt
+++ b/ARCHITECT/architect/LICENSE.txt
@@ -1,281 +1,281 @@
-Copyright (C) 2017 Fraunhofer FOKUS.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the Eclipse Public License version 2.0.
-
-Eclipse Public License - v 2.0
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
-PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
-OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-a) in the case of the initial Contributor, the initial content
-Distributed under this Agreement, and
-
-b) in the case of each subsequent Contributor:
-i) changes to the Program, and
-ii) additions to the Program;
-where such changes and/or additions to the Program originate from
-and are Distributed by that particular Contributor. A Contribution
-"originates" from a Contributor if it was added to the Program by
-such Contributor itself or anyone acting on such Contributor's behalf.
-Contributions do not include changes or additions to the Program that
-are not Modified Works.
-
-"Contributor" means any person or entity that Distributes the Program.
-
-"Licensed Patents" mean patent claims licensable by a Contributor which
-are necessarily infringed by the use or sale of its Contribution alone
-or when combined with the Program.
-
-"Program" means the Contributions Distributed in accordance with this
-Agreement.
-
-"Recipient" means anyone who receives the Program under this Agreement
-or any Secondary License (as applicable), including Contributors.
-
-"Derivative Works" shall mean any work, whether in Source Code or other
-form, that is based on (or derived from) the Program and for which the
-editorial revisions, annotations, elaborations, or other modifications
-represent, as a whole, an original work of authorship.
-
-"Modified Works" shall mean any work in Source Code or other form that
-results from an addition to, deletion from, or modification of the
-contents of the Program, including, for purposes of clarity any new file
-in Source Code form that contains any contents of the Program. Modified
-Works shall not include works that contain only declarations,
-interfaces, types, classes, structures, or files of the Program solely
-in each case in order to link to, bind by name, or subclass the Program
-or Modified Works thereof.
-
-"Distribute" means the acts of a) distributing or b) making available
-in any manner that enables the transfer of a copy.
-
-"Source Code" means the form of a Program preferred for making
-modifications, including but not limited to software source code,
-documentation source, and configuration files.
-
-"Secondary License" means either the GNU General Public License,
-Version 2.0, or any later versions of that license, including any
-exceptions or additional permissions as identified by the initial
-Contributor.
-
-2. GRANT OF RIGHTS
-
-a) Subject to the terms of this Agreement, each Contributor hereby
-grants Recipient a non-exclusive, worldwide, royalty-free copyright
-license to reproduce, prepare Derivative Works of, publicly display,
-publicly perform, Distribute and sublicense the Contribution of such
-Contributor, if any, and such Derivative Works.
-
-b) Subject to the terms of this Agreement, each Contributor hereby
-grants Recipient a non-exclusive, worldwide, royalty-free patent
-license under Licensed Patents to make, use, sell, offer to sell,
-import and otherwise transfer the Contribution of such Contributor,
-if any, in Source Code or other form. This patent license shall
-apply to the combination of the Contribution and the Program if, at
-the time the Contribution is added by the Contributor, such addition
-of the Contribution causes such combination to be covered by the
-Licensed Patents. The patent license shall not apply to any other
-combinations which include the Contribution. No hardware per se is
-licensed hereunder.
-
-c) Recipient understands that although each Contributor grants the
-licenses to its Contributions set forth herein, no assurances are
-provided by any Contributor that the Program does not infringe the
-patent or other intellectual property rights of any other entity.
-Each Contributor disclaims any liability to Recipient for claims
-brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the
-rights and licenses granted hereunder, each Recipient hereby
-assumes sole responsibility to secure any other intellectual
-property rights needed, if any. For example, if a third party
-patent license is required to allow Recipient to Distribute the
-Program, it is Recipient's responsibility to acquire that license
-before distributing the Program.
-
-d) Each Contributor represents that to its knowledge it has
-sufficient copyright rights in its Contribution, if any, to grant
-the copyright license set forth in this Agreement.
-
-e) Notwithstanding the terms of any Secondary License, no
-Contributor makes additional grants to any Recipient (other than
-those set forth in this Agreement) as a result of such Recipient's
-receipt of the Program under the terms of a Secondary License
-(if permitted under the terms of Section 3).
-
-3. REQUIREMENTS
-
-3.1 If a Contributor Distributes the Program in any form, then:
-
-a) the Program must also be made available as Source Code, in
-accordance with section 3.2, and the Contributor must accompany
-the Program with a statement that the Source Code for the Program
-is available under this Agreement, and informs Recipients how to
-obtain it in a reasonable manner on or through a medium customarily
-used for software exchange; and
-
-b) the Contributor may Distribute the Program under a license
-different than this Agreement, provided that such license:
-i) effectively disclaims on behalf of all other Contributors all
-warranties and conditions, express and implied, including
-warranties or conditions of title and non-infringement, and
-implied warranties or conditions of merchantability and fitness
-for a particular purpose;
-
-ii) effectively excludes on behalf of all other Contributors all
-liability for damages, including direct, indirect, special,
-incidental and consequential damages, such as lost profits;
-
-iii) does not attempt to limit or alter the recipients' rights
-in the Source Code under section 3.2; and
-
-iv) requires any subsequent distribution of the Program by any
-party to be under a license that satisfies the requirements
-of this section 3.
-
-3.2 When the Program is Distributed as Source Code:
-
-a) it must be made available under this Agreement, or if the
-Program (i) is combined with other material in a separate file or
-files made available under a Secondary License, and (ii) the initial
-Contributor attached to the Source Code the notice described in
-Exhibit A of this Agreement, then the Program may be made available
-under the terms of such Secondary Licenses, and
-
-b) a copy of this Agreement must be included with each copy of
-the Program.
-
-3.3 Contributors may not remove or alter any copyright, patent,
-trademark, attribution notices, disclaimers of warranty, or limitations
-of liability ("notices") contained within the Program from any copy of
-the Program which they Distribute, provided that Contributors may add
-their own appropriate notices.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain responsibilities
-with respect to end users, business partners and the like. While this
-license is intended to facilitate the commercial use of the Program,
-the Contributor who includes the Program in a commercial product
-offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes
-the Program in a commercial product offering, such Contributor
-("Commercial Contributor") hereby agrees to defend and indemnify every
-other Contributor ("Indemnified Contributor") against any losses,
-damages and costs (collectively "Losses") arising from claims, lawsuits
-and other legal actions brought by a third party against the Indemnified
-Contributor to the extent caused by the acts or omissions of such
-Commercial Contributor in connection with its distribution of the Program
-in a commercial product offering. The obligations in this section do not
-apply to any claims or Losses relating to any actual or alleged
-intellectual property infringement. In order to qualify, an Indemnified
-Contributor must: a) promptly notify the Commercial Contributor in
-writing of such claim, and b) allow the Commercial Contributor to control,
-and cooperate with the Commercial Contributor in, the defense and any
-related settlement negotiations. The Indemnified Contributor may
-participate in any such claim at its own expense.
-
-For example, a Contributor might include the Program in a commercial
-product offering, Product X. That Contributor is then a Commercial
-Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance
-claims and warranties are such Commercial Contributor's responsibility
-alone. Under this section, the Commercial Contributor would have to
-defend claims against the other Contributors related to those performance
-claims and warranties, and if a court requires any other Contributor to
-pay any damages as a result, the Commercial Contributor must pay
-those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
-PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
-BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
-IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
-TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
-PURPOSE. Each Recipient is solely responsible for determining the
-appropriateness of using and distributing the Program and assumes all
-risks associated with its exercise of rights under this Agreement,
-including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs
-or equipment, and unavailability or interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
-PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
-SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
-PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
-EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of
-the remainder of the terms of this Agreement, and without further
-action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity
-(including a cross-claim or counterclaim in a lawsuit) alleging that the
-Program itself (excluding combinations of the Program with other software
-or hardware) infringes such Recipient's patent(s), then such Recipient's
-rights granted under Section 2(b) shall terminate as of the date such
-litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it
-fails to comply with any of the material terms or conditions of this
-Agreement and does not cure such failure in a reasonable period of
-time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use
-and distribution of the Program as soon as reasonably practicable.
-However, Recipient's obligations under this Agreement and any licenses
-granted by Recipient relating to the Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this Agreement,
-but in order to avoid inconsistency the Agreement is copyrighted and
-may only be modified in the following manner. The Agreement Steward
-reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement
-Steward has the right to modify this Agreement. The Eclipse Foundation
-is the initial Agreement Steward. The Eclipse Foundation may assign the
-responsibility to serve as the Agreement Steward to a suitable separate
-entity. Each new version of the Agreement will be given a distinguishing
-version number. The Program (including Contributions) may always be
-Distributed subject to the version of the Agreement under which it was
-received. In addition, after a new version of the Agreement is published,
-Contributor may elect to Distribute the Program (including its
-Contributions) under the new version.
-
-Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
-receives no rights or licenses to the intellectual property of any
-Contributor under this Agreement, whether expressly, by implication,
-estoppel or otherwise. All rights in the Program not expressly granted
-under this Agreement are reserved. Nothing in this Agreement is intended
-to be enforceable by any entity that is not a Contributor or Recipient.
-No third-party beneficiary rights are created under this Agreement.
-
-Exhibit A - Form of Secondary Licenses Notice
-
-"This Source Code may also be made available under the following
-Secondary Licenses when the conditions for such availability set forth
-in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
-version(s), and exceptions or additional permissions here}."
-
-Simply including a copy of this Agreement, including this Exhibit A
-is not sufficient to license the Source Code under Secondary Licenses.
-
-If it is not possible or desirable to put the notice in a particular
-file, then You may include the notice in a location (such as a LICENSE
-file in a relevant directory) where a recipient would be likely to
-look for such a notice.
-
+Copyright (C) 2017 Fraunhofer FOKUS.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the Eclipse Public License version 2.0.
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial content
+Distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program;
+where such changes and/or additions to the Program originate from
+and are Distributed by that particular Contributor. A Contribution
+"originates" from a Contributor if it was added to the Program by
+such Contributor itself or anyone acting on such Contributor's behalf.
+Contributions do not include changes or additions to the Program that
+are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby
+grants Recipient a non-exclusive, worldwide, royalty-free copyright
+license to reproduce, prepare Derivative Works of, publicly display,
+publicly perform, Distribute and sublicense the Contribution of such
+Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby
+grants Recipient a non-exclusive, worldwide, royalty-free patent
+license under Licensed Patents to make, use, sell, offer to sell,
+import and otherwise transfer the Contribution of such Contributor,
+if any, in Source Code or other form. This patent license shall
+apply to the combination of the Contribution and the Program if, at
+the time the Contribution is added by the Contributor, such addition
+of the Contribution causes such combination to be covered by the
+Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the
+licenses to its Contributions set forth herein, no assurances are
+provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity.
+Each Contributor disclaims any liability to Recipient for claims
+brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the
+rights and licenses granted hereunder, each Recipient hereby
+assumes sole responsibility to secure any other intellectual
+property rights needed, if any. For example, if a third party
+patent license is required to allow Recipient to Distribute the
+Program, it is Recipient's responsibility to acquire that license
+before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has
+sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no
+Contributor makes additional grants to any Recipient (other than
+those set forth in this Agreement) as a result of such Recipient's
+receipt of the Program under the terms of a Secondary License
+(if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in
+accordance with section 3.2, and the Contributor must accompany
+the Program with a statement that the Source Code for the Program
+is available under this Agreement, and informs Recipients how to
+obtain it in a reasonable manner on or through a medium customarily
+used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license
+different than this Agreement, provided that such license:
+i) effectively disclaims on behalf of all other Contributors all
+warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and
+implied warranties or conditions of merchantability and fitness
+for a particular purpose;
+
+ii) effectively excludes on behalf of all other Contributors all
+liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) does not attempt to limit or alter the recipients' rights
+in the Source Code under section 3.2; and
+
+iv) requires any subsequent distribution of the Program by any
+party to be under a license that satisfies the requirements
+of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the
+Program (i) is combined with other material in a separate file or
+files made available under a Secondary License, and (ii) the initial
+Contributor attached to the Source Code the notice described in
+Exhibit A of this Agreement, then the Program may be made available
+under the terms of such Secondary Licenses, and
+
+b) a copy of this Agreement must be included with each copy of
+the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following
+Secondary Licenses when the conditions for such availability set forth
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+Simply including a copy of this Agreement, including this Exhibit A
+is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to
+look for such a notice.
+
 You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/ARCHITECT/architect/README.md b/ARCHITECT/architect/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..4696fac318fd515c21d2127c5fd6e326750d547c
--- /dev/null
+++ b/ARCHITECT/architect/README.md
@@ -0,0 +1,24 @@
+## DECIDE Eclipse Plugin
+
+The Eclipse plugin relies on the app-controller and the Cloud Patterns libraries.
+
+## Installation
+
+
+## To use the plugin
+
+To enable the eclipse plugin which is not yet in the official eclipse repository you have to go to  
+
+```
+Help > Install New Software... > Add > Local
+```
+Navigate to this directory on you disc 
+
+```
+../ARCHITECT/site/target/repository/
+```
+
+and click `Select Folders` and then `Add`.
+In the field below you will see the DECIDE plugin which you now can select and install.
+
+
diff --git a/ARCHITECT/EclipsePlugin/plugin/LICENSES b/ARCHITECT/architect/editor/LICENSES
similarity index 99%
rename from ARCHITECT/EclipsePlugin/plugin/LICENSES
rename to ARCHITECT/architect/editor/LICENSES
index 96139f460c1804ee3839ba1d640c5d4d2ee8f5a9..b25dfa08740966d0b16f62abc049d709f7a948b1 100644
--- a/ARCHITECT/EclipsePlugin/plugin/LICENSES
+++ b/ARCHITECT/architect/editor/LICENSES
@@ -1,4 +1,4 @@
-Eclipse: Eclipse Public License - v 2.0  http://www.eclipse.org/org/documents/epl-2.0/
-gson:  Apache 2.0 license http://www.apache.org/licenses/LICENSE-2.0
-Apache Jena:  Apache License, Version 2.0  http://www.apache.org/licenses/LICENSE-2.0
+Eclipse: Eclipse Public License - v 2.0  http://www.eclipse.org/org/documents/epl-2.0/
+gson:  Apache 2.0 license http://www.apache.org/licenses/LICENSE-2.0
+Apache Jena:  Apache License, Version 2.0  http://www.apache.org/licenses/LICENSE-2.0
 JGit:  Eclipse Distribution License - v 1.0 http://www.eclipse.org/org/documents/edl-v10.php
\ No newline at end of file
diff --git a/ARCHITECT/architect/editor/META-INF/MANIFEST.MF b/ARCHITECT/architect/editor/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..15cccc590226636a3b72d6fda93283791c81b456
--- /dev/null
+++ b/ARCHITECT/architect/editor/META-INF/MANIFEST.MF
@@ -0,0 +1,91 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DECIDE Editor
+Bundle-SymbolicName: eu.DECIDEh2020.architect.plugin;singleton:=true
+Bundle-Version: 1.0.1
+Require-Bundle: org.eclipse.jface.text,
+ org.eclipse.core.resources,
+ org.eclipse.ui,
+ org.eclipse.ui.ide,
+ org.eclipse.core.runtime,
+ org.eclipse.e4.core.di,
+ org.eclipse.wst.json.core;bundle-version="1.0.100",
+ org.eclipse.wst.sse.ui;bundle-version="1.3.600",
+ org.eclipse.core.databinding.observable,
+ org.eclipse.core.databinding.property,
+ org.eclipse.jgit;bundle-version="4.8.0",
+ org.eclipse.core.databinding.beans,
+ org.eclipse.core.databinding,
+ org.eclipse.jface.databinding
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: org.eclipse.ui.views.contentoutline
+Bundle-ClassPath: .,
+ libs/animal-sniffer-annotations-1.14.jar,
+ libs/app-controller-0.0.15.jar,
+ libs/cloudpatterns-1.2.0.jar,
+ libs/collection-0.7.jar,
+ libs/commons-beanutils-1.9.2.jar,
+ libs/commons-cli-1.4.jar,
+ libs/commons-codec-1.11.jar,
+ libs/commons-collections-3.2.2.jar,
+ libs/commons-csv-1.5.jar,
+ libs/commons-digester-1.8.1.jar,
+ libs/commons-io-2.5.jar,
+ libs/commons-lang3-3.4.jar,
+ libs/commons-logging-1.2.jar,
+ libs/commons-validator-1.6.jar,
+ libs/error_prone_annotations-2.0.18.jar,
+ libs/guava-22.0.jar,
+ libs/handy-uri-templates-2.1.6.jar,
+ libs/httpclient-4.5.3.jar,
+ libs/httpclient-cache-4.5.3.jar,
+ libs/httpcore-4.4.6.jar,
+ libs/j2objc-annotations-1.1.jar,
+ libs/jackson-annotations-2.9.5.jar,
+ libs/jackson-core-2.9.5.jar,
+ libs/jackson-databind-2.9.5.jar,
+ libs/JavaEWAH-1.1.6.jar,
+ libs/jcl-over-slf4j-1.7.25.jar,
+ libs/jena-arq-3.7.0.jar,
+ libs/jena-base-3.7.0.jar,
+ libs/jena-core-3.7.0.jar,
+ libs/jena-dboe-base-3.7.0.jar,
+ libs/jena-dboe-index-3.7.0.jar,
+ libs/jena-dboe-trans-data-3.7.0.jar,
+ libs/jena-dboe-transaction-3.7.0.jar,
+ libs/jena-iri-3.7.0.jar,
+ libs/jena-rdfconnection-3.7.0.jar,
+ libs/jena-shaded-guava-3.7.0.jar,
+ libs/jena-tdb-3.7.0.jar,
+ libs/jena-tdb2-3.7.0.jar,
+ libs/joda-time-2.9.4.jar,
+ libs/jsch-0.1.54.jar,
+ libs/json-20180130.jar,
+ libs/jsonld-java-0.11.1.jar,
+ libs/jsr305-1.3.9.jar,
+ libs/jzlib-1.1.1.jar,
+ libs/libthrift-0.10.0.jar,
+ libs/logback-classic-1.2.3.jar,
+ libs/logback-core-1.2.3.jar,
+ libs/org.eclipse.jgit-5.1.1.201809181055-r.jar,
+ libs/org.everit.json.schema-1.9.1.jar,
+ libs/re2j-1.1.jar,
+ libs/slf4j-api-1.7.25.jar,
+ libs/xercesImpl-2.11.0.jar,
+ libs/xml-apis-1.4.01.jar
+Automatic-Module-Name: eu.DECIDEh2020.architect.editor
+Export-Package: com.fasterxml.jackson.core,
+ com.fasterxml.jackson.databind,
+ com.fasterxml.jackson.databind.node,
+ eu.DECIDEh2020.appManager,
+ eu.DECIDEh2020.appManager.exceptions,
+ eu.DECIDEh2020.appManager.models,
+ eu.DECIDEh2020.appManager.persistence,
+ eu.DECIDEh2020.architect.cloudpatterns,
+ eu.DECIDEh2020.architect.plugin.descriptorWizard,
+ eu.DECIDEh2020.architect.plugin.editor,
+ eu.DECIDEh2020.architect.plugin.layoutComponents,
+ eu.DECIDEh2020.architect.plugin.natures,
+ eu.DECIDEh2020.architect.plugin.utils,
+ org.eclipse.wb.swt
+Bundle-Activator: eu.DECIDEh2020.architect.plugin.Activator
diff --git a/ARCHITECT/architect/editor/build.properties b/ARCHITECT/architect/editor/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..b67cf0afd67306c507cae852cdcb33cc524df115
--- /dev/null
+++ b/ARCHITECT/architect/editor/build.properties
@@ -0,0 +1,62 @@
+source.. = src/
+output.. = target/classes
+bin.includes = plugin.xml,\
+               META-INF/,\
+               icons/,\
+               .,\
+               libs/animal-sniffer-annotations-1.14.jar,\
+               libs/app-controller-0.0.15.jar,\
+               libs/cloudpatterns-1.2.0.jar,\
+               libs/collection-0.7.jar,\
+               libs/commons-beanutils-1.9.2.jar,\
+               libs/commons-cli-1.4.jar,\
+               libs/commons-codec-1.11.jar,\
+               libs/commons-collections-3.2.2.jar,\
+               libs/commons-csv-1.5.jar,\
+               libs/commons-digester-1.8.1.jar,\
+               libs/commons-io-2.5.jar,\
+               libs/commons-lang3-3.4.jar,\
+               libs/commons-logging-1.2.jar,\
+               libs/commons-validator-1.6.jar,\
+               libs/error_prone_annotations-2.0.18.jar,\
+               libs/guava-22.0.jar,\
+               libs/handy-uri-templates-2.1.6.jar,\
+               libs/httpclient-4.5.3.jar,\
+               libs/httpclient-cache-4.5.3.jar,\
+               libs/httpcore-4.4.6.jar,\
+               libs/j2objc-annotations-1.1.jar,\
+               libs/jackson-annotations-2.9.5.jar,\
+               libs/jackson-core-2.9.5.jar,\
+               libs/jackson-databind-2.9.5.jar,\
+               libs/JavaEWAH-1.1.6.jar,\
+               libs/jcl-over-slf4j-1.7.25.jar,\
+               libs/jena-arq-3.7.0.jar,\
+               libs/jena-base-3.7.0.jar,\
+               libs/jena-core-3.7.0.jar,\
+               libs/jena-dboe-base-3.7.0.jar,\
+               libs/jena-dboe-index-3.7.0.jar,\
+               libs/jena-dboe-trans-data-3.7.0.jar,\
+               libs/jena-dboe-transaction-3.7.0.jar,\
+               libs/jena-iri-3.7.0.jar,\
+               libs/jena-rdfconnection-3.7.0.jar,\
+               libs/jena-shaded-guava-3.7.0.jar,\
+               libs/jena-tdb-3.7.0.jar,\
+               libs/jena-tdb2-3.7.0.jar,\
+               libs/joda-time-2.9.4.jar,\
+               libs/jsch-0.1.54.jar,\
+               libs/json-20180130.jar,\
+               libs/jsonld-java-0.11.1.jar,\
+               libs/jsr305-1.3.9.jar,\
+               libs/jzlib-1.1.1.jar,\
+               libs/libthrift-0.10.0.jar,\
+               libs/logback-classic-1.2.3.jar,\
+               libs/logback-core-1.2.3.jar,\
+               libs/org.eclipse.jgit-5.1.1.201809181055-r.jar,\
+               libs/org.everit.json.schema-1.9.1.jar,\
+               libs/re2j-1.1.jar,\
+               libs/slf4j-api-1.7.25.jar,\
+               libs/xercesImpl-2.11.0.jar,\
+               libs/xml-apis-1.4.01.jar
+jars.compile.order = .
+bin.excludes = libs/apache-jena-libs-3.7.0.pom,\
+               libs/eu.DECIDEh2020.architect.plugin-1.0.1-libs/
diff --git a/ARCHITECT/architect/editor/icons/D.png b/ARCHITECT/architect/editor/icons/D.png
new file mode 100644
index 0000000000000000000000000000000000000000..822948a065a69ad94143fe1e4b03f817b359af85
Binary files /dev/null and b/ARCHITECT/architect/editor/icons/D.png differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/icons/icon_000.jpg b/ARCHITECT/architect/editor/icons/icon_000.jpg
similarity index 100%
rename from ARCHITECT/EclipsePlugin/plugin/icons/icon_000.jpg
rename to ARCHITECT/architect/editor/icons/icon_000.jpg
diff --git a/ARCHITECT/architect/editor/icons/plus.png b/ARCHITECT/architect/editor/icons/plus.png
new file mode 100644
index 0000000000000000000000000000000000000000..d5672b1cac4c31b8543ed09318ec8bc14a048209
Binary files /dev/null and b/ARCHITECT/architect/editor/icons/plus.png differ
diff --git a/ARCHITECT/architect/editor/icons/plus_small.png b/ARCHITECT/architect/editor/icons/plus_small.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a923a61eee2046dda4ca6addd18e4e7de05801d
Binary files /dev/null and b/ARCHITECT/architect/editor/icons/plus_small.png differ
diff --git a/ARCHITECT/EclipsePlugin/plugin/icons/sample.gif b/ARCHITECT/architect/editor/icons/sample.gif
similarity index 100%
rename from ARCHITECT/EclipsePlugin/plugin/icons/sample.gif
rename to ARCHITECT/architect/editor/icons/sample.gif
diff --git a/ARCHITECT/architect/editor/plugin.xml b/ARCHITECT/architect/editor/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c1fbfc30d0ac702e7a71e665fe8615016865e94d
--- /dev/null
+++ b/ARCHITECT/architect/editor/plugin.xml
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE project>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension-point id="eu.DECIDEh2020.architect.extension" name="Editor" schema="schema/eu.DECIDEh2020.architect.extension.exsd"/>
+<extension point="org.eclipse.core.contenttype.contentTypes">
+    <content-type
+          base-type="org.eclipse.wst.json.core.jsonsource"
+          file-names="DECIDE.json"
+          id="eu.DECIDEh2020.architect.plugin.decideSource"
+          name="DECIDE Source File (for DECIDE projects)"
+          priority="high"/>
+
+    <content-type
+       base-type="org.eclipse.wst.json.core.jsonsource"
+       file-extensions="json"
+       id="eu.DECIDEh2020.architect.plugin.decideText"
+       name="DECIDE Text File (for non-DECIDE projects)"
+       priority="low"/>
+</extension>
+   <extension
+         point="org.eclipse.ui.editors">
+      <editor
+            class="eu.DECIDEh2020.architect.plugin.editor.MultiPageEditor"
+            contributorClass="eu.DECIDEh2020.architect.plugin.editor.MultiPageEditorContributor"
+            default="false"
+            extensions="json"
+            filenames="DECIDE.json"
+            icon="icons/icon_000.jpg"
+            id="eu.DECIDEh2020.architect.plugin.editor.MultiPageEditor"
+            name="DECIDE Editor">
+         <contentTypeBinding
+               contentTypeId="eu.DECIDEh2020.architect.plugin.decideSource">
+         </contentTypeBinding>
+      </editor>
+   </extension>
+   <extension
+         point="org.eclipse.ui.newWizards">
+      <category
+            name="DECIDE Wizards"
+            id="eu.DECIDEh2020.architect.plugin">
+      </category>
+      <wizard
+            category="eu.DECIDEh2020.architect.plugin"
+            class="eu.DECIDEh2020.architect.plugin.descriptorWizard.NewProjectWizard"
+            icon="icons/icon_000.jpg"
+            id="eu.DECIDEh2020.architect.plugin.descriptorWizard.NewProjectWizard"
+            name="DECIDE project"
+            project="true">
+      </wizard>
+   </extension>
+   <extension
+         id="eu.DECIDEh2020.architect.plugin.ProjectNature"
+         point="org.eclipse.core.resources.natures">
+      <runtime>
+         <run
+               class="eu.DECIDEh2020.architect.plugin.natures.ProjectNature">
+         </run>
+      </runtime>
+        <content-type
+        id="eu.DECIDEh2020.architect.plugin.decideSource">
+  </content-type>
+        <builder
+              id="eu.DECIDEh2020.architect.plugin.DecideBuilder">
+        </builder>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectives">
+      <perspective
+            class="eu.DECIDEh2020.architect.plugin.perspectives.Perspective"
+            icon="icons/icon_000.jpg"
+            id="eu.DECIDEh2020.architect.plugin.perspective"
+            name="DECIDE Plug-in Perspective">
+      </perspective>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension
+            targetID="org.eclipse.jdt.ui.JavaPerspective">
+         <view
+               id="eu.DECIDEh2020.architect.customnavigator.navigator"
+               minimized="false"
+               relationship="left"
+               relative="org.eclipse.ui.editorss">
+         </view>
+         <newWizardShortcut
+               id="eu.DECIDEh2020.architect.plugin.descriptorWizard.NewProjectWizard">
+         </newWizardShortcut>
+      </perspectiveExtension>
+   </extension>
+   <extension
+         point="org.eclipse.ui.ide.projectNatureImages">
+      <image
+            icon="icons/D.png"
+            id="eu.DECIDEh2020.architect.plugin.NatureImage"
+            natureId="eu.DECIDEh2020.architect.plugin.ProjectNature">
+      </image>
+   </extension>
+   <extension
+         id="eu.DECIDEh2020.architect.plugin.DecideBuilder"
+         name="DECIDE Builder"
+         point="org.eclipse.core.resources.builders">
+      <builder
+            callOnEmptyDelta="true"
+            hasNature="true"
+            isConfigurable="false">
+         <run
+               class="eu.DECIDEh2020.architect.plugin.builder.DecideBuilder">
+         </run>
+      </builder>
+   </extension>
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+            categoryId="eu.DECIDEh2020.architect.plugin.DecideCategory"
+            defaultHandler="eu.DECIDEh2020.architect.plugin.natures.AddRemoveDecideNatureHandler"
+            id="eu.DECIDEh2020.architect.plugin.DecideCommand"
+            name="Add/Remove DECIDE Nature">
+      </command>
+      <category
+            id="eu.DECIDEh2020.architect.plugin.DecideCategory"
+            name="DECIDE Commands">
+      </category>
+   </extension>
+   <extension
+         point="org.eclipse.ui.menus">
+      <menuContribution
+            locationURI="popup:org.eclipse.ui.projectConfigure?after=additions">
+        <!-- <command
+               commandId="eu.DECIDEh2020.architect.plugin.DecideCommand"
+               label="Remove DECIDE Nature"
+               style="push">
+            <visibleWhen
+                  checkEnabled="false">
+               <with
+                     variable="selection">
+                  <count
+                        value="1">
+                  </count>
+                  <iterate>
+                     <adapt
+                           type="org.eclipse.core.resources.IProject">
+                        <test
+                              property="org.eclipse.core.resources.projectNature"
+                              value="eu.DECIDEh2020.architect.plugin.ProjectNature">
+                        </test>
+                     </adapt>
+                  </iterate>
+               </with>
+            </visibleWhen>
+         </command>-->
+         <command
+               commandId="eu.DECIDEh2020.architect.plugin.DecideCommand"
+               label="Add DECIDE Nature"
+               style="push">
+            <visibleWhen
+                  checkEnabled="false">
+               <with
+                     variable="selection">
+                  <count
+                        value="1">
+                  </count>
+                  <iterate>
+                     <adapt
+                           type="org.eclipse.core.resources.IProject">
+                        <not>
+                           <test
+                                 property="org.eclipse.core.resources.projectNature"
+                                 value="eu.DECIDEh2020.architect.plugin.ProjectNature">
+                           </test>
+                        </not>
+                     </adapt>
+                  </iterate>
+               </with>
+            </visibleWhen>
+         </command>
+      </menuContribution>
+   </extension>
+   <extension
+         id="product"
+         point="org.eclipse.core.runtime.products">
+      <product
+            application="org.eclipse.e4.ui.workbench.swt.E4Application"
+            name="editor">
+         <property
+               name="appName"
+               value="editor">
+         </property>
+      </product>
+   </extension>
+   <extension
+         id="editor"
+         point="org.eclipse.core.runtime.products">
+      <product
+            application="org.eclipse.ui.ide.workbench"
+            name="Patterns">
+         <property
+               name="appName"
+               value="Patterns">
+         </property>
+      </product>
+   </extension>
+</plugin>
diff --git a/ARCHITECT/architect/editor/pom.xml b/ARCHITECT/architect/editor/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1609c8510925aabe3d1eaec0fde3534cdd951b8e
--- /dev/null
+++ b/ARCHITECT/architect/editor/pom.xml
@@ -0,0 +1,57 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>eu.DECIDEh2020.architect.plugin</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<parent>
+		<groupId>eu.DECIDEh2020</groupId>
+		<artifactId>architect</artifactId>
+		<version>1.0.1</version>
+		<relativePath>..</relativePath>
+	</parent>
+
+	<repositories>
+		<repository>
+			<id>jitpack.io</id>
+			<url>https://jitpack.io</url>
+		</repository>
+	</repositories>
+
+	<dependencies>
+		<dependency>
+			<groupId>eu.DECIDEh2020</groupId>
+			<artifactId>cloudpatterns</artifactId>
+			<version>1.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>eu.DECIDEh2020</groupId>
+			<artifactId>app-controller</artifactId>
+			<version>0.0.15</version>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>3.1.1</version>
+				<executions>
+					<execution>
+						<id>copy-dependencies</id>
+						<phase>initialize</phase>
+						<goals>
+							<goal>copy-dependencies</goal>
+						</goals>
+						<configuration>
+							<overWrite>true</overWrite>
+							<outputDirectory>libs</outputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/ARCHITECT/architect/editor/schema/eu.DECIDEh2020.architect.extension.exsd b/ARCHITECT/architect/editor/schema/eu.DECIDEh2020.architect.extension.exsd
new file mode 100644
index 0000000000000000000000000000000000000000..deeb180cd40bd419f3a0ed6430e2fdf460e73359
--- /dev/null
+++ b/ARCHITECT/architect/editor/schema/eu.DECIDEh2020.architect.extension.exsd
@@ -0,0 +1,109 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="eu.DECIDEh2020.architect.plugin" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="eu.DECIDEh2020.architect.plugin" id="eu.DECIDEh2020.architect.extension" name="Editor"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice minOccurs="1" maxOccurs="unbounded">
+            <element ref="pagebuilder"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="pagebuilder">
+      <complexType>
+         <attribute name="PageName" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":eu.DECIDEh2020.architect.plugin.editor.IPageBuilder"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/Activator.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/Activator.java
new file mode 100644
index 0000000000000000000000000000000000000000..1bd036cf730a3d54906088cd45c6563262015b7a
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/Activator.java
@@ -0,0 +1,47 @@
+package eu.DECIDEh2020.architect.plugin;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "eu.DECIDEh2020.architect.plugin"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/builder/BuilderWizard.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/builder/BuilderWizard.java
new file mode 100644
index 0000000000000000000000000000000000000000..eaa1cb75d8a59caa35bfb450cd1173c7458da489
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/builder/BuilderWizard.java
@@ -0,0 +1,121 @@
+package eu.DECIDEh2020.architect.plugin.builder;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+import eu.DECIDEh2020.appManager.AppDescriptionFactory;
+import eu.DECIDEh2020.appManager.AppDescriptionHelper;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.architect.plugin.Activator;
+import eu.DECIDEh2020.architect.plugin.descriptorWizard.ConfigPage;
+import eu.DECIDEh2020.architect.plugin.descriptorWizard.MicroservicePage;
+
+
+public class BuilderWizard extends Wizard {
+	private IProgressMonitor monitor;
+	private AppDescription appdescription;
+	private MicroservicePage microservicePage;
+	IProject project;
+	private ConfigPage configPage;
+	
+	public BuilderWizard(IProgressMonitor monitor, IProject project) {
+		super();
+		this.monitor= monitor;
+		this.project= project;
+		setWindowTitle("DECIDE project wizard");
+		appdescription = AppDescriptionFactory.createAppDescription("DECIDE");
+	}
+	
+	public void addPages() {
+		super.addPages();
+
+		configPage = new ConfigPage(appdescription);
+		addPage(configPage);
+
+		microservicePage = new MicroservicePage(appdescription);
+		addPage(microservicePage);
+	}
+	
+	@Override
+	public boolean performFinish() {
+		monitor.subTask("Adding DECIDE file");
+		try {
+			createFile(project, monitor);
+		} catch (CoreException e) {
+			Activator.getDefault().getLog().log(new Status(Status.ERROR, Activator.PLUGIN_ID, "Creating file.", e));
+		}
+		monitor.worked(1);
+		return true;
+	}
+
+	@Override
+	public IWizardPage getNextPage(IWizardPage currentPage) {
+		if (currentPage == configPage) {
+			microservicePage.setMicroservices();
+			return microservicePage;
+		}
+		return null;
+	}
+	
+	private void createFile(IProject project, IProgressMonitor monitor) throws CoreException {
+		// create a sample file
+		final String fileName = "DECIDE.json";
+		monitor.beginTask("Creating " + fileName, 2);
+
+		final IFile file = project.getFile(new Path(fileName));
+		try {
+			InputStream stream = openContentStream(appdescription);
+			if (file.exists()) {
+				file.setContents(stream, true, true, monitor);
+			} else {
+				file.create(stream, true, monitor);
+			}
+			stream.close();
+		} catch (IOException e) {
+		}
+		monitor.worked(1);
+		openFile(file,monitor);
+	
+	}
+	private void openFile(IFile file, IProgressMonitor monitor) {
+		monitor.setTaskName("Opening file for editing...");
+		this.getShell().getDisplay().asyncExec(new Runnable() {
+			public void run() {
+				IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+				try {
+					IDE.openEditor(page, file, true);
+				} catch (PartInitException e) {
+				}
+			}
+		});
+		monitor.worked(1);
+	}
+	
+	private InputStream openContentStream(AppDescription appdescription) throws CoreException {
+		String contents = "";
+		try {
+			AppDescriptionHelper adh = AppDescriptionHelper.create(appdescription);
+			contents = adh.getJson();
+		} catch (JsonProcessingException e) {
+			throw new CoreException(new Status(Status.ERROR, Activator.PLUGIN_ID, Status.OK, "Reading user generated JSON", e));
+		}
+		return new ByteArrayInputStream(contents.getBytes());
+	}
+
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/builder/DecideBuilder.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/builder/DecideBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..4bed63bbd8024388182dd262dbfac57099ad1440
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/builder/DecideBuilder.java
@@ -0,0 +1,109 @@
+package eu.DECIDEh2020.architect.plugin.builder;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.jgit.api.errors.GitAPIException;
+import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+
+import eu.DECIDEh2020.appManager.persistence.GitHandler;
+import eu.DECIDEh2020.architect.plugin.Activator;
+
+public class DecideBuilder extends IncrementalProjectBuilder {
+
+    public static final String BUILDER_ID = "eu.DECIDEh2020.architect.plugin.DecideBuilder";
+    public static final String DECIDE_FILENAME = "DECIDE.json";
+
+    public DecideBuilder() {
+    }
+
+    @Override
+    protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException {
+	// get the project to build
+	IProject project = getProject();
+
+	switch (kind) {
+
+	case FULL_BUILD:
+	    try {
+		monitor.beginTask("Adding Nature", 3);
+
+		boolean isGit = false;
+
+		IPath projectLocation = project.getLocation();
+		FileRepositoryBuilder builder = new FileRepositoryBuilder();
+		File dir = projectLocation.toFile();
+		try (Repository repository = builder.setGitDir(dir).readEnvironment() // scan environment GIT_* variables
+			.findGitDir() // scan up the file system tree
+			.build()) {
+		    // System.out.println("Having repository: " + repository.getDirectory());
+
+		    // the Ref holds an ObjectId for any type of object (tree, commit, blob, tree)
+		    Ref head = repository.exactRef("refs/heads/master");
+		    if (head != null) {
+			isGit = true;
+		    }
+
+		} catch (IOException e) {
+		    isGit = false;
+		    Activator.getDefault().getLog().log(new Status(Status.ERROR, Activator.PLUGIN_ID, "Check for git.", e));
+		}
+
+		monitor.subTask("Adding Git Directory");
+
+		if (!isGit) {
+		    GitHandler gh = new GitHandler(new GitHandler.Repository());
+		    gh.createRepositoryIn(projectLocation.toFile().toPath());
+		}
+		monitor.worked(1);
+		boolean isDECIDE = false;
+		File decidejson = new File(projectLocation + File.separator + "DECIDE.json");
+		if (decidejson.exists() && !decidejson.isDirectory()) {
+		    isDECIDE = true;
+		}
+		// System.out.println("IS DECIDE: " + isDECIDE);
+
+		if (!isDECIDE) {
+		    monitor.subTask("Wizard");
+		    BuilderWizard bwizard = new BuilderWizard(monitor, project);
+		    PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+			public void run() {
+			    Shell activeShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+			    WizardDialog dialog = new WizardDialog(activeShell, bwizard);
+			    dialog.open();
+			}
+		    });
+		    monitor.worked(1);
+		}
+
+	    } catch (IllegalStateException e) {
+		Activator.getDefault().getLog().log(new Status(Status.ERROR, Activator.PLUGIN_ID, "Full build.", e));
+	    } catch (GitAPIException e) {
+		Activator.getDefault().getLog().log(new Status(Status.ERROR, Activator.PLUGIN_ID, "Full build.", e));
+	    } finally {
+		monitor.done();
+	    }
+	    break;
+
+	case INCREMENTAL_BUILD:
+	    break;
+
+	case AUTO_BUILD:
+	    break;
+	}
+	return null;
+    }
+
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/ConfigPage.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/ConfigPage.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b64d4dcc27152db9d3bf3a43059d51655630dab
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/ConfigPage.java
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+
+package eu.DECIDEh2020.architect.plugin.descriptorWizard;
+
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.wb.swt.SWTResourceManager;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+
+import eu.DECIDEh2020.architect.plugin.layoutComponents.MicroserviceListComposite;
+import eu.DECIDEh2020.architect.plugin.layoutComponents.PageCompleteListener;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+
+//Second page of the wizard with project info and number of microservices
+public class ConfigPage extends WizardPage {
+
+    private Composite container;
+    private AppDescription project;
+    private MicroserviceListComposite microserviceList;
+    private Text txtProjectdescription;
+
+    /**
+     * @wbp.parser.constructor
+     */
+    public ConfigPage(AppDescription project) {
+	super("Project Configuration");
+
+	this.project = project;
+
+	setTitle("Project Configuration");
+	setDescription("Configure project and set desired number of microservices");
+    }
+
+    @Override
+    public void createControl(Composite parent) {
+	container = new Composite(parent, SWT.NULL);
+	setControl(container);
+	container.setLayout(new GridLayout(1, false));
+	addMicroserviceControls();
+	setPageComplete(false);
+    }
+
+    private void addMicroserviceControls() {
+
+	Composite compositeProjectDescription = new Composite(container, SWT.NONE);
+	compositeProjectDescription.setLayout(new GridLayout(2, false));
+	compositeProjectDescription.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+	Label lblAppDescription = new Label(compositeProjectDescription, SWT.NONE);
+	lblAppDescription.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 1));
+	lblAppDescription.setText("App Description:");
+
+	txtProjectdescription = new Text(compositeProjectDescription, SWT.BORDER | SWT.MULTI);
+	txtProjectdescription.addKeyListener(new KeyAdapter() {
+	    @Override
+	    public void keyReleased(KeyEvent e) {
+		project.setDescription(txtProjectdescription.getText());
+	    }
+	});
+	txtProjectdescription.setText("ProjectDescription");
+	GridData gd_txtProjectdescription = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+	gd_txtProjectdescription.heightHint = 52;
+	txtProjectdescription.setLayoutData(gd_txtProjectdescription);
+	new Label(compositeProjectDescription, SWT.NONE);
+	new Label(compositeProjectDescription, SWT.NONE);
+
+	Group grpMicroservices = new Group(container, SWT.NONE);
+
+	grpMicroservices.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+	grpMicroservices.setText("Microservices");
+	grpMicroservices.setLayout(new GridLayout(1, false));
+
+	microserviceList = new MicroserviceListComposite(grpMicroservices, SWT.NONE, project, true, SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
+	microserviceList.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+	microserviceList.addPageCompleteListener(new PageCompleteListener() {
+	    @Override
+	    public void pageCompleted(Boolean complete) {
+		setPageComplete(complete);
+	    }
+	});
+
+    }
+
+    public void setVisible(boolean visible) {
+	super.setVisible(visible);
+	if (visible) {
+	    microserviceList.refresh();
+	}
+    }
+
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MicroservicePage.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MicroservicePage.java
new file mode 100644
index 0000000000000000000000000000000000000000..373b4c3f1f8bedcb4198c13fd6e90d69e10274c0
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MicroservicePage.java
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+
+package eu.DECIDEh2020.architect.plugin.descriptorWizard;
+
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.custom.ScrolledComposite;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Microservice;
+import eu.DECIDEh2020.architect.plugin.layoutComponents.MicroserviceComposite;
+
+import java.util.List;
+
+//Wizard page that contains a list of all microservices & functions to change their properties
+public class MicroservicePage extends WizardPage {
+
+    private ScrolledComposite scrolledComposite;
+    private Composite container;
+    private AppDescription project;
+
+    public MicroservicePage(AppDescription project) {
+	super("Microservice Settings");
+	setTitle("Microservice Settings");
+	setDescription("Configure each Microservice here");
+	this.project = project;
+    }
+
+    @Override
+    public void createControl(Composite parent) {
+
+	scrolledComposite = new ScrolledComposite(parent, SWT.V_SCROLL);
+	scrolledComposite.setExpandHorizontal(true);
+	scrolledComposite.setExpandVertical(true);
+	setControl(scrolledComposite);
+	container = new Composite(scrolledComposite, SWT.NONE);
+	scrolledComposite.setContent(container);
+	container.setLayout(new GridLayout(1, false));
+	scrolledComposite.setExpandVertical(true);
+	scrolledComposite.setExpandHorizontal(true);
+	scrolledComposite.addListener(SWT.Resize, event -> {
+	    int width = scrolledComposite.getClientArea().width;
+	    scrolledComposite.setMinSize(container.computeSize(width, SWT.DEFAULT));
+	});
+
+	setPageComplete(true);
+    }
+
+    private void addMicroserviceComposite(Microservice microservice) {
+	if (microservice != null) {
+	    @SuppressWarnings("unused")
+	    Composite msvContainer = new MicroserviceComposite(container, microservice, project);
+	}
+    }
+
+    public void setMicroservices() {
+	// first remove all microservice composites & then add new ones
+	Control[] children = container.getChildren();
+	for (int i = 0; i < children.length; i++) {
+	    children[i].dispose();
+	}
+
+	addMicroservices();
+	container.requestLayout();
+	int width = scrolledComposite.getClientArea().width;
+	scrolledComposite.setMinSize(container.computeSize(width, SWT.DEFAULT));
+	scrolledComposite.requestLayout();
+
+    }
+
+    private void addMicroservices() {
+
+	List<Microservice> microservices = project.getMicroservices();
+	if (microservices.size() > 0) {
+	    for (Microservice m : microservices) {
+		addMicroserviceComposite(m);
+	    }
+
+	}
+
+    }
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MonolithPage.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MonolithPage.java
similarity index 82%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MonolithPage.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MonolithPage.java
index e624d016da0983322c6c089564c2dec47ccaba20..1161267492480688e23c3e10a2c21d8c76610f29 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MonolithPage.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/MonolithPage.java
@@ -1,46 +1,43 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.descriptorWizard;
-
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-
-public class MonolithPage extends WizardPage {
-
-	/**
-	 * Create the wizard.
-	 */
-	public MonolithPage() {
-		super("wizardPage");
-		
-		setTitle("Monolith Page");
-		setDescription("Wizard Page description");
-	}
-
-	/**
-	 * Create contents of the wizard.
-	 * @param parent
-	 */
-	public void createControl(Composite parent) {
-		Composite container = new Composite(parent, SWT.NULL);
-
-		
-		
-		
-		
-		setControl(container);
-	}
-
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.descriptorWizard;
+
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+//TODO: this page is shown, if the project is a monolithic application that has to be seperated into microservices
+//no content & not yet included in the wizard flow
+public class MonolithPage extends WizardPage {
+
+	/**
+	 * Create the wizard.
+	 */
+	public MonolithPage() {
+		super("wizardPage");
+		
+		setTitle("Monolith Page");
+		setDescription("Wizard Page description");
+	}
+
+	/**
+	 * Create contents of the wizard.
+	 * @param parent
+	 */
+	public void createControl(Composite parent) {
+		Composite container = new Composite(parent, SWT.NULL);
+		setControl(container);
+	}
+
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectPage.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectPage.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae866f012fa71e1d6808a97b2d8ebcc3bd8e2376
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectPage.java
@@ -0,0 +1,371 @@
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.descriptorWizard;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.persistence.GitHandler.Repository;
+
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+
+import java.net.URISyntaxException;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.jface.databinding.swt.ISWTObservableValue;
+import org.eclipse.jface.databinding.swt.SWTObservables;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jgit.transport.URIish;
+import org.eclipse.core.databinding.beans.PojoProperties;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+
+public class NewProjectPage extends WizardNewProjectCreationPage {
+
+    private Composite container;
+    private AppDescription project;
+    private Repository repo;
+    private Text txtUser;
+    private Text txtPassword;
+    private Text txtPort;
+    private Text txtReponame;
+    private Text txtUri;
+    private Text txtHost;
+    private Text txtRepopath;
+    private Combo comboProtocol;
+    private Button btnSecurestore;
+    private Button btnCreateLocalRepository;
+    private Button btnOpenLocalRepository;
+    private Button btnCloneRemoteRepository;
+
+    public NewProjectPage(String pageName, AppDescription project) {
+	super(pageName);
+	this.project = project;
+	repo = new Repository();
+
+    }
+
+    @Override
+    public void createControl(Composite parent) {
+	super.createControl(parent);
+	Composite p = (Composite) getControl();
+
+	p.setLayout(new GridLayout(1, false));
+	container = new Composite(p, SWT.NONE);
+	container.setLayout(new GridLayout(1, false));
+	container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+
+	Composite compositeLocal_Remote = new Composite(container, SWT.NONE);
+	compositeLocal_Remote.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+	compositeLocal_Remote.setLayout(new FillLayout(SWT.HORIZONTAL));
+
+	btnOpenLocalRepository = new Button(compositeLocal_Remote, SWT.RADIO);
+	btnOpenLocalRepository.setText("Open Local repository");
+
+	btnCreateLocalRepository = new Button(compositeLocal_Remote, SWT.RADIO);
+
+	btnCreateLocalRepository.setText("Create Local repository");
+
+	btnCloneRemoteRepository = new Button(compositeLocal_Remote, SWT.RADIO);
+
+	btnCloneRemoteRepository.setText("Clone Remote Repository");
+
+	Group grpGitRepository = new Group(container, SWT.NONE);
+	grpGitRepository.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+	grpGitRepository.setText("Git Repository");
+	grpGitRepository.setLayout(new GridLayout(1, false));
+
+	Composite composite_1 = new Composite(grpGitRepository, SWT.NONE);
+	composite_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+	composite_1.setLayout(new GridLayout(2, false));
+
+	Label lblName = new Label(composite_1, SWT.NONE);
+	lblName.setText("Name:");
+
+	txtReponame = new Text(composite_1, SWT.BORDER);
+	txtReponame.setEnabled(false);
+	txtReponame.addKeyListener(new KeyAdapter() {
+	    @Override
+	    public void keyPressed(KeyEvent e) {
+
+	    }
+	});
+	txtReponame.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+	Composite composite = new Composite(grpGitRepository, SWT.NONE);
+	composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+	composite.setLayout(new GridLayout(1, false));
+
+	Group grpLocation = new Group(composite, SWT.NONE);
+	grpLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+	grpLocation.setText("Location");
+	grpLocation.setLayout(new GridLayout(2, false));
+
+	Label lblUri = new Label(grpLocation, SWT.NONE);
+	lblUri.setText("URI:");
+
+	txtUri = new Text(grpLocation, SWT.BORDER);
+
+	txtUri.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+	Label lblHost = new Label(grpLocation, SWT.NONE);
+	lblHost.setText("Host:");
+
+	txtHost = new Text(grpLocation, SWT.BORDER);
+	txtHost.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+	Label lblRepositoryPath = new Label(grpLocation, SWT.NONE);
+	lblRepositoryPath.setText("Repository Path:");
+
+	txtRepopath = new Text(grpLocation, SWT.BORDER);
+	txtRepopath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+	Group grpConnection = new Group(composite, SWT.NONE);
+	grpConnection.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+	grpConnection.setText("Connection");
+	grpConnection.setLayout(new GridLayout(2, false));
+
+	Label lblProtocol = new Label(grpConnection, SWT.NONE);
+	lblProtocol.setText("Protocol:");
+
+	comboProtocol = new Combo(grpConnection, SWT.READ_ONLY);
+	comboProtocol.setItems(new String[] { "https", "ssh" });
+	comboProtocol.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+	comboProtocol.select(0);
+
+	Label lblPort = new Label(grpConnection, SWT.NONE);
+	lblPort.setText("Port:");
+
+	txtPort = new Text(grpConnection, SWT.BORDER);
+	txtPort.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+
+	Group grpAuthentication = new Group(composite, SWT.NONE);
+	grpAuthentication.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+	grpAuthentication.setText("Authentication");
+	grpAuthentication.setLayout(new GridLayout(2, false));
+
+	Label lblUser = new Label(grpAuthentication, SWT.NONE);
+	lblUser.setText("User:");
+
+	txtUser = new Text(grpAuthentication, SWT.BORDER);
+	txtUser.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+	Label lblPassword = new Label(grpAuthentication, SWT.NONE);
+	lblPassword.setText("Password:");
+
+	txtPassword = new Text(grpAuthentication, SWT.BORDER | SWT.PASSWORD);
+	txtPassword.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+	Label lblStoreInSecure = new Label(grpAuthentication, SWT.NONE);
+	lblStoreInSecure.setText("Store in Secure Store:");
+
+	txtUri.addKeyListener(new KeyAdapter() {
+	    @Override
+	    public void keyReleased(KeyEvent e) {
+		URIish uri = null;
+		try {
+		    if (!txtUri.getText().isEmpty()) {
+			uri = new URIish(txtUri.getText());
+		    }
+		} catch (URISyntaxException e1) {
+		    e1.printStackTrace();
+		}
+		if (uri != null) {
+		    txtHost.setText(uri.getHost() != null ? uri.getHost() : "");
+		    txtRepopath.setText(uri.getPath() != null ? uri.getPath() : "");
+
+		    comboProtocol.setText(uri.getScheme() != null ? uri.getScheme() : "ssh");
+		    txtUser.setText(uri.getUser() != null ? uri.getUser() : "");
+		    txtPassword.setText(uri.getPass() != null ? uri.getPass() : "");
+
+		    if (uri.getPort() >= 0) {
+			txtPort.setText(String.valueOf(uri.getPort()));
+		    }
+
+		}
+		setPageComplete(true);
+	    }
+	});
+
+	btnSecurestore = new Button(grpAuthentication, SWT.CHECK);
+	txtUri.setEnabled(false);
+	txtHost.setEnabled(false);
+	txtRepopath.setEnabled(false);
+	comboProtocol.setEnabled(false);
+	txtPort.setEnabled(false);
+	txtUser.setEnabled(false);
+	txtPassword.setEnabled(false);
+	btnSecurestore.setEnabled(false);
+
+	btnOpenLocalRepository.addSelectionListener(new SelectionAdapter() {
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		txtReponame.setEnabled(false);
+		txtUri.setEnabled(false);
+		txtHost.setEnabled(false);
+		txtRepopath.setEnabled(false);
+		comboProtocol.setEnabled(false);
+		txtPort.setEnabled(false);
+		txtUser.setEnabled(false);
+		txtPassword.setEnabled(false);
+		btnSecurestore.setEnabled(false);
+		repo.setNewRepo(false);
+		repo.setLocalRepo(true);
+
+		setPageComplete(true);
+		getWizard().getContainer().updateButtons();
+		getWizard().getContainer().updateButtons();
+
+	    }
+	});
+
+	btnCreateLocalRepository.addSelectionListener(new SelectionAdapter() {
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+
+		txtReponame.setEnabled(false);
+		txtUri.setEnabled(false);
+		txtHost.setEnabled(false);
+		txtRepopath.setEnabled(false);
+		comboProtocol.setEnabled(false);
+		txtPort.setEnabled(false);
+		txtUser.setEnabled(false);
+		txtPassword.setEnabled(false);
+		btnSecurestore.setEnabled(false);
+		repo.setNewRepo(true);
+
+		setPageComplete(true);
+		getWizard().getContainer().updateButtons();
+		getWizard().getContainer().updateButtons();
+	    }
+	});
+
+	btnCloneRemoteRepository.addSelectionListener(new SelectionAdapter() {
+	    @Override
+	    public void widgetSelected(SelectionEvent e) {
+		txtReponame.setEnabled(false);
+		txtUri.setEnabled(true);
+		txtHost.setEnabled(true);
+		txtRepopath.setEnabled(true);
+		comboProtocol.setEnabled(true);
+		txtPort.setEnabled(true);
+		txtUser.setEnabled(true);
+		txtPassword.setEnabled(true);
+		btnSecurestore.setEnabled(true);
+		repo.setNewRepo(false);
+		repo.setLocalRepo(false);
+
+		setPageComplete(true);
+		getWizard().getContainer().updateButtons();
+		getWizard().getContainer().updateButtons();
+	    }
+	});
+	btnCreateLocalRepository.setSelection(true);
+	setPageComplete(false);
+	// required to avoid an error in the system
+	setControl(p);
+	initDataBindings();
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.jface.wizard.WizardPage#setPageComplete(boolean)
+     */
+    @Override
+    public void setPageComplete(boolean complete) {
+	Boolean thisComplete = false;
+	if ((btnOpenLocalRepository != null && btnOpenLocalRepository.getSelection())
+		|| (btnCreateLocalRepository != null && btnCreateLocalRepository.getSelection())) {
+	    thisComplete = true;
+	} else {
+	    if (repo != null && repo.getURI() != null && !repo.getURI().isEmpty()) {
+		thisComplete = true;
+	    }
+	}
+	thisComplete = thisComplete && this.getProjectName() != null && this.getProjectName() != "" && getErrorMessage() == null;
+
+	super.setPageComplete(thisComplete && complete);
+	if (getWizard() != null && getWizard().getContainer() != null) {
+	    getWizard().getContainer().updateButtons();
+	}
+	// System.out.println("NewProject Page Complete: "+ isPageComplete());
+    }
+
+    public boolean isPageComplete() {
+	if (project != null) {
+	    project.setName(getProjectName());
+	}
+	return super.isPageComplete();
+    }
+
+    public Repository getRepository() {
+	return repo;
+    }
+
+    protected DataBindingContext initDataBindings() {
+	DataBindingContext bindingContext = new DataBindingContext();
+	//
+	ISWTObservableValue observeTextTxtReponameObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtReponame);
+	IObservableValue nameRepoObserveValue = PojoProperties.value("name").observe(repo);
+	bindingContext.bindValue(SWTObservables.observeText(txtReponame, SWT.Modify), nameRepoObserveValue);
+	//
+	IObservableValue<String> observeTextTxtUriObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtUri);
+	IObservableValue uRIRepoObserveValue = PojoProperties.value("URI").observe(repo);
+	bindingContext.bindValue(observeTextTxtUriObserveWidget, uRIRepoObserveValue);
+	//
+	IObservableValue<String> observeTextTxtHostObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtHost);
+	IObservableValue<String> hostRepoObserveValue = PojoProperties.value("host").observe(repo);
+	bindingContext.bindValue(observeTextTxtHostObserveWidget, hostRepoObserveValue);
+	//
+	IObservableValue<String> observeTextTxtRepopathObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtRepopath);
+	IObservableValue<String> pathRepoObserveValue = PojoProperties.value("path").observe(repo);
+	bindingContext.bindValue(observeTextTxtRepopathObserveWidget, pathRepoObserveValue);
+	//
+	IObservableValue<String> observeTextComboProtocolObserveWidget = WidgetProperties.text().observe(comboProtocol);
+	IObservableValue<String> protocolRepoObserveValue = PojoProperties.value("protocol").observe(repo);
+	bindingContext.bindValue(observeTextComboProtocolObserveWidget, protocolRepoObserveValue);
+	//
+	IObservableValue<String> observeTextTextPortObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtPort);
+	IObservableValue<String> portRepoObserveValue = PojoProperties.value("port").observe(repo);
+	bindingContext.bindValue(observeTextTextPortObserveWidget, portRepoObserveValue);
+	//
+	IObservableValue<String> observeTextTxtUserObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtUser);
+	IObservableValue<String> userRepoObserveValue = PojoProperties.value("user").observe(repo);
+	bindingContext.bindValue(observeTextTxtUserObserveWidget, userRepoObserveValue);
+	//
+	IObservableValue<String> observeTextTxtPasswordObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtPassword);
+	IObservableValue<String> passwordRepoObserveValue = PojoProperties.value("password").observe(repo);
+	bindingContext.bindValue(observeTextTxtPasswordObserveWidget, passwordRepoObserveValue);
+	//
+	IObservableValue<String> observeSelectionBtnSecurestoreObserveWidget = WidgetProperties.selection().observe(btnSecurestore);
+	IObservableValue<String> secureStorageRepoObserveValue = PojoProperties.value("secureStorage").observe(repo);
+	bindingContext.bindValue(observeSelectionBtnSecurestoreObserveWidget, secureStorageRepoObserveValue);
+	//
+	return bindingContext;
+    }
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectSupport.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectSupport.java
similarity index 78%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectSupport.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectSupport.java
index b7161726170c8dece55b7fc64042ae324c573aa2..7512c6fbf99775ca198fe16e5e00da6603cfb395 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectSupport.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectSupport.java
@@ -1,245 +1,261 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.descriptorWizard;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jgit.api.Git;
-import org.eclipse.jgit.api.errors.GitAPIException;
-import org.eclipse.jgit.api.errors.InvalidRemoteException;
-import org.eclipse.jgit.api.errors.TransportException;
-import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.ide.IDE;
-
-import eu.DECIDEh2020.architect.appManager.models.AppDescriptor;
-import eu.DECIDEh2020.architect.appManager.persistence.GitHandler;
-import eu.DECIDEh2020.architect.appManager.persistence.GitHandler.Repository;
-import eu.DECIDEh2020.architect.appManager.persistence.JsonHandler;
-import eu.DECIDEh2020.architect.plugin.natures.ProjectNature;
-
-public class NewProjectSupport {
-	/**
-	 * For this marvelous project we need to: - create the default Eclipse project -
-	 * add the custom project nature - create the folder structure
-	 *
-	 * @param projectName
-	 * @param location
-	 * @param natureId
-	 * @return
-	 */
-	public static IProject createProject(String projectName, URI location, IProgressMonitor monitor, Repository repo,
-			NewProjectWizard wizard) throws CoreException {
-		Assert.isNotNull(projectName);
-		Assert.isTrue(projectName.trim().length() > 0);
-		
-		
-		GitHandler githandler = new GitHandler(repo);
-		
-		File dir;
-		if (location == null) {
-			dir = new File(ResourcesPlugin.getWorkspace().getRoot().getLocation() + File.separator + projectName);
-		} else {
-			dir = new File(location + File.separator + projectName);
-		}
-
-		if (!repo.isLocalRepo() && !repo.isNewRepo()) {
-			try  {
-				githandler.cloneRepositoryTo(dir);
-				// Note: the call() returns an opened repository already which needs to be
-				// closed to avoid file handle leaks!
-				System.out.println("Created repository: " + githandler.getDirectory());
-			} catch (InvalidRemoteException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (TransportException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (GitAPIException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-		}else if (repo.isLocalRepo() && repo.isNewRepo()) {
-
-			try {
-				githandler.createRepositoryIn(dir);
-			} catch (IllegalStateException | GitAPIException e1) {
-				// TODO Auto-generated catch block
-				e1.printStackTrace();
-			}
-		} else if (!repo.isLocalRepo() && repo.isNewRepo()) {
-			// TODO create remote repo
-		}
-
-		IProject project = createBaseProject(projectName, location);
-		try {
-			addNature(project);
-
-			/*
-			 * String[] paths = { "schema", //$NON-NLS-1$ "deployment-files/java",
-			 * //$NON-NLS-1$ "clause/java/source/hidden-clause"}; //$NON-NLS-1$
-			 */
-			// addToProjectStructure(project, paths);
-			if (repo.isNewRepo()) {
-				createFile(project, monitor, wizard);
-			}else {
-				openFile(project.getFile(new Path("DECIDE.json")), monitor, wizard);
-			}
-
-		} catch (CoreException e) {
-			e.printStackTrace();
-			project = null;
-		}
-
-		
-
-		return project;
-	}
-
-	private static void createFile(IProject project, IProgressMonitor monitor, NewProjectWizard wizard)
-			throws CoreException {
-		// create a sample file
-		final String fileName = "DECIDE.json";
-		monitor.beginTask("Creating " + fileName, 2);
-
-		final IFile file = project.getFile(new Path(fileName));
-		try {
-			InputStream stream = openContentStream(wizard.getProject());
-			if (file.exists()) {
-				file.setContents(stream, true, true, monitor);
-			} else {
-				file.create(stream, true, monitor);
-			}
-			stream.close();
-		} catch (IOException e) {
-		}
-		monitor.worked(1);
-		openFile(file,monitor, wizard);
-	
-	}
-
-	private static void openFile(IFile file, IProgressMonitor monitor,NewProjectWizard wizard) {
-		monitor.setTaskName("Opening file for editing...");
-		wizard.getShell().getDisplay().asyncExec(new Runnable() {
-			public void run() {
-				IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
-				try {
-					IDE.openEditor(page, file, true);
-				} catch (PartInitException e) {
-				}
-			}
-		});
-		monitor.worked(1);
-	}
-	
-	private static InputStream openContentStream(AppDescriptor project) {
-		
-		
-		String contents = JsonHandler.fromAppDescriptor(project);
-		return new ByteArrayInputStream(contents.getBytes());
-	}
-
-	private static void throwCoreException(String message) throws CoreException {
-		IStatus status = new Status(IStatus.ERROR, "eu.DECIDEh2020.architect.plugin", IStatus.OK, message, null);
-		throw new CoreException(status);
-	}
-
-	/**
-	 * Just do the basics: create a basic project.
-	 *
-	 * @param location
-	 * @param projectName
-	 */
-	private static IProject createBaseProject(String projectName, URI location) {
-		// it is acceptable to use the ResourcesPlugin class
-		IProject newProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
-
-		if (!newProject.exists()) {
-			URI projectLocation = location;
-			IProjectDescription desc = newProject.getWorkspace().newProjectDescription(newProject.getName());
-			if (location != null && ResourcesPlugin.getWorkspace().getRoot().getLocationURI().equals(location)) {
-				projectLocation = null;
-			}
-
-			desc.setLocationURI(projectLocation);
-			try {
-				newProject.create(desc, null);
-				if (!newProject.isOpen()) {
-					newProject.open(null);
-				}
-			} catch (CoreException e) {
-				e.printStackTrace();
-			}
-		}
-
-		return newProject;
-	}
-
-	private static void createFolder(IFolder folder) throws CoreException {
-		IContainer parent = folder.getParent();
-		if (parent instanceof IFolder) {
-			createFolder((IFolder) parent);
-		}
-		if (!folder.exists()) {
-			folder.create(false, true, null);
-		}
-	}
-
-	/**
-	 * Create a folder structure with a parent root, overlay, and a few child
-	 * folders.
-	 *
-	 * @param newProject
-	 * @param paths
-	 * @throws CoreException
-	 */
-	private static void addToProjectStructure(IProject newProject, String[] paths) throws CoreException {
-		for (String path : paths) {
-			IFolder etcFolders = newProject.getFolder(path);
-			createFolder(etcFolders);
-		}
-	}
-
-	private static void addNature(IProject project) throws CoreException {
-		if (!project.hasNature(ProjectNature.NATURE_ID)) {
-			IProjectDescription description = project.getDescription();
-			String[] prevNatures = description.getNatureIds();
-			String[] newNatures = new String[prevNatures.length + 1];
-			System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
-			newNatures[prevNatures.length] = ProjectNature.NATURE_ID;
-			description.setNatureIds(newNatures);
-
-			IProgressMonitor monitor = null;
-			project.setDescription(description, monitor);
-		}
-	}
-
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.descriptorWizard;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jgit.api.errors.GitAPIException;
+import org.eclipse.jgit.api.errors.InvalidRemoteException;
+import org.eclipse.jgit.api.errors.TransportException;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+import eu.DECIDEh2020.appManager.AppDescriptionHelper;
+import eu.DECIDEh2020.appManager.AppManager;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.persistence.GitHandler;
+import eu.DECIDEh2020.appManager.persistence.GitHandler.Repository;
+import eu.DECIDEh2020.architect.plugin.natures.ProjectNature;
+
+public class NewProjectSupport {
+	/**
+	 * Support class for the NewProjectWizard
+	 * 
+	 * For this marvelous project we need to: - create the default Eclipse project -
+	 * add the custom project nature - create the folder structure
+	 *
+	 * @param projectName
+	 * @param location
+	 * @param natureId
+	 * @return
+	 */
+	public static IProject createProject(String projectName, URI location, IProgressMonitor monitor, Repository repo,
+			NewProjectWizard wizard) throws CoreException {
+		Assert.isNotNull(projectName);
+		Assert.isTrue(projectName.trim().length() > 0);
+
+		GitHandler githandler = new GitHandler(repo);
+
+		File dir;
+		if (location == null) {
+			dir = new File(ResourcesPlugin.getWorkspace().getRoot().getLocation() + File.separator + projectName);
+		} else {
+			dir = new File(location + File.separator + projectName);
+		}
+/*
+ * repo is not local & not new: clone from remote
+ * repo is local & not new: open on filesystem
+ * repo is not local & new: create new one on remote? -> TODO: not yet possible
+ * repo is local & new: create new on filesystem
+ */
+		if (!repo.isLocalRepo() && !repo.isNewRepo()) {
+			try {
+				githandler.cloneRepositoryTo(dir.toPath());
+				// Note: the call() returns an opened repository already which needs to be
+				// closed to avoid file handle leaks!
+				System.out.println("Created repository: " + githandler.getRepository().getPath());
+			} catch (InvalidRemoteException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (TransportException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (GitAPIException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		} else if (repo.isLocalRepo() && repo.isNewRepo()) {
+
+			try {
+				githandler.createRepositoryIn(dir.toPath());
+			} catch (IllegalStateException | GitAPIException e1) {
+				// TODO Auto-generated catch block
+				e1.printStackTrace();
+			}
+		} else if (!repo.isLocalRepo() && repo.isNewRepo()) {
+			// TODO create remote repo
+		}
+
+		IProject project = createBaseProject(projectName, location);
+		try {
+			if (repo.isNewRepo()) {
+				createFile(project, monitor, wizard);
+			} else {
+				IFile decide = project.getFile(new Path("DECIDE.json"));
+				if (decide.exists()) {
+					openFile(decide, monitor, wizard);
+				}
+			}
+			//Add nature to Project so symbol is shown & builder applies
+			addNature(project);
+
+		} catch (CoreException e) {
+			e.printStackTrace();
+			project = null;
+		}
+
+		return project;
+	}
+
+	public static AppManager openAppManager() {
+
+		return null;
+
+	}
+
+	private static void createFile(IProject project, IProgressMonitor monitor, NewProjectWizard wizard)
+			throws CoreException {
+		// create a sample file
+		final String fileName = "DECIDE.json";
+		monitor.beginTask("Creating " + fileName, 2);
+
+		final IFile file = project.getFile(new Path(fileName));
+		try {
+			InputStream stream = openContentStream(wizard.getProject());
+			if (file.exists()) {
+				file.setContents(stream, true, true, monitor);
+			} else {
+				file.create(stream, true, monitor);
+			}
+			stream.close();
+		} catch (IOException e) {
+		}
+		monitor.worked(1);
+		openFile(file, monitor, wizard);
+
+	}
+
+	private static void openFile(IFile file, IProgressMonitor monitor, NewProjectWizard wizard) {
+		monitor.setTaskName("Opening file for editing...");
+		wizard.getShell().getDisplay().asyncExec(new Runnable() {
+			public void run() {
+				IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+				try {
+					IDE.openEditor(page, file, true);
+				} catch (PartInitException e) {
+				}
+			}
+		});
+		monitor.worked(1);
+	}
+
+	private static InputStream openContentStream(AppDescription project) throws CoreException {
+
+		String contents = "";
+		try {
+			AppDescriptionHelper adh = AppDescriptionHelper.create(project);
+			contents = adh.getJson();
+		} catch (JsonProcessingException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			throwCoreException("Error reading user generated JSON");
+		}
+		return new ByteArrayInputStream(contents.getBytes());
+	}
+
+	private static void throwCoreException(String message) throws CoreException {
+		IStatus status = new Status(IStatus.ERROR, "eu.DECIDEh2020.architect.plugin", IStatus.OK, message, null);
+		throw new CoreException(status);
+	}
+
+	/**
+	 * Just do the basics: create a basic project.
+	 *
+	 * @param location
+	 * @param projectName
+	 */
+	private static IProject createBaseProject(String projectName, URI location) {
+		// it is acceptable to use the ResourcesPlugin class
+		IProject newProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+
+		if (!newProject.exists()) {
+			URI projectLocation = location;
+			IProjectDescription desc = newProject.getWorkspace().newProjectDescription(newProject.getName());
+			if (location != null && ResourcesPlugin.getWorkspace().getRoot().getLocationURI().equals(location)) {
+				projectLocation = null;
+			}
+
+			desc.setLocationURI(projectLocation);
+			try {
+				newProject.create(desc, null);
+				if (!newProject.isOpen()) {
+					newProject.open(null);
+				}
+			} catch (CoreException e) {
+				e.printStackTrace();
+			}
+		}
+
+		return newProject;
+	}
+
+	private static void createFolder(IFolder folder) throws CoreException {
+		IContainer parent = folder.getParent();
+		if (parent instanceof IFolder) {
+			createFolder((IFolder) parent);
+		}
+		if (!folder.exists()) {
+			folder.create(false, true, null);
+		}
+	}
+
+	/**
+	 * Create a folder structure with a parent root, overlay, and a few child
+	 * folders.
+	 *
+	 * @param newProject
+	 * @param paths
+	 * @throws CoreException
+	 */
+	private static void addToProjectStructure(IProject newProject, String[] paths) throws CoreException {
+		for (String path : paths) {
+			IFolder etcFolders = newProject.getFolder(path);
+			createFolder(etcFolders);
+		}
+	}
+
+	private static void addNature(IProject project) throws CoreException {
+		if (!project.hasNature(ProjectNature.NATURE_ID)) {
+			IProjectDescription description = project.getDescription();
+			String[] prevNatures = description.getNatureIds();
+			String[] newNatures = new String[prevNatures.length + 1];
+			System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
+			newNatures[prevNatures.length] = ProjectNature.NATURE_ID;
+			description.setNatureIds(newNatures);
+
+			IProgressMonitor monitor = null;
+			project.setDescription(description, monitor);
+		}
+	}
+
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectWizard.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectWizard.java
similarity index 73%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectWizard.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectWizard.java
index 3721f622559a182c2c53e45ff7ba631a9b6d1982..9301178074d01ee437a37307eb7372c583688f5c 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectWizard.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/descriptorWizard/NewProjectWizard.java
@@ -1,202 +1,209 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.descriptorWizard;
-
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.ui.INewWizard;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
-import org.eclipse.core.runtime.*;
-import java.net.URI;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.ISelection;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.ui.*;
-
-import eu.DECIDEh2020.architect.appManager.models.AppDescriptor;
-import eu.DECIDEh2020.architect.appManager.persistence.GitHandler.Repository;
-
-
-/**
- * This is a sample new wizard. Its role is to create a new file resource in the
- * provided container. If the container resource (a folder or a project) is
- * selected in the workspace when the wizard is opened, it will accept it as the
- * target container. The wizard creates one file with the extension "mpe". If a
- * sample multi-page editor (also available as a template) is registered for the
- * same extension, it will be able to open it.
- */
-
-public class NewProjectWizard extends Wizard implements INewWizard, IExecutableExtension {
-	@SuppressWarnings("unused")
-	private ISelection selection;
-	@SuppressWarnings("unused")
-	private IConfigurationElement _configurationElement;
-	private MicroservicePage microservicePage;
-	private NewProjectPage projectPage;
-	private ConfigPage configPage;
-	private MonolithPage monolithPage;
-	private AppDescriptor project;
-
-	/**
-	 * Constructor for SampleNewWizard.
-	 */
-	public NewProjectWizard() {
-		super();
-		setNeedsProgressMonitor(true);
-		setWindowTitle("DECIDE project wizard");
-		project = new AppDescriptor();
-	}
-
-	public AppDescriptor getProject() {
-		return project;
-	}
-
-	/**
-	 * Adding the page to the wizard.
-	 */
-
-	public void addPages() {
-		super.addPages();
-
-		projectPage = new NewProjectPage("From Scratch Project Wizard", project);
-		projectPage.setTitle("New DECIDE Project");
-		projectPage.setDescription("Create a new DECIDE project.");
-		addPage(projectPage);
-
-		configPage = new ConfigPage(project);
-		addPage(configPage);
-
-		microservicePage = new MicroservicePage(project);
-		addPage(microservicePage);
-		monolithPage = new MonolithPage();
-		addPage(monolithPage);
-
-	}
-
-	/**
-	 * This method is called when 'Finish' button is pressed in the wizard. We will
-	 * create an operation and run it using wizard as execution context.
-	 */
-	public boolean performFinish() {
-
-		final String name = projectPage.getProjectName();
-		URI loc = null;
-		if (!projectPage.useDefaults()) {
-			loc = projectPage.getLocationURI();
-			System.err.println("location: " + loc.toString()); //$NON-NLS-1$
-		} // else location == null
-		final URI location = loc;
-		final Repository repo = projectPage.getRepository();
-		
-		final NewProjectWizard wizard = this;
-		IRunnableWithProgress op = new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) throws InvocationTargetException {
-				try {
-					NewProjectSupport.createProject(name, location, monitor, repo, wizard);
-				} catch (CoreException e) {
-					throw new InvocationTargetException(e);
-				} finally {
-					monitor.done();
-				}
-			}
-		};
-		try {
-			getContainer().run(true, false, op);
-		} catch (InterruptedException e) {
-			return false;
-		} catch (InvocationTargetException e) {
-			e.printStackTrace();
-			Throwable realException = e.getTargetException();
-			MessageDialog.openError(getShell(), "Error", realException.getMessage());
-			StringWriter sw = new StringWriter();
-			realException.printStackTrace(new PrintWriter(sw));
-			String exceptionAsString = sw.toString();
-			MessageDialog.openError(getShell(), "Error", exceptionAsString);
-			return false;
-		}
-
-		
-		
-
-		BasicNewProjectResourceWizard.updatePerspective(_configurationElement);
-
-		return true && project.getMicroservices().size() > 0;
-	}
-
-	
-	
-	@Override
-	public IWizardPage getNextPage(IWizardPage currentPage) {
-
-		
-		if (currentPage == configPage) {
-			
-			microservicePage.setDescription("set Microservices: ");
-			microservicePage.setMicroservices();
-			return microservicePage;
-		} else if (currentPage == projectPage) {
-			Repository repo = projectPage.getRepository();
-			if (!repo.isNewRepo()) {
-				configPage.setPageComplete(true);
-				if(!canFinish()) {
-				getContainer().updateButtons();}
-				//System.out.println("Config Page Complete: "+configPage.isPageComplete());
-				
-				return null;
-			}else {
-				configPage.setPageComplete(project!=null && !project.getMicroservices().isEmpty());
-				
-				//System.out.println("Config Page Complete: "+configPage.isPageComplete());
-				return configPage;
-			}
-			
-		}
-		return null;
-	}
-	
-
-	/**
-	 * We will initialize file contents with a sample text.
-	 */
-
-	/**
-	 * We will accept the selection in the workbench to see if we can initialize
-	 * from it.
-	 * 
-	 * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection)
-	 */
-	public void init(IWorkbench workbench, IStructuredSelection selection) {
-		this.selection = selection;
-		IPerspectiveRegistry ipr = workbench.getPerspectiveRegistry();
-		for (IPerspectiveDescriptor ipd : ipr.getPerspectives()) {
-			//System.out.println("Label: " + ipd.getLabel() + " - ID: " + ipd.getId() + " - Description: " + ipd.getDescription());
-		}
-		
-	}
-
-	@Override
-	public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
-			throws CoreException {
-
-		_configurationElement = config;
-
-	}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.descriptorWizard;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.core.runtime.*;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelection;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+
+import org.eclipse.ui.*;
+
+import eu.DECIDEh2020.appManager.AppDescriptionFactory;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.persistence.GitHandler.Repository;
+
+
+
+/**
+ * This is a decide new wizard. Its role is to create a new project and either 
+ * clone or create a new appdescription file while asking for infos how that 
+ * appdescription should be initialized
+ * It will then open the decide multi-page editor with the created decide.json
+ * 
+ */
+
+public class NewProjectWizard extends Wizard implements INewWizard, IExecutableExtension {
+	@SuppressWarnings("unused")
+	private ISelection selection;
+	private IConfigurationElement _configurationElement;
+	private MicroservicePage microservicePage;
+	private NewProjectPage projectPage;
+	private ConfigPage configPage;
+	private MonolithPage monolithPage;
+	private AppDescription project;
+
+	/**
+	 * Constructor for NewProjectWizard.
+	 */
+	public NewProjectWizard() {
+		super();
+		setNeedsProgressMonitor(true);
+		setWindowTitle("DECIDE project wizard");
+		try {
+			project= getProject();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public AppDescription getProject() {
+		if (project==null) {
+			try {
+				return AppDescriptionFactory.createAppDescription("DECIDE");
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return project;
+	}
+
+	/**
+	 * Adding the pages to the wizard.
+	 */
+
+	public void addPages() {
+		super.addPages();
+
+		projectPage = new NewProjectPage("From Scratch Project Wizard", project);
+		projectPage.setTitle("New DECIDE Project");
+		projectPage.setDescription("Create a new DECIDE project.");
+		addPage(projectPage);
+
+		configPage = new ConfigPage(project);
+		addPage(configPage);
+
+		microservicePage = new MicroservicePage(project);
+		addPage(microservicePage);
+		monolithPage = new MonolithPage();
+		addPage(monolithPage);
+	}
+
+	/**
+	 * This method is called when 'Finish' button is pressed in the wizard. We will
+	 * create an operation and run it using wizard as execution context.
+	 */
+	public boolean performFinish() {
+
+		final String name = projectPage.getProjectName();
+		URI loc = null;
+		if (!projectPage.useDefaults()) {
+			loc = projectPage.getLocationURI();
+			System.err.println("location: " + loc.toString()); //$NON-NLS-1$
+		} // else location == null
+		final URI location = loc;
+		final Repository repo = projectPage.getRepository();
+		
+		final NewProjectWizard wizard = this;
+		IRunnableWithProgress op = new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor) throws InvocationTargetException {
+				try {
+					NewProjectSupport.createProject(name, location, monitor, repo, wizard);
+				} catch (CoreException e) {
+					throw new InvocationTargetException(e);
+				} finally {
+					monitor.done();
+				}
+			}
+		};
+		try {
+			getContainer().run(true, false, op);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+			return false;
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+			Throwable realException = e.getTargetException();
+			MessageDialog.openError(getShell(), "Error", realException.getMessage());
+			StringWriter sw = new StringWriter();
+			realException.printStackTrace(new PrintWriter(sw));
+			//String exceptionAsString = sw.toString();
+			//MessageDialog.openError(getShell(), "Error", exceptionAsString);
+			return false;
+		}
+
+		//switches to a new perspective. Should only be used, 
+		//when the decide perspective is more useful than the other ones
+		//TODO: finish decide perspective
+		//BasicNewProjectResourceWizard.updatePerspective(_configurationElement);
+
+		return true;
+	}
+
+	
+	/**
+	 * This method is called when to determine the next wizard page
+	 * returns null if there is no next page
+	 */
+	@Override
+	public IWizardPage getNextPage(IWizardPage currentPage) {
+
+		
+		if (currentPage == configPage) {
+			microservicePage.setMicroservices();
+			return microservicePage;
+		} else if (currentPage == projectPage) {
+			Repository repo = projectPage.getRepository();
+			if (!repo.isNewRepo()) {
+				configPage.setPageComplete(true);
+				if(!canFinish()) {
+				getContainer().updateButtons();}
+				//System.out.println("Config Page Complete: "+configPage.isPageComplete());
+				
+				return null;
+			}else {
+				configPage.setPageComplete(project!=null && !project.getMicroservices().isEmpty());
+				
+				//System.out.println("Config Page Complete: "+configPage.isPageComplete());
+				return configPage;
+			}
+			
+		}
+		return null;
+	}
+	
+
+	/**
+	 * We will accept the selection in the workbench to see if we can initialize
+	 * from it.
+	 * 
+	 * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection)
+	 */
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+		this.selection = selection;
+		//IPerspectiveRegistry ipr = workbench.getPerspectiveRegistry();
+		//for (IPerspectiveDescriptor ipd : ipr.getPerspectives()) {
+			//System.out.println("Label: " + ipd.getLabel() + " - ID: " + ipd.getId() + " - Description: " + ipd.getDescription());
+		//}
+		
+	}
+
+	@Override
+	public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
+			throws CoreException {
+
+		_configurationElement = config;
+
+	}
 }
\ No newline at end of file
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/IPageBuilder.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/IPageBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..e40448cb69d0964b9d752e27636fcd53f12d7c81
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/IPageBuilder.java
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.editor;
+
+import org.eclipse.swt.widgets.Composite;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+
+public interface IPageBuilder {
+    public Page getPage(Composite parent, int style, AppDescription appdescription);
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditor.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditor.java
similarity index 64%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditor.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditor.java
index 6453cf35dc44c0781f41249d697048bfbd24122b..fe987a44a61e7e26708d04d9c68ea8d3971af903 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditor.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditor.java
@@ -1,29 +1,35 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.editor;
-
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.editor;
 
+import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
-
-import org.apache.jena.rdf.model.Resource;
+import java.util.List;
+
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IResourceChangeListener;
 import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.*;
@@ -34,18 +40,19 @@ import org.eclipse.ui.ide.IDE;
 import org.eclipse.ui.views.contentoutline.*;
 import org.eclipse.wst.json.core.contenttype.ContentTypeIdForJSON;
 import org.eclipse.wst.sse.ui.StructuredTextEditor;
+import org.eclipse.swt.custom.ScrolledComposite;
 
-import com.google.gson.JsonSyntaxException;
-
-import eu.DECIDEh2020.architect.appManager.persistence.JsonHandler;
-import eu.DECIDEh2020.architect.appManager.persistence.JsonHandler.AppDescriptorWrapper;
-import eu.DECIDEh2020.architect.appManager.models.AppDescriptor;
-import eu.DECIDEh2020.architect.appManager.models.Microservice;
-import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
-import eu.DECIDEh2020.architect.plugin.layoutComponents.PatternPageComposite;
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+import eu.DECIDEh2020.appManager.AppDescriptionFactory;
+import eu.DECIDEh2020.appManager.AppDescriptionHelper;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.architect.plugin.Activator;
+import eu.DECIDEh2020.architect.plugin.layoutComponents.NfrPageComposite;
 import eu.DECIDEh2020.architect.plugin.layoutComponents.ProjectPageComposite;
 
 
+
 /**
  * An example showing how to create a multi-page editor.
  * This example has 3 pages:
@@ -55,20 +62,22 @@ import eu.DECIDEh2020.architect.plugin.layoutComponents.ProjectPageComposite;
  * <li>page 2 shows the words in page 0 in sorted order
  * </ul>
  */
-public class MultiPageEditor extends MultiPageEditorPart implements IResourceChangeListener{
-
+public class MultiPageEditor extends MultiPageEditorPart implements IResourceChangeListener {
+	private static final String EXTENSION_ID ="eu.DECIDEh2020.architect.extension";
+	
 	/** The text editor used in the json page. */
 	private StructuredTextEditor editor;
 
-	private AppDescriptor project;
-	private Patterns patterns = Patterns.createDefaultPatterns();
+	private AppDescription project;
+	private int pageIndex=1;
+	
 
 	/** The composite used for the project page */
 	private ProjectPageComposite ppage;
-	
-	private PatternPageComposite patPage;
-
+	private NfrPageComposite nfrPage;
+	private List<Page> pages = new ArrayList<Page>();
 	private IContentOutlinePage contentOutlinePage;
+	private File file= null;
 	/**
 	 * Creates a multi-page editor example.
 	 */
@@ -76,6 +85,47 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 		super();
 		ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
 	}
+		
+	//add all pages from other plugins
+	void evaluateExtensions() {
+		
+		IConfigurationElement[] config = Platform.getExtensionRegistry().getConfigurationElementsFor(EXTENSION_ID);
+		evalConfigs(config);
+	}
+	void evalConfigs(IConfigurationElement[] config) {
+		System.out.println("configs: " + config.length);
+		try {
+            for (IConfigurationElement e : config) {
+                System.out.println("Evaluating extension");
+                final Object o =
+                        e.createExecutableExtension("class");
+                final String title = e.getAttribute("PageName");
+                
+                if (o instanceof IPageBuilder) {
+                	ISafeRunnable runnable = new ISafeRunnable() {
+                        @Override
+                        public void handleException(Throwable e) {
+                            System.out.println("Exception in client");
+                        }
+
+                        @Override
+                        public void run() throws Exception {
+                           Page page = ((IPageBuilder) o).getPage(getContainer(),SWT.NONE, project);
+                           pages.add(page);
+                           
+                           int index = addPage(page);
+                           page.setIndex(index);
+                   		setPageText(index, title);
+                        }
+                    };
+                    SafeRunner.run(runnable);
+                }
+            }
+        } catch (CoreException ex) {
+            System.out.println(ex.getMessage());
+        }
+	}
+	
 	/**
 	 * Creates the page of the multi-page editor,
 	 * which contains a json editor.
@@ -83,6 +133,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 	void createJSONPage() {
 		try {
 			editor = new StructuredTextEditor();
+			
 			int index = addPage(editor, getEditorInput());
 			setPageText(index, editor.getTitle());
 
@@ -98,7 +149,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 	}
 	/**
 	 * Creates page 1 of the multi-page editor,
-	 * which allows you to change the font used in page 2.
+	 * which contains the project overview.
 	 */
 	void createProjectPage() {
 
@@ -109,24 +160,29 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 	}
 	/**
 	 * Creates page 2 of the multi-page editor,
-	 * which shows the pattern recommender.
+	 * which shows the NFR Editor.
 	 */
 	void createPatternPage() {
 
-		patPage = new PatternPageComposite(getContainer(), SWT.NONE,patterns);
+		nfrPage = new NfrPageComposite(getContainer(), project);
 		
-
-		int index = addPage(patPage);
-		setPageText(index, "Patterns");
+		int index = addPage(nfrPage);
+		setPageText(index, "NFR Editor");
 	}
+	
 	/**
 	 * Creates the pages of the multi-page editor.
 	 */
 	protected void createPages() {
+		//add editor pages
 		createJSONPage();
 		createProjectPage();
 		createPatternPage();
+		//pages from other plugins
+		evaluateExtensions();
+		//set project overview as startpage
 		setActivePage(1);
+		pageIndex=1;
 		refreshOutlineView();
 	}
 	/**
@@ -142,6 +198,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 	 * Saves the multi-page editor's document.
 	 */
 	public void doSave(IProgressMonitor monitor) {
+		toJSON();
 		getEditor(0).doSave(monitor);
 	}
 	/**
@@ -162,6 +219,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 		setActivePage(0);
 		IDE.gotoMarker(getEditor(0), marker);
 	}
+	
 	/**
 	 * The <code>MultiPageEditorExample</code> implementation of this method
 	 * checks that the input is an instance of <code>IFileEditorInput</code>.
@@ -171,10 +229,19 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 		if (!(editorInput instanceof IFileEditorInput))
 			throw new PartInitException("Invalid Input: Must be IFileEditorInput");
 		super.init(site, editorInput);
+		
+		 IFileEditorInput finput = (IFileEditorInput) editorInput;
+		 file=finput.getFile().getRawLocation().makeAbsolute().toFile();
+		 if(!file.exists()) {
+			 throw new PartInitException("File does not exist");
+		 }
+		// manager = AppManager.open("", "", file);
 	}
-	/* (non-Javadoc)
-	 * Method declared on IEditorPart.
-	 */
+	
+	/** 
+	 * Allows saving on every page of the editor. However only the content of the 
+	 * json page is saved which is written when switched to that page
+	 **/
 	public boolean isSaveAsAllowed() {
 		return true;
 	}
@@ -183,24 +250,36 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 	 * Calculates the contents of the then visible page when the it is activated.
 	 */
 	protected void pageChange(int newPageIndex) {
+		//if we switch _from_ the JSON, load it into the appDescription class
 		super.pageChange(newPageIndex);
-
+		if (pageIndex==0) {
+			fromJSON();
+		}
+		
 		switch (newPageIndex) {
 		case 0:
+			//if we switch _to_ JSON, load from ApPDesscription Object toJSON
 			toJSON();
 			break;
 		case 1:
-			fromJSON();
 			ppage.refreshContent(project);
 			break;
 		case 2:
-			toJSON();
-			recomputeNFRs();
-			
+			nfrPage.refreshContent(project);
 			break;
+		default:
+			//we are switching to a page from another plugin
+			Page page;
+			try {
+				page = (Page) getControl(newPageIndex);
+				page.open(project);
+			} catch (ClassCastException e) {
+				Activator.getDefault().getLog().log(new Status(Status.ERROR, Activator.PLUGIN_ID, "Open project page.", e));
+			}			
 		}
-
-	}
+		pageIndex= newPageIndex;
+	}
+	
 	/**
 	 * Closes all project files on project close.
 	 */
@@ -220,13 +299,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 		}
 	}
 	
-	void recomputeNFRs() {
-		java.util.List<Resource> nfrs = new ArrayList<Resource>();;
-		for(Microservice m: project.getMicroservices()) {
-			nfrs.addAll(m.getNfrs());
-		}
-		patPage.updatePatterns(nfrs);
-	}
+	
 	
 	
 	
@@ -234,40 +307,19 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 	 * Converts JSON into a project Object
 	 */
 	void fromJSON() {
-		
-		
-		
 		String editorText = editor.getDocumentProvider().getDocument(editor.getEditorInput()).get();
-		AppDescriptorWrapper app = null;
-		try {
-			app = JsonHandler.toAppDescriptor(editorText);
-		} catch (JsonSyntaxException e) {
-			// TODO Auto-generated catch block
-			//e.printStackTrace();
-			MessageDialog.openWarning(getSite().getShell(), "JSON file corrupt",e.getLocalizedMessage());
-		
-		}
-		if (app != null) {
-			
-			if( app.isOldVersion()){
-				MessageDialog.openWarning(getSite().getShell(), "Older version detected",
-						"The application description file has a different Versionnumber than the one used in this version of "
-						+ "the DECIDE plugin. This means, that some fields might be missing or that some pages of the editor "
-						+ "might not work correctly. "
-						+ "\nFile version is: " + app.getFileVersion() 
-						+ "\nPlugin uses:     "+AppDescriptor.plugin_version +".");
+			try {
+				
+				project = AppDescriptionFactory.fromJson(editorText);
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
 			}
-			
-			
-			project = app.getAppDescriptor();
-		}
-		if (project == null) {
+		if (project == null) {
+
 			System.out.println("project is null after reading JSON");
 		}
-		
-		
-		
-		
+
 	}
 
 
@@ -277,14 +329,21 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 	 */
 	void toJSON() {
 		if (project != null) {
-
+			
 			// convert app descriptor object to json string
-			String contents = JsonHandler.fromAppDescriptor(project);
+			String contents = "";
+			try {
+				AppDescriptionHelper adh = AppDescriptionHelper.create(project);
+				contents = adh.getJson();
+			} catch (JsonProcessingException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
 			// get editor content
 			String editorText = editor.getDocumentProvider().getDocument(editor.getEditorInput()).get();
 
 			// if new json string is different from editor content, replace old with new
-			if (contents != editorText)
+			if (!contents.equals(editorText))
 				editor.getDocumentProvider().getDocument(editor.getEditorInput()).set(contents);
 
 		}
@@ -332,13 +391,7 @@ public class MultiPageEditor extends MultiPageEditorPart implements IResourceCha
 		}
 		return site;
 	}
-	/**
-	 * Sorts the words in page 0, and shows them in page 2.
-	 */
-	void sortWords() {
 
-		
-	}
 
 	public void refreshOutlineView() {
 		//get the activePage
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditorContributor.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditorContributor.java
similarity index 100%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditorContributor.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/MultiPageEditorContributor.java
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/Page.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/Page.java
new file mode 100644
index 0000000000000000000000000000000000000000..6005fb5a22fa8357dfe0e20f0cb41aaa54cc370e
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/editor/Page.java
@@ -0,0 +1,35 @@
+package eu.DECIDEh2020.architect.plugin.editor;
+
+import org.eclipse.swt.widgets.Composite;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+
+// Used as Interface for all Pages from other plugins that need to be added to the main editor
+public abstract class Page extends Composite {
+	
+	private int index;
+	
+	public Page(Composite parent, int style,AppDescription appdescription) {
+		super(parent, style);
+		// TODO Auto-generated constructor stub
+	}
+
+	public abstract void open(AppDescription appdescription);
+
+	/**
+	 * @return the index
+	 */
+	public int getIndex() {
+		return index;
+	}
+
+	/**
+	 * @param index the index to set
+	 */
+	public void setIndex(int index) {
+		this.index = index;
+	}
+	
+	
+	
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ContentChangeListener.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ContentChangeListener.java
similarity index 96%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ContentChangeListener.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ContentChangeListener.java
index 94d0ddc441548bce04fc9f8b98e2411a15149282..6395d86efaa77326a4eb444879e190ec897e87d6 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ContentChangeListener.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ContentChangeListener.java
@@ -1,19 +1,19 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-public interface ContentChangeListener {
-
-		public void contentChanged();
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+public interface ContentChangeListener {
+
+		public void contentChanged();
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceComposite.java
similarity index 75%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceComposite.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceComposite.java
index 46e58ce1968542ab2168cfcc2e4878a667c7c9cc..303d4ab419b0151a8fadfac3708f14534c0ead4b 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceComposite.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceComposite.java
@@ -1,375 +1,316 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.wb.swt.SWTResourceManager;
-
-import eu.DECIDEh2020.architect.appManager.models.Microservice;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.apache.jena.rdf.model.Resource;
-import org.eclipse.core.databinding.DataBindingContext;
-import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.core.databinding.beans.PojoProperties;
-
-public class MicroserviceComposite extends Composite {
-	private DataBindingContext m_bindingContext;
-
-	private static class DependecyLabelProvider extends LabelProvider {
-		public Image getImage(Object element) {
-			return null;
-		}
-
-		public String getText(Object element) {
-			return (String) element;
-		}
-	}
-
-	private static class DependecyContentProvider implements IStructuredContentProvider {
-		public Object[] getElements(Object inputElement) {
-			return ((Microservice) inputElement).getDependencies().toArray();
-		}
-
-		public void dispose() {
-		}
-
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		}
-	}
-
-	Color background = SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND);
-	private Button btnStateless;
-	private Microservice microservice;
-	private java.util.List<ContentChangeListener> contentChangeListeners = new ArrayList<ContentChangeListener>();
-	private Text txtAddDependency;
-	private Text msRepo;
-
-	
-	
-	
-	/**
-	 * Create the composite.
-	 * 
-	 * @param parent
-	 * @param style
-	 */
-	public MicroserviceComposite(Composite parent, Microservice microservice, Color background) {
-		super(parent, SWT.None);
-		this.background = background;
-		setBackground(background);
-		this.microservice = microservice;
-
-		this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
-		this.setLayout(new FillLayout(SWT.HORIZONTAL));
-
-		Group grpMicroservice = new Group(this, SWT.NONE);
-		grpMicroservice.setBackground(background);
-		grpMicroservice.setText(microservice.getName());
-		grpMicroservice.setLayout(new FillLayout(SWT.HORIZONTAL));
-
-		Composite composite = new Composite(grpMicroservice, SWT.NONE);
-		composite.setBackground(background);
-		GridLayout gl_composite = new GridLayout(2, false);
-		gl_composite.marginLeft = 10;
-		gl_composite.marginRight = 10;
-		composite.setLayout(gl_composite);
-
-		Label lblNewLabel = new Label(composite, SWT.NONE);
-		lblNewLabel.setBackground(background);
-		lblNewLabel.setText("Microservice Name:");
-
-		Text textMsvName = new Text(composite, SWT.BORDER);
-		textMsvName.addKeyListener(new KeyAdapter() {
-			@Override
-			public void keyReleased(KeyEvent e) {
-				microservice.setName(textMsvName.getText());
-				grpMicroservice.setText(microservice.getName());
-				setContentChanged();
-			}
-		});
-		textMsvName.setText(grpMicroservice.getText());
-		textMsvName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-
-		Label lblProgrammingLanguage = new Label(composite, SWT.NONE);
-		lblProgrammingLanguage.setBackground(background);
-		lblProgrammingLanguage.setText("Programming Language:");
-
-		Combo comboProgrammingLanguage = new Combo(composite, SWT.NONE);
-		comboProgrammingLanguage.addKeyListener(new KeyAdapter() {
-
-			@Override
-			public void keyReleased(KeyEvent e) {
-				microservice.setLanguage(comboProgrammingLanguage.getText());
-			}
-		});
-
-		comboProgrammingLanguage.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		comboProgrammingLanguage.setItems(new String[] { "Java", "Go", "Ruby" });
-
-		// set combobox to language. if language not in Combobox, add it
-		String msvLang = microservice.getLanguage();
-		int index = -1;
-		if (msvLang != null && !msvLang.isEmpty()) {
-			index = comboProgrammingLanguage.indexOf(msvLang);
-		}
-		if (index >= 0) {
-			comboProgrammingLanguage.select(index);
-		} else if (index == -1 && !msvLang.isEmpty()) {
-			comboProgrammingLanguage.add(msvLang, 0);
-			comboProgrammingLanguage.select(0);
-		}
-
-		comboProgrammingLanguage.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-			
-				microservice.setLanguage(comboProgrammingLanguage.getText());
-			}
-		});
-
-		Label lblType = new Label(composite, SWT.NONE);
-		lblType.setBackground(background);
-		lblType.setText("Type:");
-
-		Combo comboType = new Combo(composite, SWT.READ_ONLY);
-		comboType.setItems(new String[] { "Backend", "Database" });
-		String msvType = microservice.getType();
-		if (msvType != null && !msvType.isEmpty()) {
-			comboType.select(comboType.indexOf(msvType));
-		}
-
-		comboType.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-
-				microservice.setType(comboType.getText());
-			}
-		});
-
-		comboType.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-
-		Label lblNfr = new Label(composite, SWT.NONE);
-		lblNfr.setBackground(background);
-		lblNfr.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
-		lblNfr.setText("NFRs:");
-
-		NfrListViewer nfrList = new NfrListViewer(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
-
-		// select all nfrs in this microservice
-		if (microservice.getNfrs().size() != 0) {
-			
-			nfrList.addSelection(new ArrayList<Resource>(microservice.getNfrs()));
-		}
-
-		nfrList.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				HashSet<Resource> mscNfrs = new HashSet<Resource>();
-				for (Resource r : nfrList.getSelection()) {
-					try {
-						mscNfrs.add(r);
-					} catch (IllegalArgumentException e1) {
-						// TODO Auto-generated catch block
-						e1.printStackTrace();
-					}
-				}
-				microservice.setNfrs(mscNfrs);
-			}
-		});
-
-		GridData gd_nfrList = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
-		gd_nfrList.widthHint = 448;
-		nfrList.setLayoutData(gd_nfrList);
-
-		Label lblDependencies = new Label(composite, SWT.NONE);
-		lblDependencies.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
-		lblDependencies.setText("Dependencies:");
-		lblDependencies.setBackground(background);
-
-		Composite dependenciesComposite = new Composite(composite, SWT.NONE);
-		GridLayout gl_dependenciesComposite = new GridLayout(2, false);
-		gl_dependenciesComposite.marginLeft = -5;
-		dependenciesComposite.setLayout(gl_dependenciesComposite);
-		dependenciesComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
-		dependenciesComposite.setBackground(background);
-
-		ListViewer listViewer = new ListViewer(dependenciesComposite, SWT.BORDER | SWT.V_SCROLL);
-		List dependencyList = listViewer.getList();
-
-		GridData gd_dependencyList = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
-		gd_dependencyList.minimumHeight = 85;
-		gd_dependencyList.heightHint = 85;
-		dependencyList.setLayoutData(gd_dependencyList);
-		listViewer.setLabelProvider(new DependecyLabelProvider());
-		listViewer.setContentProvider(new DependecyContentProvider());
-		listViewer.setInput(microservice);
-
-		Composite DepBttnComposite = new Composite(dependenciesComposite, SWT.NONE);
-		DepBttnComposite.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
-		FillLayout fl_DepBttnComposite = new FillLayout(SWT.VERTICAL);
-		fl_DepBttnComposite.spacing = 5;
-		DepBttnComposite.setLayout(fl_DepBttnComposite);
-		DepBttnComposite.setBackground(background);
-
-		Button btnRemove = new Button(DepBttnComposite, SWT.NONE);
-		btnRemove.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				if (dependencyList.getSelectionCount() == 1) {
-					int i= dependencyList.getSelectionIndex();
-					ArrayList<String> deps = microservice.getDependencies();
-					deps.remove(i);
-					listViewer.refresh();
-				}
-			}
-		});
-		btnRemove.setText("Remove");
-
-		txtAddDependency = new Text(dependenciesComposite, SWT.BORDER);
-		txtAddDependency.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-
-		Button btnAdd = new Button(dependenciesComposite, SWT.NONE);
-		btnAdd.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				microservice.addDependency(txtAddDependency.getText());
-				listViewer.refresh();
-				txtAddDependency.setText("");
-			}
-		});
-		btnAdd.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-		btnAdd.setText("Add");
-
-		dependencyList.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				if (dependencyList.getSelectionCount() == 1) {
-					btnRemove.setEnabled(true);
-				}else {
-					btnRemove.setEnabled(false);
-				}
-			}
-		});
-
-		new Label(composite, SWT.NONE);
-
-		btnStateless = new Button(composite, SWT.CHECK);
-		btnStateless.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-		btnStateless.setSelection(microservice.isStateless());
-		btnStateless.setBackground(background);
-		btnStateless.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				microservice.setStateless(btnStateless.getSelection());
-			}
-		});
-		btnStateless.setText("Stateless");
-
-		Label lblMsRepo = new Label(composite, SWT.NONE);
-		lblMsRepo.setBackground(background);
-		lblMsRepo.setText("Microservice Repo : ");
-
-		msRepo = new Text(composite, SWT.BORDER);
-		msRepo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		new Label(composite, SWT.NONE);
-/*
-		Composite composite_msRepo_buttons = new Composite(composite, SWT.NONE);
-		composite_msRepo_buttons.setBackground(background);
-		FillLayout fl_composite_msRepo_buttons = new FillLayout(SWT.HORIZONTAL);
-		fl_composite_msRepo_buttons.spacing = 5;
-		composite_msRepo_buttons.setLayout(fl_composite_msRepo_buttons);
-
-		Button btnAddNewRepo = new Button(composite_msRepo_buttons, SWT.NONE);
-		btnAddNewRepo.setEnabled(false);
-		btnAddNewRepo.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				NewMscvWizard mscw = new NewMscvWizard();
-				WizardDialog dialog = new WizardDialog(getShell(), mscw);
-				if (dialog.open() == Window.OK) {
-					msRepo.setText(mscw.getProject());
-				} else {
-					msRepo.setText("");
-
-				}
-
-			}
-		});
-		btnAddNewRepo.setText("Add New Microservice");*/
-		m_bindingContext = initDataBindings();
-		
-		
-	}
-
-	/**
-	 * Create the composite.
-	 * 
-	 * @param parent
-	 * @param microservice
-	 * @wbp.parser.constructor
-	 */
-	public MicroserviceComposite(Composite parent, Microservice microservice) {
-		this(parent, microservice, SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
-
-	}
-
-	@Override
-	protected void checkSubclass() {
-		// Disable the check that prevents subclassing of SWT components
-	}
-
-	public void addContentChangeListener(ContentChangeListener contentChangedListener) {
-		contentChangeListeners.add(contentChangedListener);
-	}
-
-	public void setContentChanged() {
-		for (ContentChangeListener ccl : contentChangeListeners) {
-			ccl.contentChanged();
-		}
-	}
-
-	protected DataBindingContext initDataBindings() {
-		DataBindingContext bindingContext = new DataBindingContext();
-		//
-		IObservableValue observeTextMsRepoObserveWidget = WidgetProperties.text(SWT.Modify).observe(msRepo);
-		IObservableValue repoMicroserviceObserveValue = PojoProperties.value("repo").observe(microservice);
-		bindingContext.bindValue(observeTextMsRepoObserveWidget, repoMicroserviceObserveValue, null, null);
-		//
-		return bindingContext;
-	}
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import eu.DECIDEh2020.appManager.models.Microservice;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.vocabulary.DCTerms;
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.core.databinding.beans.PojoProperties;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+//composite for a single Microservice
+public class MicroserviceComposite extends Composite {
+	private DataBindingContext m_bindingContext;
+
+	private static class DependecyLabelProvider extends LabelProvider {
+		public Image getImage(Object element) {
+			return null;
+		}
+
+		public String getText(Object element) {
+			return (String) element;
+		}
+	}
+
+	private static class DependecyContentProvider implements IStructuredContentProvider {
+		public Object[] getElements(Object inputElement) {
+			return ((Microservice) inputElement).getDependencies().toArray();
+		}
+
+		public void dispose() {
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+
+	private Color background = SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND);
+	private Button btnStateless;
+	private Microservice microservice;
+	private java.util.List<ContentChangeListener> contentChangeListeners = new ArrayList<ContentChangeListener>();
+	private Text txtAddDependency;
+	private Text msRepo;
+private AppDescription appDescription;
+	
+	
+	
+	/**
+	 * Create the composite.
+	 * 
+	 * @param parent
+	 * @param microservice
+	 * @param background
+	 * @param appDescription 
+	 */
+	public MicroserviceComposite(Composite parent, Microservice microservice, Color background, AppDescription appDescription) {
+		super(parent, SWT.None);
+		this.background = background;
+		setBackground(background);
+		this.microservice = microservice;
+		this.appDescription = appDescription;
+
+		this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
+		this.setLayout(new FillLayout(SWT.HORIZONTAL));
+
+		Group grpMicroservice = new Group(this, SWT.NONE);
+		grpMicroservice.setBackground(background);
+		grpMicroservice.setText(microservice.getName()!=null?microservice.getName():"");
+		grpMicroservice.setLayout(new FillLayout(SWT.HORIZONTAL));
+
+		Composite composite = new Composite(grpMicroservice, SWT.NONE);
+		composite.setBackground(background);
+		GridLayout gl_composite = new GridLayout(2, false);
+		gl_composite.marginLeft = 10;
+		gl_composite.marginRight = 10;
+		composite.setLayout(gl_composite);
+
+		Label lblNewLabel = new Label(composite, SWT.NONE);
+		lblNewLabel.setBackground(background);
+		lblNewLabel.setText("Microservice Name:");
+
+		Text textMsvName = new Text(composite, SWT.BORDER);
+		textMsvName.addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyReleased(KeyEvent e) {
+				microservice.setName(textMsvName.getText());
+				grpMicroservice.setText(microservice.getName());
+				setContentChanged();
+			}
+		});
+		textMsvName.setText(grpMicroservice.getText());
+		textMsvName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+		Label lblProgrammingLanguage = new Label(composite, SWT.NONE);
+		lblProgrammingLanguage.setBackground(background);
+		lblProgrammingLanguage.setText("Programming Language:");
+
+		Combo comboProgrammingLanguage = new Combo(composite, SWT.NONE);
+		comboProgrammingLanguage.addKeyListener(new KeyAdapter() {
+
+			@Override
+			public void keyReleased(KeyEvent e) {
+				microservice.setProgrammingLanguage(comboProgrammingLanguage.getText());
+			}
+		});
+
+		comboProgrammingLanguage.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		comboProgrammingLanguage.setItems(new String[] { "Java", "Go", "Ruby" });
+
+		// set combobox to language. if language not in Combobox, add it
+		String msvLang = microservice.getProgrammingLanguage();
+		int index = -1;
+		if (msvLang != null && !msvLang.isEmpty()) {
+			index = comboProgrammingLanguage.indexOf(msvLang);
+		}
+		if (index >= 0) {
+			comboProgrammingLanguage.select(index);
+		} else if (index == -1 && msvLang != null && !msvLang.isEmpty()) {
+			comboProgrammingLanguage.add(msvLang, 0);
+			comboProgrammingLanguage.select(0);
+		}
+
+		comboProgrammingLanguage.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+			
+				microservice.setProgrammingLanguage(comboProgrammingLanguage.getText());
+			}
+		});
+		
+
+		Label lblNfr = new Label(composite, SWT.NONE);
+		lblNfr.setBackground(background);
+		lblNfr.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+		lblNfr.setText("Tags:");
+				
+		TagListViewer tagListViewer = new TagListViewer(composite, SWT.NONE,microservice, appDescription, background);
+		tagListViewer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+
+		Label lblDependencies = new Label(composite, SWT.NONE);
+		lblDependencies.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+		lblDependencies.setText("Dependencies:");
+		lblDependencies.setBackground(background);
+
+		Composite dependenciesComposite = new Composite(composite, SWT.NONE);
+		GridLayout gl_dependenciesComposite = new GridLayout(2, false);
+		gl_dependenciesComposite.marginLeft = -5;
+		dependenciesComposite.setLayout(gl_dependenciesComposite);
+		dependenciesComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+		dependenciesComposite.setBackground(background);
+
+		ListViewer listViewer = new ListViewer(dependenciesComposite, SWT.BORDER | SWT.V_SCROLL);
+		List dependencyList = listViewer.getList();
+
+		GridData gd_dependencyList = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+		gd_dependencyList.minimumHeight = 85;
+		gd_dependencyList.heightHint = 85;
+		dependencyList.setLayoutData(gd_dependencyList);
+		listViewer.setLabelProvider(new DependecyLabelProvider());
+		listViewer.setContentProvider(new DependecyContentProvider());
+		listViewer.setInput(microservice);
+
+		Composite DepBttnComposite = new Composite(dependenciesComposite, SWT.NONE);
+		DepBttnComposite.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
+		FillLayout fl_DepBttnComposite = new FillLayout(SWT.VERTICAL);
+		fl_DepBttnComposite.spacing = 5;
+		DepBttnComposite.setLayout(fl_DepBttnComposite);
+		DepBttnComposite.setBackground(background);
+
+		Button btnRemove = new Button(DepBttnComposite, SWT.NONE);
+		btnRemove.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (dependencyList.getSelectionCount() == 1) {
+					int i= dependencyList.getSelectionIndex();
+					ArrayList<String> deps = (ArrayList<String>) microservice.getDependencies();
+					deps.remove(i);
+					listViewer.refresh();
+				}
+			}
+		});
+		btnRemove.setText("Remove");
+
+		txtAddDependency = new Text(dependenciesComposite, SWT.BORDER);
+		txtAddDependency.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+		Button btnAdd = new Button(dependenciesComposite, SWT.NONE);
+		btnAdd.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				ArrayList<String> deps = (ArrayList<String>) microservice.getDependencies();
+				deps.add(txtAddDependency.getText());
+				microservice.setDependencies(deps);
+				
+				listViewer.refresh();
+				txtAddDependency.setText("");
+			}
+		});
+		btnAdd.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		btnAdd.setText("Add");
+
+		dependencyList.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if (dependencyList.getSelectionCount() == 1) {
+					btnRemove.setEnabled(true);
+				}else {
+					btnRemove.setEnabled(false);
+				}
+			}
+		});
+
+		new Label(composite, SWT.NONE);
+
+		btnStateless = new Button(composite, SWT.CHECK);
+		btnStateless.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		btnStateless.setSelection(!microservice.isStateful());
+		btnStateless.setBackground(background);
+		btnStateless.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				microservice.setStateful(!btnStateless.getSelection());
+			}
+		});
+		btnStateless.setText("Stateless");
+
+		Label lblMsRepo = new Label(composite, SWT.NONE);
+		lblMsRepo.setBackground(background);
+		lblMsRepo.setText("Microservice Repo : ");
+
+		msRepo = new Text(composite, SWT.BORDER);
+		msRepo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+		m_bindingContext = initDataBindings();
+		
+		
+	}
+
+	/**
+	 * Create the composite.
+	 * 
+	 * @param parent
+	 * @param microservice
+	 * @wbp.parser.constructor
+	 */
+	public MicroserviceComposite(Composite parent, Microservice microservice, AppDescription appDescription) {
+		this(parent, microservice, SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND), appDescription);
+
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents subclassing of SWT components
+	}
+
+	public void addContentChangeListener(ContentChangeListener contentChangedListener) {
+		contentChangeListeners.add(contentChangedListener);
+	}
+
+	public void setContentChanged() {
+		for (ContentChangeListener ccl : contentChangeListeners) {
+			ccl.contentChanged();
+		}
+	}
+
+	protected DataBindingContext initDataBindings() {
+		DataBindingContext bindingContext = new DataBindingContext();
+		//
+		IObservableValue observeTextMsRepoObserveWidget = WidgetProperties.text(SWT.Modify).observe(msRepo);
+		IObservableValue repoMicroserviceObserveValue = PojoProperties.value("repo").observe(microservice);
+		bindingContext.bindValue(observeTextMsRepoObserveWidget, repoMicroserviceObserveValue, null, null);
+		//
+		return bindingContext;
+	}
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceListComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceListComposite.java
similarity index 52%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceListComposite.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceListComposite.java
index 48d2755c06b1c2a5e119d4943f43b999b89e29b7..3d5a8dd51c6f03ec54cf769e3a78750635456ea0 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceListComposite.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/MicroserviceListComposite.java
@@ -1,239 +1,190 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-import java.util.ArrayList;
-
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Spinner;
-
-import eu.DECIDEh2020.architect.appManager.models.AppDescriptor;
-import eu.DECIDEh2020.architect.appManager.models.Microservice;
-
-
-public class MicroserviceListComposite extends Composite {
-	private AppDescriptor project;
-    private ListViewer listViewerMscvs;
-    private java.util.List<PageCompleteListener> pageCompleteListeners = new ArrayList<PageCompleteListener>();
-    private java.util.List<ContentChangeListener> contentChangeListeners = new ArrayList<ContentChangeListener>();
-    
-	private static class MicroserviceLabelProvider extends LabelProvider {
-		public Image getImage(Object element) {
-			return null;
-		}
-		public String getText(Object element) {
-			return  ((Microservice) element).getName();
-		}
-	}
-	
-	
-	private static class MicroserviceContentProvider implements IStructuredContentProvider {
-		public Object[] getElements(Object inputElement) {
-			return ((AppDescriptor) inputElement).getMicroservices().toArray();
-		}
-		public void dispose() {
-		}
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		}
-	}
-    
-    
-    
-	/**
-	 * Create the composite.
-	 * @param parent
-	 * @param style
-	 */
-	public MicroserviceListComposite(Composite parent, int style, AppDescriptor project, Boolean showListLabel, Color background) {
-		super(parent, SWT.NONE);
-		this.project = project;
-		setBackground(background);
-		setLayout(new GridLayout(2, false));
-        
-        Composite composite = new Composite(this, SWT.NONE);
-        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
-        composite.setLayout(new GridLayout(2, false));
-        composite.setBackground(background);
-		
-				  
-		      // only show this label if needed
-		        if(showListLabel) {
-		        Label lblListMscv = new Label(composite, SWT.NONE);
-		        lblListMscv.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
-		        lblListMscv.setText("List of Microservices:");
-		        lblListMscv.setBackground(background);
-		        }
-		
-		listViewerMscvs = new ListViewer(composite, SWT.BORDER | SWT.V_SCROLL);
-		List listMscvs = listViewerMscvs.getList();
-		listMscvs.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		listViewerMscvs.setLabelProvider(new MicroserviceLabelProvider());
-		listViewerMscvs.setContentProvider(new MicroserviceContentProvider());
-		listViewerMscvs.setInput(project);
-		
-		
-		
-		
-		
-		
-		Composite compositeMscvUpDown = new Composite(this, SWT.NONE);
-		compositeMscvUpDown.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
-		FillLayout fl_compositeMscvUpDown = new FillLayout(SWT.VERTICAL);
-		fl_compositeMscvUpDown.marginHeight = 5;
-		fl_compositeMscvUpDown.spacing = 5;
-		compositeMscvUpDown.setLayout(fl_compositeMscvUpDown);
-		compositeMscvUpDown.setBackground(background);
-		
-		Button btnUp = new Button(compositeMscvUpDown, SWT.NONE);
-		btnUp.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				project.changeIndex(listMscvs.getSelectionIndex(), -1);
-				listViewerMscvs.refresh();
-				setContentChanged();
-			}
-		});
-		btnUp.setEnabled(false);
-		btnUp.setText("Up");
-		
-		Button btnDown = new Button(compositeMscvUpDown, SWT.NONE);
-		btnDown.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				//move(-1);
-				project.changeIndex(listMscvs.getSelectionIndex(), 1);
-				listViewerMscvs.refresh();
-				setContentChanged();
-			}
-		});
-		btnDown.setEnabled(false);
-		btnDown.setText("Down");
-        
-        Composite composite_1 = new Composite(this, SWT.NONE);
-        composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
-        composite_1.setLayout(new GridLayout(2, false));
-        composite_1.setBackground(background);
-        
-        Label lblAddMicroservices = new Label(composite_1, SWT.NONE);
-        lblAddMicroservices.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-        lblAddMicroservices.setText("Add Microservices:");
-        lblAddMicroservices.setBackground(background);
-        
-        Composite compositeMscvAdd = new Composite(composite_1, SWT.NONE);
-        FillLayout fl_compositeMscvAdd = new FillLayout(SWT.HORIZONTAL);
-        fl_compositeMscvAdd.spacing = 15;
-        compositeMscvAdd.setLayout(fl_compositeMscvAdd);
-        compositeMscvAdd.setBackground(background);
-        
-        Spinner spinner = new Spinner(compositeMscvAdd, SWT.BORDER);
-        spinner.setMinimum(1);
-        spinner.setSelection(1);
-        
-        Button btnAddMscv = new Button(compositeMscvAdd, SWT.NONE);
-        btnAddMscv.addSelectionListener(new SelectionAdapter() {
-        	@Override
-        	public void widgetSelected(SelectionEvent e) {
-        		
-        		project.addMicroservices(spinner.getSelection());
-        		listViewerMscvs.refresh();
-        		setContentChanged();
-        		setPageComplete(project.getMicroservices().size()>0);
-        	}
-        });
-        btnAddMscv.setText("Add");
-       
-        
-        Button btnRemoveMsvc = new Button(this, SWT.NONE);
-        btnRemoveMsvc.addSelectionListener(new SelectionAdapter() {
-        	@Override
-        	public void widgetSelected(SelectionEvent e) {
-        		project.removeMicroservice(listMscvs.getSelectionIndex());
-        		 listViewerMscvs.refresh();
-        		 setContentChanged();
-        		 setPageComplete(project.getMicroservices().size()>0);
-        	}
-        });
-        btnRemoveMsvc.setEnabled(false);
-        btnRemoveMsvc.setText("Remove");
-		
-        
-        listMscvs.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				
-				if(listMscvs.getSelectionCount()==1) {
-					//TODO: Disabling buttons if topmost or bottommost does not work
-					if(listMscvs.getSelectionIndex()!=0)btnUp.setEnabled(true);
-					if(listMscvs.getSelectionIndex()!=listMscvs.getItemCount()-1)btnDown.setEnabled(true);
-					btnRemoveMsvc.setEnabled(true);
-				}else if(listMscvs.getSelectionCount()>0) {
-					btnRemoveMsvc.setEnabled(true);
-					btnUp.setEnabled(false);
-					btnDown.setEnabled(false);
-					
-				}else {
-					btnRemoveMsvc.setEnabled(false);
-					btnUp.setEnabled(false);
-					btnDown.setEnabled(false);
-				}
-			}
-		});
-		
-	}
-
-	public void refresh() {
-		listViewerMscvs.refresh();
-	}
-	
-	@Override
-	protected void checkSubclass() {
-		// Disable the check that prevents subclassing of SWT components
-	}
-	
-	public void addContentChangeListener(ContentChangeListener contentChangedListener) {
-		contentChangeListeners.add(contentChangedListener);
-    }
-	
-	public void addPageCompleteListener(PageCompleteListener pageCompleteListener) {
-        pageCompleteListeners.add(pageCompleteListener);
-    }
-	
-	public void setContentChanged() {
-		for(ContentChangeListener ccl : contentChangeListeners) {
-			ccl.contentChanged();
-		}
-	}
-	
-	public void setPageComplete(Boolean complete) {
-		for(PageCompleteListener pcl : pageCompleteListeners) {
-			pcl.pageCompleted(complete);
-		}
-	}
-
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import java.util.ArrayList;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Spinner;
+
+
+import eu.DECIDEh2020.appManager.models.Microservice;
+import eu.DECIDEh2020.appManager.AppDescriptionFactory;
+import eu.DECIDEh2020.appManager.AppDescriptionHelper;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+
+
+public class MicroserviceListComposite extends Composite {
+	private AppDescription project;
+	private AppDescriptionHelper helper;
+    private ListViewer listViewerMscvs;
+    private java.util.List<PageCompleteListener> pageCompleteListeners = new ArrayList<PageCompleteListener>();
+    private java.util.List<ContentChangeListener> contentChangeListeners = new ArrayList<ContentChangeListener>();
+    
+	private static class MicroserviceLabelProvider extends LabelProvider {
+		public Image getImage(Object element) {
+			return null;
+		}
+		public String getText(Object element) {
+			return  ((Microservice) element).getName();
+		}
+	}
+	
+	
+	private static class MicroserviceContentProvider implements IStructuredContentProvider {
+		public Object[] getElements(Object inputElement) {
+			return ((AppDescription) inputElement).getMicroservices().toArray();
+		}
+		public void dispose() {
+		}
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+    
+    
+    
+	/**
+	 * Create the composite.
+	 * @param parent
+	 * @param style
+	 */
+	public MicroserviceListComposite(Composite parent, int style, AppDescription project, Boolean showListLabel, Color background) {
+		super(parent, SWT.NONE);
+		this.project = project;
+		helper = AppDescriptionHelper.create(project);
+		setBackground(background);
+		setLayout(new GridLayout(1, false));
+        
+        listViewerMscvs = new ListViewer(this, SWT.BORDER | SWT.V_SCROLL);
+        List listMscvs = listViewerMscvs.getList();
+        listMscvs.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+        listViewerMscvs.setLabelProvider(new MicroserviceLabelProvider());
+        listViewerMscvs.setContentProvider(new MicroserviceContentProvider());
+        listViewerMscvs.setInput(project);
+
+        Composite composite_1 = new Composite(this, SWT.NONE);
+        composite_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+        composite_1.setLayout(new GridLayout(3, false));
+        composite_1.setBackground(background);
+        
+        Label lblAddMicroservices = new Label(composite_1, SWT.NONE);
+        lblAddMicroservices.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+        lblAddMicroservices.setText("Add Microservices:");
+        lblAddMicroservices.setBackground(background);
+        
+        Composite compositeMscvAdd = new Composite(composite_1, SWT.NONE);
+        FillLayout fl_compositeMscvAdd = new FillLayout(SWT.HORIZONTAL);
+        fl_compositeMscvAdd.spacing = 15;
+        compositeMscvAdd.setLayout(fl_compositeMscvAdd);
+        compositeMscvAdd.setBackground(background);
+        
+        Spinner spinner = new Spinner(compositeMscvAdd, SWT.BORDER);
+        spinner.setMinimum(1);
+        spinner.setSelection(1);
+        
+        Button btnAddMscv = new Button(compositeMscvAdd, SWT.NONE);
+        btnAddMscv.addSelectionListener(new SelectionAdapter() {
+        	@Override
+        	public void widgetSelected(SelectionEvent e) {
+        		
+        		for (int j = 0; j < spinner.getSelection(); j++) {
+        			Microservice m = AppDescriptionFactory.createMicroservice("new Microservice");
+        			String id = m.getId();
+        			String shortid = id.split("-")[0];
+        			m.setName("microservice " + shortid);
+        			project.getMicroservices().add(m);
+        		}
+
+        		listViewerMscvs.refresh();
+        		setContentChanged();
+        		setPageComplete(project.getMicroservices().size()>0);
+        	}
+        });
+        btnAddMscv.setText("Add");
+        
+         
+         Button btnRemoveMsvc = new Button(composite_1, SWT.NONE);
+         btnRemoveMsvc.addSelectionListener(new SelectionAdapter() {
+         	@Override
+         	public void widgetSelected(SelectionEvent e) {
+         		java.util.List<Microservice> m = project.getMicroservices();
+				m.remove(listMscvs.getSelectionIndex());
+				project.setMicroservices(m);
+				
+         		
+         		 listViewerMscvs.refresh();
+         		 setContentChanged();
+         		 setPageComplete(project.getMicroservices().size()>0);
+         	}
+         });
+         btnRemoveMsvc.setEnabled(false);
+         btnRemoveMsvc.setText("Remove");
+         
+         listMscvs.addSelectionListener(new SelectionAdapter() {
+         	@Override
+         	public void widgetSelected(SelectionEvent e) {
+         		if(listMscvs.getSelectionCount()>0) {
+         			btnRemoveMsvc.setEnabled(true);
+         		}else {
+         			btnRemoveMsvc.setEnabled(false);
+         		}
+         	}
+         });
+	}
+
+	public void refresh() {
+		listViewerMscvs.refresh();
+	}
+	
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents subclassing of SWT components
+	}
+	
+	public void addContentChangeListener(ContentChangeListener contentChangedListener) {
+		contentChangeListeners.add(contentChangedListener);
+    }
+	
+	public void addPageCompleteListener(PageCompleteListener pageCompleteListener) {
+        pageCompleteListeners.add(pageCompleteListener);
+    }
+	
+	public void setContentChanged() {
+		for(ContentChangeListener ccl : contentChangeListeners) {
+			ccl.contentChanged();
+		}
+	}
+	
+	public void setPageComplete(Boolean complete) {
+		for(PageCompleteListener pcl : pageCompleteListeners) {
+			pcl.pageCompleted(complete);
+		}
+	}
+
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrAvailabilityComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrAvailabilityComposite.java
new file mode 100644
index 0000000000000000000000000000000000000000..b591e78826e37893a89f17f0b562b280fd780497
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrAvailabilityComposite.java
@@ -0,0 +1,71 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+
+import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
+
+//first version of an availability  NFR Composite, not used
+public class NfrAvailabilityComposite extends Composite {
+
+	public NfrAvailabilityComposite(Composite parent, AvailabilityNfr nfr) {
+		super(parent, SWT.NONE);
+		setLayout(new GridLayout(2, false));
+		
+		Label lblAutomaticSupervision = new Label(this, SWT.NONE);
+		lblAutomaticSupervision.setAlignment(SWT.CENTER);
+		lblAutomaticSupervision.setText("Automatic supervision + repair\r\n(high availability)");
+		
+		Button btnYes = new Button(this, SWT.CHECK);
+		btnYes.setText("yes?");
+		
+		Label lblRelationalDb = new Label(this, SWT.NONE);
+		lblRelationalDb.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, false, false, 1, 1));
+		lblRelationalDb.setText("Relational DB");
+		
+		Composite composite = new Composite(this, SWT.NONE);
+		composite.setLayout(new RowLayout(SWT.HORIZONTAL));
+		composite.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true, false, 1, 1));
+		
+		Button btnFromCloudService = new Button(composite, SWT.CHECK);
+		btnFromCloudService.setText("from Cloud Service Provider");
+		
+		Button btnOwnImplementation = new Button(composite, SWT.CHECK);
+		btnOwnImplementation.setText("own implementation");
+		
+		Composite composite_1 = new Composite(this, SWT.NONE);
+		composite_1.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+		RowLayout rl_composite_1 = new RowLayout(SWT.HORIZONTAL);
+		rl_composite_1.justify = true;
+		composite_1.setLayout(rl_composite_1);
+		
+		Label lblQuantitativeAvailability = new Label(composite_1, SWT.NONE);
+		lblQuantitativeAvailability.setText("Quantitative availability (%):");
+		
+		Label lblScaleValue = new Label(composite_1, SWT.NONE);
+		lblScaleValue.setAlignment(SWT.RIGHT);
+		lblScaleValue.setText("Best effort");
+		
+		Scale scale = new Scale(this, SWT.NONE);
+		scale.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				if(scale.getSelection()>=0) {
+					lblScaleValue.setText("~ "+ scale.getSelection() + "%");
+				}else {
+					lblScaleValue.setText("Best Effort");
+				}
+			}
+		});
+		scale.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+	}
+
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrComposite.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba13b7d96eabbb1853426a20c55594e442f34574
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrComposite.java
@@ -0,0 +1,90 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import java.util.ArrayList;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.wb.swt.SWTResourceManager;
+import org.eclipse.swt.widgets.Label;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
+import eu.DECIDEh2020.appManager.models.Microservice;
+import eu.DECIDEh2020.appManager.models.Nfr;
+import eu.DECIDEh2020.appManager.models.ScalabilityNfr;
+
+//first version of a NFR Composite, not used
+public class NfrComposite extends Composite {
+	private AppDescription appDescription;
+	private Color background = SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND);
+	private Button btnStateless;
+	private Nfr nfr;
+	private java.util.List<ContentChangeListener> contentChangeListeners = new ArrayList<ContentChangeListener>();
+	
+	public NfrComposite(Composite parent, Nfr nfr, Color background, AppDescription appDescription) {
+		super(parent, SWT.None);
+		this.background = background;
+		setBackground(background);
+		this.nfr = nfr;
+		this.appDescription = appDescription;
+		createContent();
+	}
+
+	private void createContent() {
+		this.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
+		this.setLayout(new FillLayout(SWT.HORIZONTAL));
+			
+		Group grpNfr = new Group(this, SWT.NONE);
+		grpNfr.setBackground(background);
+		grpNfr.setLayout(new FillLayout(SWT.HORIZONTAL));
+		grpNfr.setText(nfr.getType());
+		
+		Composite composite = new Composite(grpNfr, SWT.NONE);
+		composite.setBackground(background);
+		composite.setLayout(new FillLayout(SWT.HORIZONTAL));
+		
+		Composite nfrComposite;
+		switch (nfr.getType()) {
+		case ("Availability"):
+			try {
+				nfrComposite = new NfrAvailabilityComposite(composite, (AvailabilityNfr) nfr);
+			} catch (Exception e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			break;
+		case ("Scalability"):
+			try {
+				nfrComposite = new NfrScalabilityComposite(composite, (ScalabilityNfr) nfr);
+			} catch (Exception e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			break;
+		default:
+			nfrComposite = new Composite(composite, SWT.NONE);
+			nfrComposite.setLayout(new FillLayout(SWT.HORIZONTAL));
+
+			Label lblNfrHasNo = new Label(nfrComposite, SWT.NONE);
+			lblNfrHasNo.setAlignment(SWT.CENTER);
+			lblNfrHasNo.setText("NFR has no Type");
+		}
+	}
+
+	public void addContentChangeListener(ContentChangeListener contentChangedListener) {
+		contentChangeListeners.add(contentChangedListener);
+	}
+
+	public void setContentChanged() {
+		for (ContentChangeListener ccl : contentChangeListeners) {
+			ccl.contentChanged();
+		}
+	}
+	
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrPageComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrPageComposite.java
new file mode 100644
index 0000000000000000000000000000000000000000..b404f39c0a292713ffad076ea58bbad3aea47db4
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrPageComposite.java
@@ -0,0 +1,610 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import eu.DECIDEh2020.appManager.AppDescriptionHelper;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.AvailabilityNfr;
+import eu.DECIDEh2020.appManager.models.Nfr;
+import eu.DECIDEh2020.appManager.models.Pattern;
+import eu.DECIDEh2020.appManager.models.PerformanceNfr;
+import eu.DECIDEh2020.architect.plugin.utils.CloudPatternHelper;
+
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.jface.viewers.EditingSupport;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.ComboBoxCellEditor;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.viewers.LabelProvider;
+
+//composite for the NFR Editor
+public class NfrPageComposite extends Composite {
+	private static class PatternLabelProvider extends LabelProvider {
+		public Image getImage(Object element) {
+			return null;
+		}
+
+		public String getText(Object element) {
+			return ((Pattern) element).getTitle();
+		}
+	}
+
+	private static class PatternContentProvider implements IStructuredContentProvider {
+		@SuppressWarnings("unchecked")
+		public Object[] getElements(Object inputElement) {
+
+			return ((java.util.List<Pattern>) inputElement).toArray();
+
+		}
+
+		public void dispose() {
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+
+	public class NfrFilter extends ViewerFilter {
+
+		private String type;
+
+		public void setType(String type) {
+			// ensure that the value can be used for matching
+			this.type = type;
+		}
+
+		@Override
+		public boolean select(Viewer viewer, Object parentElement, Object element) {
+			if (type == null || type.length() == 0) {
+				return true;
+			}
+			Nfr p = (Nfr) element;
+			if (p.getType().equals(type)) {
+				return true;
+			}
+
+			return false;
+		}
+	}
+
+	public class NfrNameLabelProvider extends ColumnLabelProvider {
+		public Image getImage(Object element) {
+			// TODO Auto-generated method stub
+			return null;
+		}
+
+		public String getText(Object element) {
+
+			if (((Nfr) element).getTags().size() > 0) {
+				return ((Nfr) element).getTags().get(0);
+			} else {
+				return null;
+			}
+		}
+	}
+
+	public class NfrUnitLabelProvider extends ColumnLabelProvider {
+		public Image getImage(Object element) {
+			return null;
+		}
+
+		public String getText(Object element) {
+			if (((Nfr) element).getAdditionalProperties().containsKey("unit")) {
+				return ((Nfr) element).getAdditionalProperties().get("unit").asText();
+			} else if (PerformanceNfr.class.isInstance(element)) {
+				return ((PerformanceNfr) element).getUnit();
+			} else if (AvailabilityNfr.class.isInstance(element)) {
+				return ((AvailabilityNfr) element).getUnit();
+			} else {
+				return null;
+			}
+
+		}
+	}
+
+	public class TagEditingSupport extends EditingSupport {
+		private final TableViewer viewer;
+		private final ComboBoxCellEditor editor;
+
+		public TagEditingSupport(TableViewer viewer) {
+			super(viewer);
+			this.viewer = viewer;
+			AppDescriptionHelper adh = AppDescriptionHelper.create(appDescription);
+			this.editor = new ComboBoxCellEditor(viewer.getTable(),
+					adh.getTags().toArray(new String[adh.getTags().size()]));
+		}
+
+		@Override
+		protected CellEditor getCellEditor(Object element) {
+			AppDescriptionHelper adh = AppDescriptionHelper.create(appDescription);
+			editor.setItems(adh.getTags().toArray(new String[adh.getTags().size()]));
+			return editor;
+		}
+
+		@Override
+		protected boolean canEdit(Object element) {
+			return true;
+		}
+
+		@Override
+		protected Object getValue(Object element) {
+			Nfr n = (Nfr) element;
+			String[] items = ((ComboBoxCellEditor) editor).getItems();
+			int idx = 0;
+			for (int i = 0; i < items.length; i++) {
+				if (items[i].equals((n.getTags().size() > 0 ? n.getTags().get(0) : ""))) {
+					idx = i;
+					break;
+				}
+			}
+
+			return idx;
+		}
+
+		@Override
+		protected void setValue(Object element, Object value) {
+			String[] items = ((ComboBoxCellEditor) editor).getItems();
+			String selected = items[(Integer) value];
+
+			((Nfr) element).setTags(Collections.singletonList(selected));
+
+			viewer.update(element, null);
+		}
+
+	}
+
+	private Color background;
+	private AppDescription appDescription;
+	private AppDescriptionHelper helper;
+	private Table table_location;
+	private TableViewer tableViewer_performance;
+	private TableViewer tableViewer_availability;
+	private List<Nfr> nfrs;
+	private Table table;
+	private ListViewer listViewerPatterns;
+	private org.eclipse.swt.widgets.List listPatterns;
+
+	public NfrPageComposite(Composite parent, AppDescription appDescription) {
+		super(parent, SWT.NONE);
+
+		this.appDescription = appDescription;
+		this.nfrs = appDescription.getNfrs();
+
+		helper = AppDescriptionHelper.create(appDescription);
+
+		background = SWTResourceManager.getColor(SWT.COLOR_WHITE);
+		setBackground(background);
+		createContent();
+		fillContent();
+		requestLayout();
+	}
+
+	private void createContent() {
+		Control[] children = this.getChildren();
+		for (int i = 0; i < children.length; i++) {
+			children[i].dispose();
+		}
+		setLayout(new GridLayout(2, false));
+
+		Composite composite_8 = new Composite(this, SWT.NONE);
+		composite_8.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		composite_8.setLayout(new GridLayout(1, false));
+
+		CLabel lblOverview = new CLabel(composite_8, SWT.NONE);
+		lblOverview.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblOverview.setSize(44, 27);
+		lblOverview.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
+		lblOverview.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblOverview.setText("NFRs");
+
+		Label label = new Label(composite_8, SWT.SEPARATOR | SWT.HORIZONTAL);
+		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		label.setSize(236, 2);
+
+		CLabel lblScalability = new CLabel(composite_8, SWT.NONE);
+		lblScalability.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblScalability.setSize(61, 15);
+		lblScalability.setTopMargin(0);
+		lblScalability.setText("Scalability");
+		lblScalability.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		lblScalability.setBottomMargin(0);
+		lblScalability.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
+
+		Composite composite = new Composite(composite_8, SWT.NONE);
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		composite.setSize(236, 131);
+		composite.setLayout(new GridLayout(2, false));
+
+		TableViewer tableViewer_3 = new TableViewer(composite, SWT.BORDER | SWT.FULL_SELECTION);
+		table = tableViewer_3.getTable();
+		table.setLinesVisible(true);
+		table.setHeaderVisible(true);
+		GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_table.heightHint = 100;
+		table.setLayoutData(gd_table);
+
+		TableViewerColumn tableViewerColumn_7 = new TableViewerColumn(tableViewer_3, SWT.NONE);
+		TableColumn tblclmnNameservicegroup = tableViewerColumn_7.getColumn();
+		tblclmnNameservicegroup.setWidth(100);
+		tblclmnNameservicegroup.setText("Name (µService/Group)");
+
+		TableViewerColumn tableViewerColumn_8 = new TableViewerColumn(tableViewer_3, SWT.NONE);
+		TableColumn tblclmnScaleBy = tableViewerColumn_8.getColumn();
+		tblclmnScaleBy.setWidth(100);
+		tblclmnScaleBy.setText("Scale by");
+
+		Composite composite_7 = new Composite(composite, SWT.NONE);
+		composite_7.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
+		composite_7.setLayout(new FillLayout(SWT.VERTICAL));
+
+		Button btnAdd_1 = new Button(composite_7, SWT.NONE);
+		btnAdd_1.setEnabled(false);
+		btnAdd_1.setText("Add");
+
+		Button btnRemove_1 = new Button(composite_7, SWT.NONE);
+		btnRemove_1.setText("Remove");
+
+		CLabel lblPerformance = new CLabel(composite_8, SWT.NONE);
+		lblPerformance.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblPerformance.setSize(301, 15);
+		lblPerformance.setTopMargin(0);
+		lblPerformance.setText("Performance");
+		lblPerformance.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		lblPerformance.setBottomMargin(0);
+		lblPerformance.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
+
+		Composite composite_1 = new Composite(composite_8, SWT.NONE);
+		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		composite_1.setSize(301, 131);
+		composite_1.setLayout(new GridLayout(2, false));
+
+		tableViewer_performance = new TableViewer(composite_1, SWT.BORDER | SWT.FULL_SELECTION);
+		Table table_performance = tableViewer_performance.getTable();
+		table_performance.setLinesVisible(true);
+		table_performance.setHeaderVisible(true);
+		GridData gd_table_performance = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
+		gd_table_performance.heightHint = 100;
+		table_performance.setLayoutData(gd_table_performance);
+		NfrFilter perfFilter = new NfrFilter();
+		perfFilter.setType("Performance");
+		tableViewer_performance.setFilters(perfFilter);
+
+		TableViewerColumn tableViewerColumn_2 = new TableViewerColumn(tableViewer_performance, SWT.NONE);
+		tableViewerColumn_2.setEditingSupport(new TagEditingSupport(tableViewer_performance));
+		tableViewerColumn_2.setLabelProvider(new NfrNameLabelProvider());
+
+		TableColumn tblclmnNewColumn = tableViewerColumn_2.getColumn();
+		tblclmnNewColumn.setWidth(100);
+		tblclmnNewColumn.setText("Name (µService/Group)");
+
+		TableViewerColumn tableViewerColumn_3 = new TableViewerColumn(tableViewer_performance, SWT.NONE);
+		tableViewerColumn_3.setEditingSupport(new EditingSupport(tableViewer_performance) {
+			protected boolean canEdit(Object element) {
+				// TODO Auto-generated method stub
+				return true;
+			}
+
+			protected CellEditor getCellEditor(Object element) {
+				// TODO Auto-generated method stub
+				return new TextCellEditor(tableViewer_performance.getTable());
+			}
+
+			protected Object getValue(Object element) {
+				// TODO Auto-generated method stub
+				return String.valueOf(((PerformanceNfr) element).getValue());
+			}
+
+			protected void setValue(Object element, Object value) {
+				PerformanceNfr n = (PerformanceNfr) element;
+				Double d = Double.valueOf((String) value);
+				n.setValue(d);
+
+				tableViewer_performance.update(element, null);
+			}
+		});
+		tableViewerColumn_3.setLabelProvider(new ColumnLabelProvider() {
+			public Image getImage(Object element) {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+			public String getText(Object element) {
+				
+				return String.valueOf(((PerformanceNfr) element).getValue());
+				
+			}
+		});
+		TableColumn tblclmnResponseTime = tableViewerColumn_3.getColumn();
+		tblclmnResponseTime.setWidth(100);
+		tblclmnResponseTime.setText("Response Time");
+
+		TableViewerColumn tableViewerColumn_5 = new TableViewerColumn(tableViewer_performance, SWT.NONE);
+		tableViewerColumn_5.setLabelProvider(new NfrUnitLabelProvider());
+		TableColumn tblclmnUnit = tableViewerColumn_5.getColumn();
+		tblclmnUnit.setWidth(100);
+		tblclmnUnit.setText("Unit");
+
+		tableViewer_performance.setContentProvider(ArrayContentProvider.getInstance());
+		tableViewer_performance.setInput(nfrs);
+
+		Composite composite_4 = new Composite(composite_1, SWT.NONE);
+		composite_4.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, true, 1, 1));
+		composite_4.setLayout(new FillLayout(SWT.VERTICAL));
+
+		Button btnAddPerf = new Button(composite_4, SWT.NONE);
+
+		btnAddPerf.setText("Add");
+
+		Button btnRemovePerf = new Button(composite_4, SWT.NONE);
+
+		btnRemovePerf.setText("Remove");
+
+		CLabel lblAvailability = new CLabel(composite_8, SWT.NONE);
+		lblAvailability.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblAvailability.setSize(301, 15);
+		lblAvailability.setTopMargin(0);
+		lblAvailability.setText("Availability");
+		lblAvailability.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		lblAvailability.setBottomMargin(0);
+		lblAvailability.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
+
+		Composite composite_3 = new Composite(composite_8, SWT.NONE);
+		composite_3.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		composite_3.setSize(301, 60);
+		composite_3.setLayout(new GridLayout(2, false));
+
+		tableViewer_availability = new TableViewer(composite_3, SWT.BORDER | SWT.FULL_SELECTION);
+		Table table_availability = tableViewer_availability.getTable();
+		table_availability.setLinesVisible(true);
+		table_availability.setHeaderVisible(true);
+		GridData gd_table_availability = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_table_availability.heightHint = 100;
+		table_availability.setLayoutData(gd_table_availability);
+		NfrFilter availFilter = new NfrFilter();
+		availFilter.setType("Availability");
+		tableViewer_availability.setFilters(availFilter);
+
+		TableViewerColumn tableViewerColumn_4 = new TableViewerColumn(tableViewer_availability, SWT.NONE);
+		tableViewerColumn_4.setEditingSupport(new TagEditingSupport(tableViewer_availability));
+		tableViewerColumn_4.setLabelProvider(new NfrNameLabelProvider());
+		TableColumn tblclmnName_1 = tableViewerColumn_4.getColumn();
+		tblclmnName_1.setWidth(100);
+		tblclmnName_1.setText("Name (µService/Group)");
+
+		TableViewerColumn tableViewerColumn_6 = new TableViewerColumn(tableViewer_availability, SWT.NONE);
+		tableViewerColumn_6.setEditingSupport(new EditingSupport(tableViewer_availability) {
+			protected boolean canEdit(Object element) {
+				// TODO Auto-generated method stub
+				return true;
+			}
+
+			protected CellEditor getCellEditor(Object element) {
+				// TODO Auto-generated method stub
+				return new TextCellEditor(tableViewer_availability.getTable());
+			}
+
+			protected Object getValue(Object element) {
+				// TODO Auto-generated method stub
+				return String.valueOf(((AvailabilityNfr) element).getValue());
+			}
+
+			protected void setValue(Object element, Object value) {
+				AvailabilityNfr n = (AvailabilityNfr) element;
+				Double d = Double.valueOf((String) value);
+				n.setValue(d);
+				tableViewer_availability.update(element, null);
+			}
+		});
+		tableViewerColumn_6.setLabelProvider(new ColumnLabelProvider() {
+			public Image getImage(Object element) {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+			public String getText(Object element) {
+				return String.valueOf(((AvailabilityNfr) element).getValue());
+			}
+		});
+		TableColumn tblclmnQuant = tableViewerColumn_6.getColumn();
+		tblclmnQuant.setWidth(100);
+		tblclmnQuant.setText("Quantitative Availability");
+
+		TableViewerColumn tableViewerColumn_9 = new TableViewerColumn(tableViewer_availability, SWT.NONE);
+		tableViewerColumn_9.setLabelProvider(new NfrUnitLabelProvider());
+		TableColumn tblclmnUnit_1 = tableViewerColumn_9.getColumn();
+		tblclmnUnit_1.setWidth(100);
+		tblclmnUnit_1.setText("Unit");
+
+		tableViewer_availability.setContentProvider(ArrayContentProvider.getInstance());
+		tableViewer_availability.setInput(nfrs);
+
+		Composite composite_5 = new Composite(composite_3, SWT.NONE);
+		composite_5.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
+		composite_5.setLayout(new FillLayout(SWT.VERTICAL));
+
+		Button btnAddAvail = new Button(composite_5, SWT.NONE);
+
+		btnAddAvail.setText("Add");
+
+		Button btnRemoveAvail = new Button(composite_5, SWT.NONE);
+
+		btnRemoveAvail.setText("Remove");
+
+		CLabel lblLocation = new CLabel(composite_8, SWT.NONE);
+		lblLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblLocation.setSize(301, 15);
+		lblLocation.setTopMargin(0);
+		lblLocation.setText("Location");
+		lblLocation.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		lblLocation.setBottomMargin(0);
+		lblLocation.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
+
+		Composite composite_2 = new Composite(composite_8, SWT.NONE);
+		composite_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		composite_2.setSize(301, 45);
+		composite_2.setLayout(new GridLayout(2, false));
+
+		TableViewer tableViewer_location = new TableViewer(composite_2, SWT.BORDER | SWT.FULL_SELECTION);
+		table_location = tableViewer_location.getTable();
+		GridData gd_table_location = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_table_location.heightHint = 100;
+		table_location.setLayoutData(gd_table_location);
+		table_location.setHeaderVisible(true);
+		table_location.setLinesVisible(true);
+
+		TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer_location, SWT.NONE);
+		TableColumn tblclmnName = tableViewerColumn.getColumn();
+		tblclmnName.setText("Name");
+
+		TableViewerColumn tableViewerColumn_1 = new TableViewerColumn(tableViewer_location, SWT.NONE);
+		TableColumn tblclmnRegion = tableViewerColumn_1.getColumn();
+		tblclmnRegion.setText("Region");
+
+		Composite composite_9 = new Composite(composite_2, SWT.NONE);
+		composite_9.setLayout(new FillLayout(SWT.VERTICAL));
+		composite_9.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
+
+		Button btnAddLoc = new Button(composite_9, SWT.NONE);
+		btnAddLoc.setEnabled(false);
+		btnAddLoc.setBounds(0, 0, 75, 25);
+		btnAddLoc.setText("Add");
+
+		Button btnRemoveLoc = new Button(composite_9, SWT.NONE);
+		btnRemoveLoc.setText("Remove");
+
+		Composite composite_6 = new Composite(this, SWT.NONE);
+		composite_6.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		composite_6.setLayout(new GridLayout(1, false));
+
+		listViewerPatterns = new ListViewer(composite_6, SWT.BORDER | SWT.V_SCROLL);
+		listPatterns = listViewerPatterns.getList();
+		listPatterns.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		listViewerPatterns.setLabelProvider(new PatternLabelProvider());
+		listViewerPatterns.setContentProvider(new PatternContentProvider());
+		listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
+		listViewerPatterns.refresh();
+
+		btnAddAvail.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+
+				AvailabilityNfr n = new AvailabilityNfr();
+				n.setType("Availability");
+				List<String> l = new ArrayList<String>();
+				l.add("Application");
+				n.setTags(l);
+
+				n.setUnit("percentage");
+				n.setValue(0.00);
+				n.setAbstractValue("Medium");
+				addnfr(n);
+				tableViewer_availability.refresh();
+				tableViewer_availability.getTable().update();
+				listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
+				listViewerPatterns.refresh();
+				listPatterns.update();
+			}
+		});
+
+		btnRemoveAvail.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				int idx = table_availability.getSelectionIndex();
+				Nfr selected = (Nfr) tableViewer_availability.getElementAt(idx);
+				removenfr(selected);
+				tableViewer_availability.refresh();
+				listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
+				listViewerPatterns.refresh();
+			}
+		});
+		btnAddPerf.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				PerformanceNfr n = new PerformanceNfr();
+				n.setType("Performance");
+				List<String> l = new ArrayList<String>();
+				l.add("Application");
+				n.setTags(l);
+				n.setAbstractValue("Medium");
+				n.setValue(0.00);
+				n.setUnit("milliseconds");
+				addnfr(n);
+				tableViewer_performance.refresh();
+				listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
+				listViewerPatterns.refresh();
+			}
+		});
+
+		btnRemovePerf.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				int idx = table_performance.getSelectionIndex();
+
+				Nfr selected = (Nfr) tableViewer_performance.getElementAt(idx);
+				removenfr(selected);
+				tableViewer_performance.refresh();
+				listViewerPatterns.setInput(CloudPatternHelper.inferPatterns(nfrs));
+				listViewerPatterns.refresh();
+			}
+		});
+
+		requestLayout();
+
+	}
+
+	private void addnfr(Nfr n) {
+		this.nfrs.add(n);
+		this.appDescription.setNfrs(nfrs);
+
+		fillContent();
+	}
+
+	private void removenfr(Nfr n) {
+		this.nfrs.remove(n);
+		this.appDescription.setNfrs(nfrs);
+
+		fillContent();
+	}
+
+	public void refreshContent(AppDescription appDescription) {
+		this.appDescription = appDescription;
+		this.nfrs = appDescription.getNfrs();
+		if (nfrs == null) {
+			nfrs = new ArrayList<Nfr>();
+		}
+		fillContent();
+	}
+
+	private void fillContent() {
+
+		tableViewer_availability.setInput(nfrs);
+		tableViewer_performance.setInput(nfrs);
+
+	}
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrScalabilityComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrScalabilityComposite.java
new file mode 100644
index 0000000000000000000000000000000000000000..fad0dbceb8af0d54233e8c0b809520809083b579
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrScalabilityComposite.java
@@ -0,0 +1,18 @@
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+import eu.DECIDEh2020.appManager.models.ScalabilityNfr;
+
+
+public class NfrScalabilityComposite extends Composite {
+
+	public NfrScalabilityComposite(Composite parent, ScalabilityNfr nfr) {
+		super(parent, SWT.NONE);
+	}
+
+}
+
+
+
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrSelector.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrSelector.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d19997368458112e22ab597595c11acff3f47fb
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/NfrSelector.java
@@ -0,0 +1,314 @@
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import java.util.ArrayList;
+
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabFolder2Listener;
+import org.eclipse.swt.custom.CTabFolderEvent;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowData;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.wb.swt.ResourceManager;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import eu.DECIDEh2020.appManager.models.Nfr;
+
+//first version of a NFR Composite, not used
+public class NfrSelector extends Composite {
+	private  ArrayList<nfr> nfrList = new ArrayList<nfr>();
+	private Text txtCost;
+	private Text text;
+	
+	private class nfr{
+		private CTabItem tabItem;
+		private Button button;
+		private CTabFolder parentFolder;
+		private Composite buttonParent;
+		private Composite content;
+		private String name;
+		private String toolTipText;
+		private Nfr nfrObject;
+		
+		public nfr(String name, CTabFolder itemParent, Composite itemContent, Composite buttonParent, String toolTipText) {
+			this.name= name;
+			this.parentFolder=itemParent;
+			this.content = itemContent;
+			this.buttonParent = buttonParent;
+			this.toolTipText = toolTipText;
+			
+			addButton();
+			addListener();
+		}
+		
+		private void createObject() {
+			//nfrObject= new Nfr();
+			
+		}
+		private String getName() {
+			return name;
+		}
+		private void addItem() {
+			tabItem = new CTabItem(parentFolder, SWT.NONE);
+			tabItem.setShowClose(true);
+			tabItem.setToolTipText(toolTipText);
+			tabItem.setText(name);
+			tabItem.setControl(content);
+			parentFolder.setSelection(tabItem);
+		}
+		
+		private void addButton() {
+			button = new Button(buttonParent, SWT.NONE);
+			button.setImage(ResourceManager.getPluginImage("eu.DECIDEh2020.architect.plugin", "icons/plus_small.png"));
+			button.setText(name);
+			
+			buttonParent.redraw();
+			buttonParent.layout();
+			buttonParent.getParent().layout();
+			//System.out.println("button added");
+		}
+		
+		public void closeItem() {
+			//System.out.println("dispose");
+			tabItem.dispose();
+			tabItem = null;
+			addButton();
+			addListener();
+		}
+		
+		private void addListener() {
+			button.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					button.dispose();
+					
+					button= null;
+					addItem();
+					buttonParent.redraw();
+					buttonParent.layout();
+					
+				}
+			});
+			
+			
+		}
+		
+	}
+	
+	
+	
+	public NfrSelector(Composite parent, int style) {
+		super(parent, style);
+		// TODO Auto-generated constructor stub
+		createGUI();
+	}
+	
+	void createGUI(){
+		setLayout(new GridLayout(1, false));
+		
+		
+		
+		CTabFolder tabFolder = new CTabFolder(this, SWT.BORDER);
+		
+		tabFolder.setUnselectedCloseVisible(false);
+		tabFolder.setForeground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_FOREGROUND));
+		tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+		
+		tabFolder.addCTabFolder2Listener(new CTabFolder2Listener() {
+
+		      public void close(CTabFolderEvent arg0) {
+		        nfr n = findNfrInList(arg0.item);
+		        	
+		        if (n!=null) {
+		        	n.closeItem();
+		        }
+		      }
+
+		      public void minimize(CTabFolderEvent arg0) {
+		        // TODO Auto-generated method stub
+
+		      }
+
+		      public void maximize(CTabFolderEvent arg0) {
+		        // TODO Auto-generated method stub
+
+		      }
+
+		      public void restore(CTabFolderEvent arg0) {
+		        // TODO Auto-generated method stub
+
+		      }
+
+			@Override
+			public void showList(CTabFolderEvent event) {
+				// TODO Auto-generated method stub
+				
+			}
+
+		    });
+		
+		
+		Composite compositeAvailability = new Composite(tabFolder, SWT.NONE);
+		compositeAvailability.setLayout(new GridLayout(1, false));
+		
+		Label lblSelectTheTargeted = new Label(compositeAvailability, SWT.WRAP);
+		lblSelectTheTargeted.setText("Select the targeted availability SLO range for the App as a whole:");
+		
+		Composite composite = new Composite(compositeAvailability, SWT.NONE);
+		RowLayout rl_composite = new RowLayout(SWT.VERTICAL);
+		rl_composite.marginLeft = 15;
+		rl_composite.pack = false;
+		composite.setLayout(rl_composite);
+		
+		Button btnA = new Button(composite, SWT.RADIO);
+		btnA.setText("A > 99%");
+		
+		Button btnA_1 = new Button(composite, SWT.RADIO);
+		btnA_1.setText("99% > A > 98%");
+		
+		Button btnA_2 = new Button(composite, SWT.RADIO);
+		btnA_2.setText("98% > A");
+		
+		
+		
+		Composite compositeCost = new Composite(tabFolder, SWT.NONE);
+		
+		compositeCost.setLayout(new GridLayout(1, false));
+		
+		Label lblSelectTheTargeted_1 = new Label(compositeCost, SWT.WRAP);
+		lblSelectTheTargeted_1.setText("Select the targeted cost SLO for the App as a whole:");
+		
+		Composite composite_2 = new Composite(compositeCost, SWT.NONE);
+		composite_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		FillLayout fl_composite_2 = new FillLayout(SWT.HORIZONTAL);
+		fl_composite_2.spacing = 15;
+		composite_2.setLayout(fl_composite_2);
+		
+		Label lblMaximumCost = new Label(composite_2, SWT.WRAP);
+		lblMaximumCost.setAlignment(SWT.LEFT);
+		lblMaximumCost.setText("Maximum cost:");
+		
+		txtCost = new Text(composite_2, SWT.BORDER);
+		
+	
+		
+		Composite compositePerformance = new Composite(tabFolder, SWT.NONE);
+		compositePerformance.setLayout(new GridLayout(1, false));
+		
+		Label lblSelectTheTargeted_2 = new Label(compositePerformance, SWT.NONE);
+		lblSelectTheTargeted_2.setText("Select the targeted performance SLO for the App as a whole:");
+		
+		Composite composite_3 = new Composite(compositePerformance, SWT.NONE);
+		composite_3.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, false, false, 1, 1));
+		composite_3.setLayout(new FillLayout(SWT.HORIZONTAL));
+		
+		Label lblMaximumResponseTime = new Label(composite_3, SWT.NONE);
+		lblMaximumResponseTime.setText("Maximum response time:");
+		
+		text = new Text(composite_3, SWT.BORDER);
+		
+		
+		
+		Composite compositeLocation = new Composite(tabFolder, SWT.NONE);
+		
+		
+		compositeLocation.setLayout(new GridLayout(1, false));
+		
+		Label lblSelectTheTargeted_3 = new Label(compositeLocation, SWT.NONE);
+		lblSelectTheTargeted_3.setText("Select the targeted location SLO  for the App as a whole:");
+		
+		Combo combo = new Combo(compositeLocation, SWT.NONE);
+		combo.setItems(new String[] {"Europe", "USA", "Other"});
+		combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		
+		
+		
+		Composite compositeSecurity = new Composite(tabFolder, SWT.NONE);
+		compositeSecurity.setLayout(new GridLayout(1, false));
+		
+		Label lblSelectTheTargeted_4 = new Label(compositeSecurity, SWT.NONE);
+		lblSelectTheTargeted_4.setText("Select the targeted Security/legal description SLO  for the App as a whole:");
+		
+		Composite composite_4 = new Composite(compositeSecurity, SWT.NONE);
+		RowLayout rl_composite_4 = new RowLayout(SWT.HORIZONTAL);
+		rl_composite_4.spacing = 15;
+		rl_composite_4.justify = true;
+		rl_composite_4.fill = true;
+		rl_composite_4.marginWidth = 3;
+		composite_4.setLayout(rl_composite_4);
+		
+		Label lblLegislationsecurityNeeds = new Label(composite_4, SWT.NONE);
+		lblLegislationsecurityNeeds.setText("Legislation/security needs");
+		
+		ListViewer listViewer = new ListViewer(composite_4, SWT.BORDER | SWT.V_SCROLL);
+		List list = listViewer.getList();
+		list.setItems(new String[] {"GDPR", "Code of Conduct", "Encryption"});
+		list.setLayoutData(new RowData(253, SWT.DEFAULT));
+		
+		Composite composite_1 = new Composite(this, SWT.NONE);
+		composite_1.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+		composite_1.setLayout(new GridLayout(2, false));
+		
+		Label lblClickToAdd = new Label(composite_1, SWT.CENTER);
+		lblClickToAdd.setText("Click to add nfr to Project:");
+		
+		Composite composite_nfr_buttons = new Composite(composite_1, SWT.NONE);
+		composite_nfr_buttons.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+		RowLayout rl_composite_nfr_buttons = new RowLayout(SWT.HORIZONTAL);
+		rl_composite_nfr_buttons.center = true;
+		rl_composite_nfr_buttons.spacing = 5;
+		composite_nfr_buttons.setLayout(rl_composite_nfr_buttons);
+		
+		nfr n = new nfr("Availability", tabFolder,compositeAvailability,composite_nfr_buttons, "DECIDE\u2019s availability description");
+		
+		nfrList.add(n);
+		n = new nfr("Cost", tabFolder,compositeCost,composite_nfr_buttons, "DECIDE\u2019s cost description");
+		nfrList.add(n);
+		n = new nfr("Performance", tabFolder,compositePerformance,composite_nfr_buttons, "DECIDE\u2019s performance description");
+		nfrList.add(n);
+		n = new nfr("Location", tabFolder,compositeLocation,composite_nfr_buttons, "DECIDE\u2019s location description");
+		nfrList.add(n);
+		n = new nfr("Security(legal)", tabFolder,compositeSecurity,composite_nfr_buttons, "DECIDE\u2019s Security/legal description");
+		nfrList.add(n);
+		
+		
+	}
+	
+	private nfr findNfrInList(Widget tabItem) {
+		for (nfr nfr : nfrList) {
+			if(tabItem.equals(nfr.tabItem)) {
+				System.out.println("found nfr");
+				return nfr;
+			}
+		}
+		System.out.println("found  nothing");
+		return null;
+	}
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PageCompleteListener.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PageCompleteListener.java
similarity index 96%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PageCompleteListener.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PageCompleteListener.java
index 726ac46e8936c83c6bb25a6b33fc38f446a036c3..9ba4af4f3d3382fe1310532c56c276fbc621f4c4 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PageCompleteListener.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PageCompleteListener.java
@@ -1,19 +1,19 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-public interface PageCompleteListener {
-
-		public void pageCompleted(Boolean complete);
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+public interface PageCompleteListener {
+
+		public void pageCompleted(Boolean complete);
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ProjectPageComposite.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ProjectPageComposite.java
similarity index 82%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ProjectPageComposite.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ProjectPageComposite.java
index 504aaec0e17548c4cc2371a57a937a54d7c8375f..f4091289d66eae63d7967ef5d247c554023b4432 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ProjectPageComposite.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/ProjectPageComposite.java
@@ -1,339 +1,300 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.LinkedList;
-
-import org.apache.jena.rdf.model.Resource;
-import org.eclipse.core.databinding.DataBindingContext;
-import org.eclipse.core.databinding.observable.value.IObservableValue;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
-import org.eclipse.core.databinding.beans.PojoProperties;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.wb.swt.SWTResourceManager;
-
-import eu.DECIDEh2020.architect.appManager.models.AppDescriptor;
-import eu.DECIDEh2020.architect.appManager.models.Microservice;
-
-import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.jface.text.TextViewer;
-
-public class ProjectPageComposite extends Composite {
-	private DataBindingContext m_bindingContext;
-
-	private AppDescriptor project;
-	private Text txtProjectname;
-	private Color background;
-	private Composite pp = this;
-	private MicroserviceListComposite microserviceListComposite;
-	private StyledText styledText;
-	
-	
-	
-	/**
-	 * Create the composite.
-	 * @param parent
-	 * @param style
-	 */
-	public ProjectPageComposite(Composite parent, AppDescriptor project) {
-		super(parent, SWT.NONE);
-		
-		this.project = project;
-		background= SWTResourceManager.getColor(SWT.COLOR_WHITE);
-		setBackground(background);
-		setContent();
-		requestLayout();
-	}
-
-	private void setContent() {
-		Control[] children = this.getChildren();
-	    for (int i = 0 ; i < children.length; i++) {
-	        children[i].dispose();
-	    }
-		setLayout(new GridLayout(1, true));
-		
-		CLabel lblOverview = new CLabel(this, SWT.NONE);
-		lblOverview.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
-		lblOverview.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		lblOverview.setText("Overview");
-		
-		Label label = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
-		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Composite container  = new Composite(this, SWT.NONE);
-		container.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, true, 1, 1));
-		container.setBackground(background);
-		GridLayout gl_container = new GridLayout(2,true);
-		gl_container.horizontalSpacing = 25;
-		container.setLayout(gl_container);
-		
-		CLabel lblProject = new CLabel(container, SWT.NONE);
-		lblProject.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
-		lblProject.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblProject.setBottomMargin(0);
-		lblProject.setTopMargin(0);
-		lblProject.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblProject.setText("Project");
-		
-		CLabel lblMicroservices = new CLabel(container, SWT.NONE);
-		lblMicroservices.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
-		lblMicroservices.setTopMargin(0);
-		lblMicroservices.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblMicroservices.setBottomMargin(0);
-		lblMicroservices.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblMicroservices.setText("Microservices");
-		
-
-		
-		Composite composite = new Composite(container, SWT.NONE);
-		composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
-		composite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		composite.setLayout(new GridLayout(1, false));
-		
-	
-		
-		
-		
-		Composite projectInfo = new Composite(composite, SWT.NONE);
-		projectInfo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		projectInfo.setSize(202, 130);
-		projectInfo.setBackground(background);
-		projectInfo.setLayout(new GridLayout(2, false));
-		
-		Label lblProjectname = new Label(projectInfo, SWT.NONE);
-		lblProjectname.setBackground(background);
-		lblProjectname.setSize(67, 15);
-		lblProjectname.setText("Projectname:");
-		
-		txtProjectname = new Text(projectInfo, SWT.BORDER);
-		txtProjectname.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		txtProjectname.setSize(74, 21);
-		
-		Label lblProjectNfrs = new Label(projectInfo, SWT.NONE);
-		lblProjectNfrs.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		lblProjectNfrs.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
-		lblProjectNfrs.setText("Project NFRs:");
-		
-		NfrListViewer nfrListViewer = new NfrListViewer(projectInfo, SWT.BORDER | SWT.V_SCROLL| SWT.MULTI);
-		nfrListViewer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		nfrListViewer.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
-		
-		CLabel lblDescription = new CLabel(projectInfo, SWT.NONE);
-		lblDescription.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		lblDescription.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
-		lblDescription.setText("Description");
-		
-		TextViewer textViewer = new TextViewer(projectInfo, SWT.BORDER | SWT.WRAP);
-		styledText = textViewer.getTextWidget();
-		GridData gd_styledText = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
-		gd_styledText.minimumHeight = 80;
-		styledText.setLayoutData(gd_styledText);
-		
-		CLabel lblDeploymentOrder = new CLabel(composite, SWT.NONE);
-		lblDeploymentOrder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblDeploymentOrder.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
-		lblDeploymentOrder.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblDeploymentOrder.setBottomMargin(0);
-		lblDeploymentOrder.setTopMargin(0);
-		lblDeploymentOrder.setText("Deployment Order");
-		
-		microserviceListComposite = new MicroserviceListComposite(composite, SWT.NONE, project, false,SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		microserviceListComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));
-		
-		
-		
-		
-		
-		txtProjectname.addKeyListener(new KeyAdapter() {
-			@Override
-			public void keyPressed(KeyEvent e) {
-				if (project != null) project.setName(txtProjectname.getText());
-			}
-		});
-		
-		
-		
-		ScrolledComposite scrolledComposite = new ScrolledComposite(container, SWT.V_SCROLL);
-		
-		
-		scrolledComposite.addListener(SWT.Activate, new Listener() {
-	        public void handleEvent(Event e) {
-	            scrolledComposite.setFocus();
-	        }
-	    });
-		
-		  scrolledComposite.addListener(SWT.MouseVerticalWheel, new Listener() {
-	            public void handleEvent(Event event) {
-	                int wheelCount = event.count;
-	                wheelCount = (int) Math.ceil(wheelCount / 3.0f);
-	                while (wheelCount < 0) {
-	                    scrolledComposite.getVerticalBar().setIncrement(4);
-	                    wheelCount++;
-	                }
-
-	                while (wheelCount > 0) {
-	                    scrolledComposite.getVerticalBar().setIncrement(-4);
-	                    wheelCount--;
-	                }
-	            }
-	        });
-		  
-		scrolledComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		
-		
-		
-		Composite mcontainer = new Composite(scrolledComposite, SWT.NONE);
-		mcontainer.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		mcontainer.setLayout(new GridLayout(1, false));
-		addMicroservices(mcontainer);
-		mcontainer.requestLayout();
-		
-		scrolledComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true, 1, 1));
-		scrolledComposite.setContent(mcontainer);
-		scrolledComposite.setExpandVertical( true );
-		scrolledComposite.setExpandHorizontal( true );
-		int width = scrolledComposite.getClientArea().width/2;
-		scrolledComposite.setMinSize( mcontainer.computeSize( width, SWT.DEFAULT ) );
-		
-		scrolledComposite.addListener( SWT.Resize, event -> {
-			  final int w = scrolledComposite.getClientArea().width/2;
-			  scrolledComposite.setMinSize( mcontainer.computeSize( w, SWT.DEFAULT ) );
-			} );
-		
-		//
-		if(project != null && project.getProjectNfrs().size() != 0) {
-			nfrListViewer.addSelection(new ArrayList<Resource>(project.getProjectNfrs()));
-		}
-		//when the selection in the nfr list is changed, change the underlying set of NFR enums
-		nfrListViewer.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				if (project != null) {
-					HashSet<Resource> mscNfrs = new HashSet<Resource>();
-				for (Resource r: nfrListViewer.getSelection()) {
-					try {
-						mscNfrs.add(r);
-					} catch (IllegalArgumentException e1) {
-						// TODO Auto-generated catch block
-						e1.printStackTrace();
-					}
-				}
-				project.setProjectNfrs(mscNfrs);
-				mcontainer.requestLayout();
-				}
-			}
-		});
-		microserviceListComposite.addContentChangeListener(new ContentChangeListener() {
-
-			@Override
-			public void contentChanged() {
-				refreshMicroservices(mcontainer);
-				mcontainer.requestLayout();
-				
-				int width = scrolledComposite.getClientArea().width/2;
-				scrolledComposite.setMinSize( mcontainer.computeSize( width, SWT.DEFAULT ) );
-			}
-			
-		});
-		
-		m_bindingContext = initDataBindings();
-		scrolledComposite.requestLayout();
-		requestLayout();
-		
-	}
-	
-	public void refreshContent(AppDescriptor project) {
-		this.project = project;
-		setContent();
-	}
-	
-	public void refreshMicroservices(Composite microserviceContainer) {
-		
-		Control[] children = microserviceContainer.getChildren();
-	    for (int i = 0 ; i < children.length; i++) {
-	        children[i].dispose();
-	    }
-	    addMicroservices(microserviceContainer);
-	}
-	
-	@Override
-	protected void checkSubclass() {
-		// Disable the check that prevents subclassing of SWT components
-	}
-	
-	
-	private void addMicroserviceComposite(Composite container,Microservice microservice){
-		MicroserviceComposite msvContainer = new MicroserviceComposite(container, microservice, background);
-		msvContainer.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		msvContainer.addContentChangeListener(new ContentChangeListener() {
-
-			@Override
-			public void contentChanged() {
-				microserviceListComposite.refresh();
-				
-			}
-			
-		});
-	}
-	
-	
-	private void addMicroservices(Composite container) {
-		if (project== null)return;
-		LinkedList<Microservice> microservices = project.getMicroservices();
-		if(microservices.size()>0){
-			for(Microservice m: microservices) {
-				addMicroserviceComposite(container,m);
-			}
-			
-		}
-		//to test in designer
-		
-			/*Microservice m = new Microservice();
-			addMicroserviceComposite(container,m);*/
-		
-		
-	}
-	protected DataBindingContext initDataBindings() {
-		DataBindingContext bindingContext = new DataBindingContext();
-		//
-		IObservableValue observeTextTxtProjectnameObserveWidget = WidgetProperties.text(new int[]{SWT.Modify, SWT.FocusOut}).observe(txtProjectname);
-		IObservableValue nameProjectObserveValue = PojoProperties.value("name").observe(project);
-		bindingContext.bindValue(observeTextTxtProjectnameObserveWidget, nameProjectObserveValue, null, null);
-		//
-		IObservableValue observeTextStyledTextObserveWidget = WidgetProperties.text(SWT.Modify).observe(styledText);
-		IObservableValue descriptionProjectObserveValue = PojoProperties.value("description").observe(project);
-		bindingContext.bindValue(observeTextStyledTextObserveWidget, descriptionProjectObserveValue, null, null);
-		//
-		return bindingContext;
-	}
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+
+import java.util.List;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.core.databinding.beans.PojoProperties;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Microservice;
+
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.jface.text.TextViewer;
+//Composite for the project page of the editor
+public class ProjectPageComposite extends Composite {
+	private DataBindingContext m_bindingContext;
+
+	private AppDescription project;
+	private Text txtProjectname;
+	private Color background;
+	private Composite pp = this;
+	private MicroserviceListComposite microserviceListComposite;
+	private StyledText styledText;
+	
+	
+	
+	/**
+	 * Create the composite.
+	 * @param parent
+	 * @param style
+	 */
+	public ProjectPageComposite(Composite parent, AppDescription project) {
+		super(parent, SWT.NONE);
+		
+		this.project = project;
+		background= SWTResourceManager.getColor(SWT.COLOR_WHITE);
+		setBackground(background);
+		setContent();
+		requestLayout();
+	}
+
+	private void setContent() {
+		Control[] children = this.getChildren();
+	    for (int i = 0 ; i < children.length; i++) {
+	        children[i].dispose();
+	    }
+		setLayout(new GridLayout(1, true));
+		
+		CLabel lblOverview = new CLabel(this, SWT.NONE);
+		lblOverview.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
+		lblOverview.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblOverview.setText("Overview");
+		
+		Label label = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
+		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		Composite container  = new Composite(this, SWT.NONE);
+		container.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));
+		container.setBackground(background);
+		GridLayout gl_container = new GridLayout(2,true);
+		gl_container.horizontalSpacing = 25;
+		container.setLayout(gl_container);
+		
+		CLabel lblProject = new CLabel(container, SWT.NONE);
+		lblProject.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
+		lblProject.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		lblProject.setBottomMargin(0);
+		lblProject.setTopMargin(0);
+		lblProject.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblProject.setText("Project");
+		
+		CLabel lblMicroservices = new CLabel(container, SWT.NONE);
+		lblMicroservices.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
+		lblMicroservices.setTopMargin(0);
+		lblMicroservices.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		lblMicroservices.setBottomMargin(0);
+		lblMicroservices.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblMicroservices.setText("Microservice List");
+		
+
+		
+		Composite composite = new Composite(container, SWT.NONE);
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
+		composite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		composite.setLayout(new GridLayout(1, false));
+		
+	
+		
+		
+		
+		Composite projectInfo = new Composite(composite, SWT.NONE);
+		projectInfo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		projectInfo.setSize(202, 130);
+		projectInfo.setBackground(background);
+		projectInfo.setLayout(new GridLayout(2, false));
+		
+		Label lblProjectname = new Label(projectInfo, SWT.NONE);
+		lblProjectname.setBackground(background);
+		lblProjectname.setSize(67, 15);
+		lblProjectname.setText("Projectname:");
+		
+		txtProjectname = new Text(projectInfo, SWT.BORDER);
+		txtProjectname.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		txtProjectname.setSize(74, 21);
+		
+		CLabel lblDescription = new CLabel(projectInfo, SWT.NONE);
+		lblDescription.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblDescription.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+		lblDescription.setText("Description");
+		
+		TextViewer textViewer = new TextViewer(projectInfo, SWT.BORDER | SWT.WRAP);
+		styledText = textViewer.getTextWidget();
+		GridData gd_styledText = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_styledText.minimumHeight = 80;
+		styledText.setLayoutData(gd_styledText);
+		
+		CLabel lblDeploymentOrder = new CLabel(composite, SWT.NONE);
+		lblDeploymentOrder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblDeploymentOrder.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
+		lblDeploymentOrder.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		lblDeploymentOrder.setBottomMargin(0);
+		lblDeploymentOrder.setTopMargin(0);
+		lblDeploymentOrder.setText("Microservices");
+		
+		microserviceListComposite = new MicroserviceListComposite(composite, SWT.NONE, project, false,SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		microserviceListComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));
+		
+		
+		
+		
+		
+		txtProjectname.addKeyListener(new KeyAdapter() {
+			@Override
+			public void keyPressed(KeyEvent e) {
+				if (project != null) project.setName(txtProjectname.getText());
+			}
+		});
+		
+		
+		
+		ScrolledComposite scrolledComposite = new ScrolledComposite(container, SWT.V_SCROLL);
+		
+		
+		scrolledComposite.addListener(SWT.Activate, new Listener() {
+	        public void handleEvent(Event e) {
+	            scrolledComposite.setFocus();
+	        }
+	    });
+		
+		  scrolledComposite.addListener(SWT.MouseVerticalWheel, new Listener() {
+	            public void handleEvent(Event event) {
+	                int wheelCount = event.count;
+	                wheelCount = (int) Math.ceil(wheelCount / 3.0f);
+	                while (wheelCount < 0) {
+	                    scrolledComposite.getVerticalBar().setIncrement(4);
+	                    wheelCount++;
+	                }
+
+	                while (wheelCount > 0) {
+	                    scrolledComposite.getVerticalBar().setIncrement(-4);
+	                    wheelCount--;
+	                }
+	            }
+	        });
+		  
+		scrolledComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		
+		
+		
+		Composite mcontainer = new Composite(scrolledComposite, SWT.NONE);
+		mcontainer.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		mcontainer.setLayout(new GridLayout(1, false));
+		addMicroservices(mcontainer);
+		mcontainer.requestLayout();
+		
+		scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
+		scrolledComposite.setContent(mcontainer);
+		scrolledComposite.setExpandVertical( true );
+		scrolledComposite.setExpandHorizontal( true );
+		int width = scrolledComposite.getClientArea().width/2;
+		scrolledComposite.setMinSize( mcontainer.computeSize( width, SWT.DEFAULT ) );
+		
+		scrolledComposite.addListener( SWT.Resize, event -> {
+			  final int w = scrolledComposite.getClientArea().width/2;
+			  scrolledComposite.setMinSize( mcontainer.computeSize( w, SWT.DEFAULT ) );
+			} );		
+		microserviceListComposite.addContentChangeListener(new ContentChangeListener() {
+
+			@Override
+			public void contentChanged() {
+				refreshMicroservices(mcontainer);
+				mcontainer.requestLayout();
+				
+				int width = scrolledComposite.getClientArea().width/2;
+				scrolledComposite.setMinSize( mcontainer.computeSize( width, SWT.DEFAULT ) );
+			}
+			
+		});
+		
+		m_bindingContext = initDataBindings();
+		scrolledComposite.requestLayout();
+		requestLayout();
+		
+	}
+	
+	public void refreshContent(AppDescription project) {
+		this.project = project;
+		setContent();
+	}
+	
+	public void refreshMicroservices(Composite microserviceContainer) {
+		
+		Control[] children = microserviceContainer.getChildren();
+	    for (int i = 0 ; i < children.length; i++) {
+	        children[i].dispose();
+	    }
+	    addMicroservices(microserviceContainer);
+	}
+	
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents subclassing of SWT components
+	}
+	
+	
+	private void addMicroserviceComposite(Composite container,Microservice microservice){
+		MicroserviceComposite msvContainer = new MicroserviceComposite(container, microservice, background, project);
+		msvContainer.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		msvContainer.addContentChangeListener(new ContentChangeListener() {
+
+			@Override
+			public void contentChanged() {
+				microserviceListComposite.refresh();
+				
+			}
+			
+		});
+	}
+	
+	
+	private void addMicroservices(Composite container) {
+		if (project== null)return;
+		List<Microservice> microservices = project.getMicroservices();
+		if(microservices.size()>0){
+			for(Microservice m: microservices) {
+				addMicroserviceComposite(container,m);
+			}
+			
+		}
+		//to test in designer
+		
+			/*Microservice m = new Microservice();
+			addMicroserviceComposite(container,m);*/
+		
+		
+	}
+	protected DataBindingContext initDataBindings() {
+		DataBindingContext bindingContext = new DataBindingContext();
+		//
+		IObservableValue observeTextTxtProjectnameObserveWidget = WidgetProperties.text(new int[]{SWT.Modify, SWT.FocusOut}).observe(txtProjectname);
+		IObservableValue nameProjectObserveValue = PojoProperties.value("name").observe(project);
+		bindingContext.bindValue(observeTextTxtProjectnameObserveWidget, nameProjectObserveValue, null, null);
+		//
+		IObservableValue observeTextStyledTextObserveWidget = WidgetProperties.text(SWT.Modify).observe(styledText);
+		IObservableValue descriptionProjectObserveValue = PojoProperties.value("description").observe(project);
+		bindingContext.bindValue(observeTextStyledTextObserveWidget, descriptionProjectObserveValue, null, null);
+		//
+		return bindingContext;
+	}
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/TagListViewer.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/TagListViewer.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5971f1067f62afb23ccc9f4f4342839cdad3ff5
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/layoutComponents/TagListViewer.java
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.layoutComponents;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import eu.DECIDEh2020.appManager.AppDescriptionHelper;
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Microservice;
+import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.jena.rdf.model.Resource;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.events.TraverseEvent;
+//composite for the list of tags a microservice can have
+public class TagListViewer extends Composite {
+	private static class TagLabelProvider extends LabelProvider {
+		public Image getImage(Object element) {
+			return null;
+		}
+
+		public String getText(Object element) {
+			return (String) element;
+		}
+	}
+
+	private static class TagContentProvider implements IStructuredContentProvider {
+		@SuppressWarnings("unchecked")
+		public Object[] getElements(Object inputElement) {
+			return ((Set<String>) inputElement).toArray();
+
+		}
+
+		public void dispose() {
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			viewer.refresh();
+		}
+	}
+
+	private List list;
+	private ListViewer listViewer;
+	private AppDescription appDescription;
+	private AppDescriptionHelper appDescriptionHelper;
+	private Set<String> allTags;
+	private Set<String> microserviceTags;
+	private Color background;
+
+	/**
+	 * Create the composite.
+	 * 
+	 * @param parent
+	 * @param style
+	 * @param microservice
+	 */
+	public TagListViewer(Composite parent, int style, Microservice microservice, AppDescription appDescription,Color background) {
+		super(parent, SWT.NONE);
+		this.background=background;
+		this.setBackground(background);
+		this.appDescription = appDescription;
+		appDescriptionHelper = AppDescriptionHelper.create(appDescription);
+		if (appDescription != null) {
+			allTags = appDescriptionHelper.getTags();
+		} else {
+			allTags = new HashSet<String>();
+		}
+		Patterns patterns = Patterns.createDefaultPatterns();
+		java.util.List<Resource> nfrs = patterns.listNFRs();
+		setLayout(new GridLayout(1, false));
+		
+		listViewer = new ListViewer(this, SWT.BORDER);
+		list = listViewer.getList();
+		GridData gd_list = new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1);
+		gd_list.minimumHeight = 75;
+		list.setLayoutData(gd_list);
+
+		Composite composite = new Composite(this, SWT.NONE);
+		composite.setBackground(background);
+		composite.setLayout(new GridLayout(5, false));
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+		Label lblAddTag = new Label(composite, SWT.NONE);
+		lblAddTag.setBackground(background);
+		lblAddTag.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+		lblAddTag.setText("Add Tag:");
+
+		ComboViewer comboViewer = new ComboViewer(composite, SWT.NONE);
+		Combo combo = comboViewer.getCombo();
+		
+		
+		combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+		comboViewer.setContentProvider(new ArrayContentProvider());
+		comboViewer.setInput(allTags);
+
+		Button btnAdd = new Button(composite, SWT.NONE);
+
+		GridData gd_btnAdd = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+		gd_btnAdd.widthHint = 50;
+		btnAdd.setLayoutData(gd_btnAdd);
+		btnAdd.setText("Add");
+
+		Composite composite_1 = new Composite(composite, SWT.NONE);
+		composite_1.setBackground(background);
+		composite_1.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+		composite_1.setLayout(new GridLayout(1, false));
+
+		Button btnRemove = new Button(composite, SWT.NONE);
+
+		GridData gd_btnRemove = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+		gd_btnRemove.widthHint = 50;
+		btnRemove.setLayoutData(gd_btnRemove);
+		btnRemove.setText("Remove");
+		if (microservice != null) {
+			microserviceTags = microservice.getTags().stream().collect(Collectors.toSet());
+		}
+		listViewer.setContentProvider(new TagContentProvider());
+		listViewer.setInput(microserviceTags);
+
+		btnAdd.addSelectionListener(new SelectionAdapter() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				addToList(microservice, appDescription, comboViewer, combo);
+
+			}
+		});
+		combo.addTraverseListener(new TraverseListener() {
+			public void keyTraversed(TraverseEvent e) {
+				if(e.detail == SWT.TRAVERSE_RETURN) {
+					addToList(microservice, appDescription, comboViewer, combo);
+				}
+			}
+		});
+
+		btnRemove.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+
+				if (list.getSelectionCount() > 0) {
+
+					for (String s : list.getSelection()) {
+						microserviceTags.remove(s);
+						microservice.setNfrs(microserviceTags.stream().collect(Collectors.toSet()).stream()
+								.collect(Collectors.toList()));
+					}
+
+					if (appDescription != null) {
+						allTags = appDescriptionHelper.getTags();
+					} else {
+						allTags = new HashSet<String>();
+					}
+					System.out.println(allTags);
+					comboViewer.refresh();
+					listViewer.refresh(true);
+				}
+			}
+		});
+	}
+	/**
+	 * @wbp.parser.constructor
+	 */
+	public TagListViewer(Composite parent, int style, Microservice microservice, AppDescription appDescription) {
+		this(parent, SWT.NONE,microservice, appDescription,SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
+	}
+	public java.util.List<Resource> getSelection() {
+
+		java.util.List<Resource> selection = listViewer.getStructuredSelection().toList();
+
+		return selection;
+
+	}
+
+	public void addSelection(java.util.List<String> nfrs) {
+
+		HashSet<String> selection = new HashSet<String>(Arrays.asList(list.getSelection()));
+
+		selection.addAll(nfrs);
+		list.setSelection(selection.toArray(new String[selection.size()]));
+
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents subclassing of SWT components
+	}
+
+	public void addSelectionListener(SelectionAdapter a) {
+		list.addSelectionListener(a);
+	}
+
+	private void addToList(Microservice microservice, AppDescription appDescription, ComboViewer comboViewer,
+			Combo combo) {
+		if (combo.getText().isEmpty())
+			return;
+		microserviceTags.add(combo.getText());
+		microservice.setNfrs(
+				microserviceTags.stream().collect(Collectors.toSet()).stream().collect(Collectors.toList()));
+
+		if (appDescription != null) {
+			allTags = appDescriptionHelper.getTags();
+		} else {
+			allTags = new HashSet<String>();
+		}
+		combo.setText("");
+		comboViewer.refresh();
+		listViewer.refresh(true);
+		combo.setFocus();
+	}
+
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/natures/AddRemoveDecideNatureHandler.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/natures/AddRemoveDecideNatureHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..bee9c9d60d185be4086352ee1b34b69db811d39e
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/natures/AddRemoveDecideNatureHandler.java
@@ -0,0 +1,82 @@
+package eu.DECIDEh2020.architect.plugin.natures;
+
+import java.util.Iterator;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+
+public class AddRemoveDecideNatureHandler extends AbstractHandler implements IHandler  {
+
+	
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		
+		ISelection selection = HandlerUtil.getCurrentSelection(event);
+		//
+		if (selection instanceof IStructuredSelection) {
+			for (Iterator<?> it = ((IStructuredSelection) selection).iterator(); it.hasNext();) {
+				Object element = it.next();
+				IProject project = null;
+				if (element instanceof IProject) {
+					project = (IProject) element;
+				} else if (element instanceof IAdaptable) {
+					project = ((IAdaptable) element).getAdapter(IProject.class);
+				}
+				if (project != null) {
+					try {
+						toggleNature(project);
+					} catch (CoreException e) {
+						//TODO log something
+						throw new ExecutionException("Failed to toggle nature", e);
+					}
+				}
+			}
+		}
+
+		return null;
+	}
+
+	
+
+	
+	/**
+	 * Toggles sample nature on a project
+	 *
+	 * @param project
+	 *            to have sample nature added or removed
+	 */
+	private void toggleNature(IProject project) throws CoreException {
+		IProjectDescription description = project.getDescription();
+		String[] natures = description.getNatureIds();
+
+		for (int i = 0; i < natures.length; ++i) {
+			if (ProjectNature.NATURE_ID.equals(natures[i])) {
+				// Remove the nature
+				String[] newNatures = new String[natures.length - 1];
+				System.arraycopy(natures, 0, newNatures, 0, i);
+				System.arraycopy(natures, i + 1, newNatures, i, natures.length - i - 1);
+				description.setNatureIds(newNatures);
+				project.setDescription(description, null);
+				return;
+			}
+		}
+
+		// Add the nature
+		String[] newNatures = new String[natures.length + 1];
+		System.arraycopy(natures, 0, newNatures, 0, natures.length);
+		newNatures[natures.length] = ProjectNature.NATURE_ID;
+		description.setNatureIds(newNatures);
+		project.setDescription(description, null);
+	}
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/natures/ProjectNature.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/natures/ProjectNature.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2434a8f7b711076ea5f1be967cd4542cac52a88
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/natures/ProjectNature.java
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.natures;
+
+import org.eclipse.core.resources.ICommand;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IProjectNature;
+import org.eclipse.core.runtime.CoreException;
+
+import eu.DECIDEh2020.architect.plugin.builder.DecideBuilder;
+
+//toggle to add/remove the Decide Projetnature to the project
+public class ProjectNature implements IProjectNature {
+	public static final String NATURE_ID = "eu.DECIDEh2020.architect.plugin.ProjectNature"; //$NON-NLS-1$
+
+	private IProject project;
+	
+	@Override
+	public void configure() throws CoreException {
+		IProjectDescription desc = project.getDescription();
+		ICommand[] commands = desc.getBuildSpec();
+
+		for (int i = 0; i < commands.length; ++i) {
+			if (commands[i].getBuilderName().equals(DecideBuilder.BUILDER_ID)) {
+				return;
+			}
+		}
+
+		ICommand[] newCommands = new ICommand[commands.length + 1];
+		System.arraycopy(commands, 0, newCommands, 0, commands.length);
+		ICommand command = desc.newCommand();
+		command.setBuilderName(DecideBuilder.BUILDER_ID);
+		newCommands[newCommands.length - 1] = command;
+		desc.setBuildSpec(newCommands);
+		project.setDescription(desc, null);
+		
+	}
+
+	@Override
+	public void deconfigure() throws CoreException {
+
+		IProjectDescription description = getProject().getDescription();
+		ICommand[] commands = description.getBuildSpec();
+		for (int i = 0; i < commands.length; ++i) {
+			if (commands[i].getBuilderName().equals(DecideBuilder.BUILDER_ID)) {
+				ICommand[] newCommands = new ICommand[commands.length - 1];
+				System.arraycopy(commands, 0, newCommands, 0, i);
+				System.arraycopy(commands, i + 1, newCommands, i,
+						commands.length - i - 1);
+				description.setBuildSpec(newCommands);
+				project.setDescription(description, null);
+				return;
+			}
+		}
+
+	}
+
+	@Override
+	public IProject getProject() {
+		return project;
+	}
+
+	@Override
+	public void setProject(IProject project) {
+		this.project = project;
+	}
+
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/perspectives/Perspective.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/perspectives/Perspective.java
similarity index 89%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/perspectives/Perspective.java
rename to ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/perspectives/Perspective.java
index 7585ea704a5ecdaa80495a15576112f02af41aac..5b43504158ad67999f21a4a52f0a5bbd55b6d811 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/perspectives/Perspective.java
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/perspectives/Perspective.java
@@ -1,27 +1,27 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.perspectives;
-
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-
-public class Perspective implements IPerspectiveFactory {
-
-	@Override
-	public void createInitialLayout(IPageLayout layout) {
-		// TODO Auto-generated method stub
-
-	}
-
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.plugin.perspectives;
+
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+//TODO: create a useful perspective for the decide Editor
+public class Perspective implements IPerspectiveFactory {
+
+	@Override
+	public void createInitialLayout(IPageLayout layout) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
diff --git a/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/utils/CloudPatternHelper.java b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/utils/CloudPatternHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..2078ffbcd10738c562f01f34ad14277f2fd8f4a4
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/eu/DECIDEh2020/architect/plugin/utils/CloudPatternHelper.java
@@ -0,0 +1,43 @@
+package eu.DECIDEh2020.architect.plugin.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.core.runtime.Status;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import eu.DECIDEh2020.appManager.models.Nfr;
+import eu.DECIDEh2020.appManager.models.Pattern;
+import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
+import eu.DECIDEh2020.architect.plugin.Activator;
+
+public class CloudPatternHelper {
+
+	public static ObjectNode getPattern(String uriRef) {
+		return Patterns.createDefaultPatterns().getPatternAsJson(uriRef);
+	}
+
+	public static List<Pattern> inferPatterns(List<Nfr> nfrs) {
+		if(nfrs == null || nfrs.isEmpty()) {
+			return new ArrayList<>();
+		}
+		
+		ObjectMapper mapper = new ObjectMapper();
+		List<ObjectNode> patternNodes = Patterns.createDefaultPatterns().inferPatternsJson(nfrs.stream().map(nfr -> (ObjectNode)mapper.valueToTree(nfr)).collect(Collectors.toList()));
+
+		List<Pattern> patterns = new ArrayList<>();
+		patternNodes.forEach(pattern -> {
+			try {
+				patterns.add(mapper.treeToValue(pattern, Pattern.class));
+			} catch (JsonProcessingException e) {
+				Activator.getDefault().getLog().log(new Status(Status.ERROR, Activator.PLUGIN_ID, "Map pattern class.", e));
+			}
+		});
+		return patterns;
+	}
+	
+}
diff --git a/ARCHITECT/architect/editor/src/org/eclipse/wb/swt/ResourceManager.java b/ARCHITECT/architect/editor/src/org/eclipse/wb/swt/ResourceManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..9cb50913a3e246f5d0b55f41bbd99b42a946896c
--- /dev/null
+++ b/ARCHITECT/architect/editor/src/org/eclipse/wb/swt/ResourceManager.java
@@ -0,0 +1,415 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Google, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Google, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wb.swt;
+
+import java.io.File;
+import java.io.InputStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.CompositeImageDescriptor;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.osgi.framework.Bundle;
+
+/**
+ * Utility class for managing OS resources associated with SWT/JFace controls such as colors, fonts, images,
+ * etc.
+ * 
+ * !!! IMPORTANT !!! Application code must explicitly invoke the <code>dispose()</code> method to release the
+ * operating system resources managed by cached objects when those objects and OS resources are no longer
+ * needed (e.g. on application shutdown)
+ * 
+ * This class may be freely distributed as part of any application or plugin.
+ * <p>
+ * 
+ * @author scheglov_ke
+ * @author Dan Rubel
+ */
+public class ResourceManager extends SWTResourceManager {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<ImageDescriptor, Image> m_descriptorImageMap = new HashMap<ImageDescriptor, Image>();
+	/**
+	 * Returns an {@link ImageDescriptor} stored in the file at the specified path relative to the specified
+	 * class.
+	 * 
+	 * @param clazz
+	 *            the {@link Class} relative to which to find the image descriptor.
+	 * @param path
+	 *            the path to the image file.
+	 * @return the {@link ImageDescriptor} stored in the file at the specified path.
+	 */
+	public static ImageDescriptor getImageDescriptor(Class<?> clazz, String path) {
+		return ImageDescriptor.createFromFile(clazz, path);
+	}
+	/**
+	 * Returns an {@link ImageDescriptor} stored in the file at the specified path.
+	 * 
+	 * @param path
+	 *            the path to the image file.
+	 * @return the {@link ImageDescriptor} stored in the file at the specified path.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		try {
+			return ImageDescriptor.createFromURL(new File(path).toURI().toURL());
+		} catch (MalformedURLException e) {
+			return null;
+		}
+	}
+	/**
+	 * Returns an {@link Image} based on the specified {@link ImageDescriptor}.
+	 * 
+	 * @param descriptor
+	 *            the {@link ImageDescriptor} for the {@link Image}.
+	 * @return the {@link Image} based on the specified {@link ImageDescriptor}.
+	 */
+	public static Image getImage(ImageDescriptor descriptor) {
+		if (descriptor == null) {
+			return null;
+		}
+		Image image = m_descriptorImageMap.get(descriptor);
+		if (image == null) {
+			image = descriptor.createImage();
+			m_descriptorImageMap.put(descriptor, image);
+		}
+		return image;
+	}
+	/**
+	 * Maps images to decorated images.
+	 */
+	@SuppressWarnings("unchecked")
+	private static Map<Image, Map<Image, Image>>[] m_decoratedImageMap = new Map[LAST_CORNER_KEY];
+	/**
+	 * Returns an {@link Image} composed of a base image decorated by another image.
+	 * 
+	 * @param baseImage
+	 *            the base {@link Image} that should be decorated.
+	 * @param decorator
+	 *            the {@link Image} to decorate the base image.
+	 * @return {@link Image} The resulting decorated image.
+	 */
+	public static Image decorateImage(Image baseImage, Image decorator) {
+		return decorateImage(baseImage, decorator, BOTTOM_RIGHT);
+	}
+	/**
+	 * Returns an {@link Image} composed of a base image decorated by another image.
+	 * 
+	 * @param baseImage
+	 *            the base {@link Image} that should be decorated.
+	 * @param decorator
+	 *            the {@link Image} to decorate the base image.
+	 * @param corner
+	 *            the corner to place decorator image.
+	 * @return the resulting decorated {@link Image}.
+	 */
+	public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
+		if (corner <= 0 || corner >= LAST_CORNER_KEY) {
+			throw new IllegalArgumentException("Wrong decorate corner");
+		}
+		Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[corner];
+		if (cornerDecoratedImageMap == null) {
+			cornerDecoratedImageMap = new HashMap<Image, Map<Image, Image>>();
+			m_decoratedImageMap[corner] = cornerDecoratedImageMap;
+		}
+		Map<Image, Image> decoratedMap = cornerDecoratedImageMap.get(baseImage);
+		if (decoratedMap == null) {
+			decoratedMap = new HashMap<Image, Image>();
+			cornerDecoratedImageMap.put(baseImage, decoratedMap);
+		}
+		//
+		Image result = decoratedMap.get(decorator);
+		if (result == null) {
+			final Rectangle bib = baseImage.getBounds();
+			final Rectangle dib = decorator.getBounds();
+			final Point baseImageSize = new Point(bib.width, bib.height);
+			CompositeImageDescriptor compositImageDesc = new CompositeImageDescriptor() {
+				@Override
+				protected void drawCompositeImage(int width, int height) {
+					drawImage(baseImage.getImageData(), 0, 0);
+					if (corner == TOP_LEFT) {
+						drawImage(decorator.getImageData(), 0, 0);
+					} else if (corner == TOP_RIGHT) {
+						drawImage(decorator.getImageData(), bib.width - dib.width, 0);
+					} else if (corner == BOTTOM_LEFT) {
+						drawImage(decorator.getImageData(), 0, bib.height - dib.height);
+					} else if (corner == BOTTOM_RIGHT) {
+						drawImage(decorator.getImageData(), bib.width - dib.width, bib.height - dib.height);
+					}
+				}
+				@Override
+				protected Point getSize() {
+					return baseImageSize;
+				}
+			};
+			//
+			result = compositImageDesc.createImage();
+			decoratedMap.put(decorator, result);
+		}
+		return result;
+	}
+	/**
+	 * Dispose all of the cached images.
+	 */
+	public static void disposeImages() {
+		SWTResourceManager.disposeImages();
+		// dispose ImageDescriptor images
+		{
+			for (Iterator<Image> I = m_descriptorImageMap.values().iterator(); I.hasNext();) {
+				I.next().dispose();
+			}
+			m_descriptorImageMap.clear();
+		}
+		// dispose decorated images
+		for (int i = 0; i < m_decoratedImageMap.length; i++) {
+			Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[i];
+			if (cornerDecoratedImageMap != null) {
+				for (Map<Image, Image> decoratedMap : cornerDecoratedImageMap.values()) {
+					for (Image image : decoratedMap.values()) {
+						image.dispose();
+					}
+					decoratedMap.clear();
+				}
+				cornerDecoratedImageMap.clear();
+			}
+		}
+		// dispose plugin images
+		{
+			for (Iterator<Image> I = m_URLImageMap.values().iterator(); I.hasNext();) {
+				I.next().dispose();
+			}
+			m_URLImageMap.clear();
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Plugin images support
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Maps URL to images.
+	 */
+	private static Map<String, Image> m_URLImageMap = new HashMap<String, Image>();
+	/**
+	 * Provider for plugin resources, used by WindowBuilder at design time.
+	 */
+	public interface PluginResourceProvider {
+		URL getEntry(String symbolicName, String path);
+	}
+	/**
+	 * Instance of {@link PluginResourceProvider}, used by WindowBuilder at design time.
+	 */
+	private static PluginResourceProvider m_designTimePluginResourceProvider = null;
+	/**
+	 * Returns an {@link Image} based on a plugin and file path.
+	 * 
+	 * @param plugin
+	 *            the plugin {@link Object} containing the image
+	 * @param name
+	 *            the path to the image within the plugin
+	 * @return the {@link Image} stored in the file at the specified path
+	 * 
+	 * @deprecated Use {@link #getPluginImage(String, String)} instead.
+	 */
+	@Deprecated
+	public static Image getPluginImage(Object plugin, String name) {
+		try {
+			URL url = getPluginImageURL(plugin, name);
+			if (url != null) {
+				return getPluginImageFromUrl(url);
+			}
+		} catch (Throwable e) {
+			// Ignore any exceptions
+		}
+		return null;
+	}
+	/**
+	 * Returns an {@link Image} based on a {@link Bundle} and resource entry path.
+	 * 
+	 * @param symbolicName
+	 *            the symbolic name of the {@link Bundle}.
+	 * @param path
+	 *            the path of the resource entry.
+	 * @return the {@link Image} stored in the file at the specified path.
+	 */
+	public static Image getPluginImage(String symbolicName, String path) {
+		try {
+			URL url = getPluginImageURL(symbolicName, path);
+			if (url != null) {
+				return getPluginImageFromUrl(url);
+			}
+		} catch (Throwable e) {
+			// Ignore any exceptions
+		}
+		return null;
+	}
+	/**
+	 * Returns an {@link Image} based on given {@link URL}.
+	 */
+	private static Image getPluginImageFromUrl(URL url) {
+		try {
+			try {
+				String key = url.toExternalForm();
+				Image image = m_URLImageMap.get(key);
+				if (image == null) {
+					InputStream stream = url.openStream();
+					try {
+						image = getImage(stream);
+						m_URLImageMap.put(key, image);
+					} finally {
+						stream.close();
+					}
+				}
+				return image;
+			} catch (Throwable e) {
+				// Ignore any exceptions
+			}
+		} catch (Throwable e) {
+			// Ignore any exceptions
+		}
+		return null;
+	}
+	/**
+	 * Returns an {@link ImageDescriptor} based on a plugin and file path.
+	 * 
+	 * @param plugin
+	 *            the plugin {@link Object} containing the image.
+	 * @param name
+	 *            the path to th eimage within the plugin.
+	 * @return the {@link ImageDescriptor} stored in the file at the specified path.
+	 * 
+	 * @deprecated Use {@link #getPluginImageDescriptor(String, String)} instead.
+	 */
+	@Deprecated
+	public static ImageDescriptor getPluginImageDescriptor(Object plugin, String name) {
+		try {
+			try {
+				URL url = getPluginImageURL(plugin, name);
+				return ImageDescriptor.createFromURL(url);
+			} catch (Throwable e) {
+				// Ignore any exceptions
+			}
+		} catch (Throwable e) {
+			// Ignore any exceptions
+		}
+		return null;
+	}
+	/**
+	 * Returns an {@link ImageDescriptor} based on a {@link Bundle} and resource entry path.
+	 * 
+	 * @param symbolicName
+	 *            the symbolic name of the {@link Bundle}.
+	 * @param path
+	 *            the path of the resource entry.
+	 * @return the {@link ImageDescriptor} based on a {@link Bundle} and resource entry path.
+	 */
+	public static ImageDescriptor getPluginImageDescriptor(String symbolicName, String path) {
+		try {
+			URL url = getPluginImageURL(symbolicName, path);
+			if (url != null) {
+				return ImageDescriptor.createFromURL(url);
+			}
+		} catch (Throwable e) {
+			// Ignore any exceptions
+		}
+		return null;
+	}
+	/**
+	 * Returns an {@link URL} based on a {@link Bundle} and resource entry path.
+	 */
+	private static URL getPluginImageURL(String symbolicName, String path) {
+		// try runtime plugins
+		{
+			Bundle bundle = Platform.getBundle(symbolicName);
+			if (bundle != null) {
+				return bundle.getEntry(path);
+			}
+		}
+		// try design time provider
+		if (m_designTimePluginResourceProvider != null) {
+			return m_designTimePluginResourceProvider.getEntry(symbolicName, path);
+		}
+		// no such resource
+		return null;
+	}
+	/**
+	 * Returns an {@link URL} based on a plugin and file path.
+	 * 
+	 * @param plugin
+	 *            the plugin {@link Object} containing the file path.
+	 * @param name
+	 *            the file path.
+	 * @return the {@link URL} representing the file at the specified path.
+	 * @throws Exception
+	 */
+	private static URL getPluginImageURL(Object plugin, String name) throws Exception {
+		// try to work with 'plugin' as with OSGI BundleContext
+		try {
+			Class<?> BundleClass = Class.forName("org.osgi.framework.Bundle"); //$NON-NLS-1$
+			Class<?> BundleContextClass = Class.forName("org.osgi.framework.BundleContext"); //$NON-NLS-1$
+			if (BundleContextClass.isAssignableFrom(plugin.getClass())) {
+				Method getBundleMethod = BundleContextClass.getMethod("getBundle", new Class[0]); //$NON-NLS-1$
+				Object bundle = getBundleMethod.invoke(plugin, new Object[0]);
+				//
+				Class<?> PathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
+				Constructor<?> pathConstructor = PathClass.getConstructor(new Class[]{String.class});
+				Object path = pathConstructor.newInstance(new Object[]{name});
+				//
+				Class<?> IPathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
+				Class<?> PlatformClass = Class.forName("org.eclipse.core.runtime.Platform"); //$NON-NLS-1$
+				Method findMethod = PlatformClass.getMethod("find", new Class[]{BundleClass, IPathClass}); //$NON-NLS-1$
+				return (URL) findMethod.invoke(null, new Object[]{bundle, path});
+			}
+		} catch (Throwable e) {
+			// Ignore any exceptions
+		}
+		// else work with 'plugin' as with usual Eclipse plugin
+		{
+			Class<?> PluginClass = Class.forName("org.eclipse.core.runtime.Plugin"); //$NON-NLS-1$
+			if (PluginClass.isAssignableFrom(plugin.getClass())) {
+				//
+				Class<?> PathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
+				Constructor<?> pathConstructor = PathClass.getConstructor(new Class[]{String.class});
+				Object path = pathConstructor.newInstance(new Object[]{name});
+				//
+				Class<?> IPathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
+				Method findMethod = PluginClass.getMethod("find", new Class[]{IPathClass}); //$NON-NLS-1$
+				return (URL) findMethod.invoke(plugin, new Object[]{path});
+			}
+		}
+		return null;
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// General
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Dispose of cached objects and their underlying OS resources. This should only be called when the cached
+	 * objects are no longer needed (e.g. on application shutdown).
+	 */
+	public static void dispose() {
+		disposeColors();
+		disposeFonts();
+		disposeImages();
+	}
+}
\ No newline at end of file
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/org/eclipse/wb/swt/SWTResourceManager.java b/ARCHITECT/architect/editor/src/org/eclipse/wb/swt/SWTResourceManager.java
similarity index 99%
rename from ARCHITECT/EclipsePlugin/plugin/src/org/eclipse/wb/swt/SWTResourceManager.java
rename to ARCHITECT/architect/editor/src/org/eclipse/wb/swt/SWTResourceManager.java
index d8a285807adcefed53ca8b9d3af0f7d9881e1a13..8b6d4cc3ffec8aceabd59822e031990300d2e59a 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/org/eclipse/wb/swt/SWTResourceManager.java
+++ b/ARCHITECT/architect/editor/src/org/eclipse/wb/swt/SWTResourceManager.java
@@ -1,13 +1,13 @@
-/*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Google, Inc. - initial API and implementation
- *******************************************************************************/
+/*******************************************************************************
+ * Copyright (c) 2011 Google, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Google, Inc. - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.wb.swt;
 
 import java.io.FileInputStream;
diff --git a/ARCHITECT/EclipsePlugin/feature/build.properties b/ARCHITECT/architect/feature/build.properties
similarity index 96%
rename from ARCHITECT/EclipsePlugin/feature/build.properties
rename to ARCHITECT/architect/feature/build.properties
index 64f93a9f0b7328eb563aa5ad6cec7f828020e124..82ab19c62d182db3688b1af6e6f465a74265ac92 100644
--- a/ARCHITECT/EclipsePlugin/feature/build.properties
+++ b/ARCHITECT/architect/feature/build.properties
@@ -1 +1 @@
-bin.includes = feature.xml
+bin.includes = feature.xml
diff --git a/ARCHITECT/architect/feature/feature.xml b/ARCHITECT/architect/feature/feature.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ea2d17ba3688c46c8f042c48466bd7f414bb5fc9
--- /dev/null
+++ b/ARCHITECT/architect/feature/feature.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="eu.DECIDEh2020.architect.feature"
+      label="ARCHITECT"
+      version="1.0.1">
+
+   <description url="http://decide-h2020.eu/">
+      ARCHITECT description
+   </description>
+
+   <copyright url="http://www.example.com/copyright">
+      (C) 2017
+   </copyright>
+
+   <license url="http://www.example.com/license">
+      ARCHITECT license agreement
+   </license>
+
+   <requires>
+      <import plugin="org.eclipse.swt"/>
+      <import plugin="org.eclipse.ui" version="3.109.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui.ide" version="3.13.1" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui.views" version="3.9.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.jface.databinding" version="1.8.100" match="greaterOrEqual"/>
+      <import plugin="org.apache.log4j"/>
+      <import plugin="org.eclipse.core.runtime" version="3.13.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.e4.core.di" version="1.6.100" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.core.resources" version="3.12.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="eu.DECIDEh2020.architect.patterns"
+         download-size="0"
+         install-size="0"
+         version="1.0.1"
+         unpack="false"/>
+
+   <plugin
+         id="eu.DECIDEh2020.architect.plugin"
+         download-size="0"
+         install-size="0"
+         version="1.0.1"
+         unpack="false"/>
+
+</feature>
diff --git a/ARCHITECT/EclipsePlugin/feature/pom.xml b/ARCHITECT/architect/feature/pom.xml
similarity index 66%
rename from ARCHITECT/EclipsePlugin/feature/pom.xml
rename to ARCHITECT/architect/feature/pom.xml
index f87c13d44fe5dae3fcb3d8c87ab446e2630662b7..3655d812de47da4dee013af6ae1bf879760a8b5c 100644
--- a/ARCHITECT/EclipsePlugin/feature/pom.xml
+++ b/ARCHITECT/architect/feature/pom.xml
@@ -1,11 +1,11 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>eu.DECIDEh2020.architect.feature</artifactId>
-  <packaging>eclipse-feature</packaging>
-  <parent>
-  	<groupId>de.decideh2020</groupId>
-  	<artifactId>eu.DECIDEh2020.architect.releng</artifactId>
-  	<version>1.0.0-SNAPSHOT</version>
-  	<relativePath>../releng</relativePath>
-  </parent>
-</project>
\ No newline at end of file
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>eu.DECIDEh2020.architect.feature</artifactId>
+  <packaging>eclipse-feature</packaging>
+  <parent>
+  	<groupId>eu.DECIDEh2020</groupId>
+  	<artifactId>architect</artifactId>
+  	<version>1.0.1</version>
+  	<relativePath>..</relativePath>
+  </parent>
+</project>
diff --git a/ARCHITECT/architect/patterns/META-INF/MANIFEST.MF b/ARCHITECT/architect/patterns/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..4282afc8c210a4181d02b5d9e7e612c57a680f1e
--- /dev/null
+++ b/ARCHITECT/architect/patterns/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Patterns
+Bundle-SymbolicName: eu.DECIDEh2020.architect.patterns;singleton:=true
+Bundle-Version: 1.0.1
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: eu.DECIDEh2020.architect.plugin;bundle-version="1.0.1",
+ org.eclipse.swt,
+ org.eclipse.ui;bundle-version="3.109.0",
+ org.eclipse.ui.ide;bundle-version="3.13.1",
+ org.eclipse.ui.views;bundle-version="3.9.0",
+ org.eclipse.jface.databinding;bundle-version="1.8.100",
+ org.apache.log4j,
+ org.eclipse.core.runtime;bundle-version="3.13.0",
+ org.eclipse.e4.core.di;bundle-version="1.6.100",
+ org.eclipse.core.resources;bundle-version="3.12.0"
+Automatic-Module-Name: eu.DECIDEh2020.architect.patterns
+Bundle-ClassPath: .
+
diff --git a/ARCHITECT/architect/patterns/build.properties b/ARCHITECT/architect/patterns/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..19e2d9a08dd6fa3325fb3328f958b292b1c886fa
--- /dev/null
+++ b/ARCHITECT/architect/patterns/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = target/classes
+bin.includes = META-INF/,\
+               plugin.xml,\
+               .
diff --git a/ARCHITECT/architect/patterns/plugin.xml b/ARCHITECT/architect/patterns/plugin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8f5e0658053d58a08dd6beb6e816978ef5d184ba
--- /dev/null
+++ b/ARCHITECT/architect/patterns/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         id="eu.DECIDEh2020.architect.extension"
+         name="Editor"
+         point="eu.DECIDEh2020.architect.extension">
+      <pagebuilder
+            PageName="Patterns"
+            class="eu.DECIDEh2020.architect.patterns.composites.PatternPageBuilder">
+      </pagebuilder>
+   </extension>
+   <extension
+         id="patterns"
+         point="org.eclipse.core.runtime.products">
+      <product
+            application="org.eclipse.ui.ide.workbench"
+            name="Patterns">
+      </product>
+   </extension>
+
+</plugin>
diff --git a/ARCHITECT/architect/patterns/pom.xml b/ARCHITECT/architect/patterns/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d9a24afa8461f85c70e7f640d373f868e6eabeb4
--- /dev/null
+++ b/ARCHITECT/architect/patterns/pom.xml
@@ -0,0 +1,15 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>eu.DECIDEh2020.architect.patterns</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+	<parent>
+		<groupId>eu.DECIDEh2020</groupId>
+		<artifactId>architect</artifactId>
+		<version>1.0.1</version>
+		<relativePath>..</relativePath>
+	</parent>
+
+</project>
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PatternDetailComposite.java b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternDetailComposite.java
similarity index 71%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PatternDetailComposite.java
rename to ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternDetailComposite.java
index e0f1ca12f020302355450fe8e9f9831d3cec5564..0862baa25f16590719a2bd5082c6d12449c60b38 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PatternDetailComposite.java
+++ b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternDetailComposite.java
@@ -1,139 +1,138 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.wb.swt.SWTResourceManager;
-
-import eu.DECIDEh2020.architect.cloudpatterns.DP;
-
-import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.rdf.model.Statement;
-import org.apache.jena.vocabulary.DCTerms;
-import org.apache.jena.vocabulary.SKOS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.browser.Browser;
-
-public class PatternDetailComposite extends Composite {
-	private Text txtPatternType;
-	private Resource pattern;
-	private Text txtSubject;
-	private Text txtDescription;
-	private Text txtContext;
-	private Text txtSolution;
-	/**
-	 * Create the composite.
-	 * @param parent
-	 * @param style
-	 */
-	public PatternDetailComposite(Composite parent, int style) {
-		super(parent, style);
-		
-		createGUI();
-		
-
-	}
-	private void createGUI() {
-		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		setLayout(new GridLayout(2, false));
-		
-		Label lblPatternType = new Label(this, SWT.NONE);
-		lblPatternType.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
-		lblPatternType.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		lblPatternType.setText("Type:");
-		
-		txtPatternType = new Text(this, SWT.BORDER | SWT.READ_ONLY);
-		txtPatternType.setText("Fundamental Pattern");
-		txtPatternType.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Label lblSubject = new Label(this, SWT.NONE);
-		lblSubject.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
-		lblSubject.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		lblSubject.setText("Subject:");
-		
-		txtSubject = new Text(this, SWT.BORDER | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
-		txtSubject.setText("subject");
-		GridData gd_txtSubject = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
-		gd_txtSubject.heightHint = 50;
-		txtSubject.setLayoutData(gd_txtSubject);
-		
-		Label lblDescription = new Label(this, SWT.NONE);
-		lblDescription.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
-		lblDescription.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		lblDescription.setText("Description:");
-		
-		txtDescription = new Text(this, SWT.BORDER | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL | SWT.MULTI);
-		txtDescription.setText("description");
-		GridData gd_txtDescription = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
-		gd_txtDescription.heightHint = 75;
-		txtDescription.setLayoutData(gd_txtDescription);
-		
-		Label lblContext = new Label(this, SWT.NONE);
-		lblContext.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
-		lblContext.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		lblContext.setText("Context:");
-		
-		txtContext = new Text(this, SWT.BORDER | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
-		txtContext.setText("context");
-		GridData gd_txtContext = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
-		gd_txtContext.heightHint = 75;
-		txtContext.setLayoutData(gd_txtContext);
-		
-		Label lblSolution = new Label(this, SWT.NONE);
-		lblSolution.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
-		lblSolution.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		lblSolution.setText("Solution:");
-		
-		txtSolution = new Text(this, SWT.BORDER | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL | SWT.MULTI);
-		txtSolution.setText("solution");
-		GridData gd_txtSolution = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
-		gd_txtSolution.heightHint = 75;
-		txtSolution.setLayoutData(gd_txtSolution);
-		updatePattern(null);
-	}
-
-	public void updatePattern(Resource pattern) {
-		txtPatternType.setText(pattern!=null?pattern.getProperty(DCTerms.type).getResource().getProperty(SKOS.prefLabel).getString():"");
-		if(pattern!=null) {
-		
-			
-		Statement stmt = pattern.getProperty(DCTerms.subject);
-		
-		txtSubject.setText(stmt!=null?stmt.getString():"");
-		stmt= pattern.getProperty(DCTerms.description);
-		txtDescription.setText(stmt!=null?stmt.getString():"");
-		stmt= pattern.getProperty(DP.context);
-		txtContext.setText(stmt!=null?stmt.getString():"");
-		stmt= pattern.getProperty(DP.solution);
-		txtSolution.setText(stmt!=null?stmt.getString():"");
-		}else {
-			txtSubject.setText("");
-			txtDescription.setText("");
-			txtContext.setText("");
-			txtSolution.setText("");
-			
-		}
-		
-		redraw();
-	}
-	@Override
-	protected void checkSubclass() {
-		// Disable the check that prevents subclassing of SWT components
-	}
-
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.patterns.composites;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.layout.GridLayout;
+
+
+
+
+import eu.DECIDEh2020.appManager.models.Pattern;
+import eu.DECIDEh2020.architect.plugin.utils.CloudPatternHelper;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import org.eclipse.swt.layout.GridData;
+
+public class PatternDetailComposite extends Composite {
+
+	private Text txtPatternTitle;
+	private Text txtSubject;
+	private Text txtDescription;
+	private Text txtContext;
+	private Text txtSolution;
+
+	/**
+	 * Create the composite.
+	 * @param parent
+	 * @param style
+	 */
+
+	public PatternDetailComposite(Composite parent, int style) {
+		super(parent, style);
+		createGUI();
+	}
+
+	private void createGUI() {
+		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		setLayout(new GridLayout(2, false));
+		
+		Label lblPatternTitle = new Label(this, SWT.NONE);
+		lblPatternTitle.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+		lblPatternTitle.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblPatternTitle.setText("Title:");
+		
+		txtPatternTitle = new Text(this, SWT.BORDER | SWT.READ_ONLY);
+		txtPatternTitle.setText("Fundamental Pattern");
+		txtPatternTitle.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		Label lblSubject = new Label(this, SWT.NONE);
+		lblSubject.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+		lblSubject.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblSubject.setText("Subject:");
+		
+		txtSubject = new Text(this, SWT.BORDER | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+		txtSubject.setText("subject");
+		GridData gd_txtSubject = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_txtSubject.heightHint = 50;
+		txtSubject.setLayoutData(gd_txtSubject);
+		
+		Label lblDescription = new Label(this, SWT.NONE);
+		lblDescription.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+		lblDescription.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblDescription.setText("Description:");
+		
+		txtDescription = new Text(this, SWT.BORDER | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL | SWT.MULTI);
+		txtDescription.setText("description");
+		GridData gd_txtDescription = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_txtDescription.heightHint = 75;
+		txtDescription.setLayoutData(gd_txtDescription);
+		
+		Label lblContext = new Label(this, SWT.NONE);
+		lblContext.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+		lblContext.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblContext.setText("Context:");
+		
+		txtContext = new Text(this, SWT.BORDER | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);
+		txtContext.setText("context");
+		GridData gd_txtContext = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_txtContext.heightHint = 75;
+		txtContext.setLayoutData(gd_txtContext);
+		
+		Label lblSolution = new Label(this, SWT.NONE);
+		lblSolution.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+		lblSolution.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblSolution.setText("Solution:");
+		
+		txtSolution = new Text(this, SWT.BORDER | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL | SWT.MULTI);
+		txtSolution.setText("solution");
+		GridData gd_txtSolution = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_txtSolution.heightHint = 75;
+		txtSolution.setLayoutData(gd_txtSolution);
+		updatePattern(null);
+	}
+
+	public void updatePattern(Pattern pattern) {
+
+		if (pattern != null) {
+			ObjectNode node = CloudPatternHelper.getPattern(pattern.getUriRef());
+			
+			txtPatternTitle.setText(pattern.getTitle() !=null ? pattern.getTitle() : "");
+			txtSubject.setText(node.path("subject").asText(""));
+			txtDescription.setText(node.path("description").asText(""));
+			txtContext.setText(node.path("context").asText(""));
+			txtSolution.setText(node.path("solution").asText(""));
+		} else {
+			txtPatternTitle.setText("");
+			txtSubject.setText("");
+			txtDescription.setText("");
+			txtContext.setText("");
+			txtSolution.setText("");
+		}
+		
+		redraw();
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents subclassing of SWT components
+	}
+
+}
\ No newline at end of file
diff --git a/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageBuilder.java b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..fab04dc6cff1c90619543236e1b6b3a6855cde40
--- /dev/null
+++ b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageBuilder.java
@@ -0,0 +1,33 @@
+package eu.DECIDEh2020.architect.patterns.composites;
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+
+import org.eclipse.swt.widgets.Composite;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.architect.plugin.editor.IPageBuilder;
+import eu.DECIDEh2020.architect.plugin.editor.Page;
+
+public class PatternPageBuilder implements IPageBuilder {
+
+	public PatternPageBuilder() {
+		super();
+	}
+
+	@Override
+	public  Page getPage(Composite parent, int style,AppDescription appdescription) {
+		return new PatternPageComposite(parent, style, appdescription);
+	}
+
+}
diff --git a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PatternPageComposite.java b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageComposite.java
similarity index 51%
rename from ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PatternPageComposite.java
rename to ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageComposite.java
index 426fac3ad33410e2b91398bf7b57f488d85e4412..dbee6e05753986ab4bd78cf0352e32b286613860 100644
--- a/ARCHITECT/EclipsePlugin/plugin/src/eu/DECIDEh2020/architect/plugin/layoutComponents/PatternPageComposite.java
+++ b/ARCHITECT/architect/patterns/src/eu/DECIDEh2020/architect/patterns/composites/PatternPageComposite.java
@@ -1,269 +1,285 @@
-/*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* Eclipse Public License version 2.0 which accompanies
-* this distribution, and is available at
-* https://opensource.org/licenses/EPL-2.0
-*
-* Contributors:
-*
-* Torben Jastrow (Fraunhofer FOKUS) 
-* 
-* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
-package eu.DECIDEh2020.architect.plugin.layoutComponents;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.wb.swt.SWTResourceManager;
-
-import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
-
-import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.widgets.List;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.custom.StyledText;
-import org.apache.jena.rdf.model.Resource;
-import org.apache.jena.vocabulary.DCTerms;
-import org.eclipse.jface.text.TextViewer;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-
-
-public class PatternPageComposite extends Composite {
-
-	private Patterns patterns;
-	private ListViewer listViewer_selected;
-	private CheckboxTableViewer checkboxTableViewer_bad,checkboxTableViewer_good;
-	private PatternDetailComposite patternDetailComposite;
-	private Table table_bad, table_good;
-	private java.util.List<Resource> selectedPatterns = new ArrayList<Resource>();
-	
-	private static class PatternLabelProvider extends LabelProvider {
-		public Image getImage(Object element) {
-			return null;
-		}
-		public String getText(Object element) {
-			return  ((Resource) element).getProperty(DCTerms.title).getString();
-		}
-	}
-	
-	
-	private static class PatternContentProvider implements IStructuredContentProvider {
-		@SuppressWarnings("unchecked")
-		public Object[] getElements(Object inputElement) {
-			return ((java.util.List<Patterns>) inputElement).toArray();
-			
-		}
-		public void dispose() {
-		}
-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		}
-	}
-	
-	/**
-	 * Create the composite.
-	 * @param parent
-	 * @param style
-	 */
-	public PatternPageComposite(Composite parent, int style, Patterns patterns) {
-		super(parent, style);
-		this.patterns= patterns;
-		createGUI();
-		
-
-	}
-	private void createGUI() {
-		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		setLayout(new GridLayout(1, false));
-		
-		CLabel lblDesignPatterns = new CLabel(this, SWT.NONE);
-		lblDesignPatterns.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
-		lblDesignPatterns.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		lblDesignPatterns.setText("Design Patterns");
-		
-		Label label = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
-		label.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
-		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		
-		Composite composite_1 = new Composite(this, SWT.NONE);
-		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		composite_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		GridLayout gl_composite_1 = new GridLayout(2, true);
-		gl_composite_1.horizontalSpacing = 25;
-		composite_1.setLayout(gl_composite_1);
-		
-		Label lblSuggestedPatterns = new Label(composite_1, SWT.NONE);
-		lblSuggestedPatterns.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
-		lblSuggestedPatterns.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-		lblSuggestedPatterns.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblSuggestedPatterns.setText("Suggested Patterns");
-		
-		Label lblPatternDetail = new Label(composite_1, SWT.NONE);
-		lblPatternDetail.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
-		lblPatternDetail.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblPatternDetail.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblPatternDetail.setText("Pattern detail");
-		
-		Composite composite_2 = new Composite(composite_1, SWT.NONE);
-		composite_2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		composite_2.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
-		composite_2.setLayout(new GridLayout(1, false));
-		
-		
-		
-		checkboxTableViewer_good = CheckboxTableViewer.newCheckList(composite_2, SWT.BORDER | SWT.FULL_SELECTION);
-		table_good = checkboxTableViewer_good.getTable();
-		
-		table_good.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		checkboxTableViewer_good.setLabelProvider(new PatternLabelProvider());
-		checkboxTableViewer_good.setContentProvider(new PatternContentProvider());
-		checkboxTableViewer_good.setInput(patterns.listPatterns());
-		
-		
-		Label lblbadPatterns = new Label(composite_2, SWT.NONE);
-		lblbadPatterns.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
-		lblbadPatterns.setText("Bad Patterns");
-		lblbadPatterns.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblbadPatterns.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
-		
-		
-		
-		checkboxTableViewer_bad = CheckboxTableViewer.newCheckList(composite_2, SWT.BORDER | SWT.FULL_SELECTION);
-		checkboxTableViewer_bad.setAllGrayed(true);
-		
-		table_bad = checkboxTableViewer_bad.getTable();
-		
-		table_bad.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		checkboxTableViewer_bad.setLabelProvider(new PatternLabelProvider());
-		checkboxTableViewer_bad.setContentProvider(new PatternContentProvider());
-		checkboxTableViewer_bad.setInput(patterns.listPatterns());
-		
-		
-		
-		Label lblWhyNeccessary = new Label(composite_2, SWT.NONE);
-		lblWhyNeccessary.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
-		lblWhyNeccessary.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-		lblWhyNeccessary.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
-		lblWhyNeccessary.setText("Selected Patterns");
-		
-		listViewer_selected = new ListViewer(composite_2, SWT.BORDER | SWT.V_SCROLL);
-		List list_selected = listViewer_selected.getList();
-		
-		list_selected.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		list_selected.setBounds(0, 0, 88, 68);
-		listViewer_selected.setLabelProvider(new PatternLabelProvider());
-		listViewer_selected.setContentProvider(new PatternContentProvider());
-		listViewer_selected.setInput(selectedPatterns);
-		
-		patternDetailComposite = new PatternDetailComposite(composite_1, SWT.NONE);
-		patternDetailComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-		
-		
-		checkboxTableViewer_good.addCheckStateListener(new ICheckStateListener() {
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				if(event.getChecked()) {
-					selectedPatterns.add((Resource) event.getElement());
-				}else {
-					
-					selectedPatterns.remove(event.getElement());
-				}
-				listViewer_selected.refresh();
-			}
-		});
-		
-		list_selected.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				int i= list_selected.getSelectionIndex();
-				if(i>=0) {
-					Resource pattern = (Resource) listViewer_selected.getElementAt(i);
-					patternDetailComposite.updatePattern(pattern);
-					
-				}
-			}
-		});
-		
-		table_bad.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				int i= table_bad.getSelectionIndex();
-				if(i>=0) {
-					Resource pattern = (Resource) checkboxTableViewer_bad.getElementAt(i);
-					patternDetailComposite.updatePattern(pattern);
-					
-				}
-			}
-		});
-		table_good.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				int i = table_good.getSelectionIndex();
-				if(i>=0) {
-					Resource pattern = (Resource) checkboxTableViewer_good.getElementAt(i);
-					patternDetailComposite.updatePattern(pattern);
-					
-				}
-			}
-		});
-		if(table_good.getItemCount()>0) {
-			table_good.select(0);
-			patternDetailComposite.updatePattern((Resource) checkboxTableViewer_good.getElementAt(0));
-		}
-	}
-	
-	
-	
-	public void updatePatterns(java.util.List<Resource> nfrs) {
-		
-		java.util.List<Resource> inferredPatterns = patterns.inferPatterns(nfrs);
-		
-		
-		if(!inferredPatterns.equals((java.util.List<Resource>)checkboxTableViewer_good.getInput())) {
-			checkboxTableViewer_good.setInput(inferredPatterns);
-			selectedPatterns.clear();
-			
-			
-			Object[] sr =   checkboxTableViewer_good.getCheckedElements();
-			
-			selectedPatterns.addAll((Collection<? extends Resource>) Arrays.asList(sr) );
-			listViewer_selected.refresh();
-			
-		}
-		
-		
-		
-		checkboxTableViewer_bad.setInput(patterns.inferBadPatterns(nfrs));
-		
-		if(table_good.getItemCount()>0) {
-			table_good.select(0);
-			patternDetailComposite.updatePattern((Resource) checkboxTableViewer_good.getElementAt(0));
-		}else {
-		patternDetailComposite.updatePattern(null);
-		}
-		
-	}
-
-	@Override
-	protected void checkSubclass() {
-		// Disable the check that prevents subclassing of SWT components
-	}
-}
+/*
+* Copyright (c) 2017 Fraunhofer FOKUS.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the
+* Eclipse Public License version 2.0 which accompanies
+* this distribution, and is available at
+* https://opensource.org/licenses/EPL-2.0
+*
+* Contributors:
+*
+* Torben Jastrow (Fraunhofer FOKUS) 
+* 
+* **Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu */
+package eu.DECIDEh2020.architect.patterns.composites;
+
+import java.util.ArrayList;
+
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import eu.DECIDEh2020.appManager.models.AppDescription;
+import eu.DECIDEh2020.appManager.models.Nfr;
+import eu.DECIDEh2020.appManager.models.Pattern;
+import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
+import eu.DECIDEh2020.architect.plugin.editor.Page;
+import eu.DECIDEh2020.architect.plugin.utils.CloudPatternHelper;
+
+public class PatternPageComposite extends Page {
+
+	private java.util.List<Pattern> patterns;
+	private CheckboxTableViewer checkboxTableViewer_basic, checkboxTableViewer_good;
+	private PatternDetailComposite patternDetailComposite;
+	private Table table_basic, table_good;
+	private AppDescription appdescription;
+
+	public class PatternFilter extends ViewerFilter {
+
+		private String filter = "http://decideh2020.eu/resources/patterncategories/fundamental";
+		private Boolean show = true;
+
+		public void show(Boolean f) {
+			// ensure that the value can be used for matching
+			this.show = f;
+		}
+
+		
+		@Override
+		public boolean select(Viewer viewer, Object parentElement, Object element) {
+			Pattern p = (Pattern) element;
+			return p.getCategories().contains(filter) ? !show : show;
+		}
+	}
+
+	private static class PatternLabelProvider extends LabelProvider {
+		public Image getImage(Object element) {
+			return null;
+		}
+
+		public String getText(Object element) {
+			return ((Pattern) element).getTitle();
+		}
+	}
+
+	private static class PatternContentProvider implements IStructuredContentProvider {
+		@SuppressWarnings("unchecked")
+		public Object[] getElements(Object inputElement) {
+
+			return ((java.util.List<Pattern>) inputElement).toArray();
+
+		}
+
+		public void dispose() {
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		}
+	}
+
+	/**
+	 * Create the composite.
+	 * 
+	 * @param parent
+	 * @param style
+	 */
+	public PatternPageComposite(Composite parent, int style, AppDescription appdescription) {
+		super(parent, style, appdescription);
+		this.appdescription = appdescription;
+		patterns = new ArrayList<>();
+		createGUI();
+
+	}
+
+	private void createGUI() {
+		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		setLayout(new GridLayout(1, false));
+
+		CLabel lblDesignPatterns = new CLabel(this, SWT.NONE);
+		lblDesignPatterns.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
+		lblDesignPatterns.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		lblDesignPatterns.setText("Design Patterns");
+
+		Label label = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
+		label.setFont(SWTResourceManager.getFont("Segoe UI", 12, SWT.BOLD));
+		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+		Composite composite_1 = new Composite(this, SWT.NONE);
+		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		composite_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		GridLayout gl_composite_1 = new GridLayout(2, true);
+		gl_composite_1.horizontalSpacing = 25;
+		composite_1.setLayout(gl_composite_1);
+
+		Label lblSuggestedPatterns = new Label(composite_1, SWT.NONE);
+		lblSuggestedPatterns.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblSuggestedPatterns.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
+		lblSuggestedPatterns.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		lblSuggestedPatterns.setText("Suggested Patterns");
+
+		Label lblPatternDetail = new Label(composite_1, SWT.NONE);
+		lblPatternDetail.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
+		lblPatternDetail.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblPatternDetail.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		lblPatternDetail.setText("Pattern detail");
+
+		Composite composite_2 = new Composite(composite_1, SWT.NONE);
+		composite_2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		composite_2.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		composite_2.setLayout(new GridLayout(1, false));
+
+		checkboxTableViewer_good = CheckboxTableViewer.newCheckList(composite_2, SWT.BORDER | SWT.FULL_SELECTION);
+		table_good = checkboxTableViewer_good.getTable();
+
+		table_good.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		checkboxTableViewer_good.setLabelProvider(new PatternLabelProvider());
+		checkboxTableViewer_good.setContentProvider(new PatternContentProvider());
+		checkboxTableViewer_good.setInput(patterns);
+		PatternFilter noFundamentals = new PatternFilter();
+		noFundamentals.show(true);
+		checkboxTableViewer_good.setFilters(noFundamentals);
+
+		Label lblbadPatterns = new Label(composite_2, SWT.NONE);
+		lblbadPatterns.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblbadPatterns.setText("Basic Patterns");
+		lblbadPatterns.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
+		lblbadPatterns.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
+
+		checkboxTableViewer_basic = CheckboxTableViewer.newCheckList(composite_2, SWT.BORDER | SWT.FULL_SELECTION);
+		checkboxTableViewer_basic.addCheckStateListener(new ICheckStateListener() {
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				Pattern pattern = (Pattern) event.getElement();
+				pattern.setSelected(event.getChecked());
+			}
+		});
+		checkboxTableViewer_basic.setAllGrayed(true);
+		PatternFilter fundamentals = new PatternFilter();
+		fundamentals.show(false);
+		checkboxTableViewer_basic.setFilters(fundamentals);
+
+		table_basic = checkboxTableViewer_basic.getTable();
+
+		table_basic.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		checkboxTableViewer_basic.setLabelProvider(new PatternLabelProvider());
+		checkboxTableViewer_basic.setContentProvider(new PatternContentProvider());
+		checkboxTableViewer_basic.setInput(patterns);
+
+		patternDetailComposite = new PatternDetailComposite(composite_1, SWT.NONE);
+		patternDetailComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+
+		checkboxTableViewer_good.addCheckStateListener(new ICheckStateListener() {
+			public void checkStateChanged(CheckStateChangedEvent event) {
+				Pattern pattern = (Pattern) event.getElement();
+				pattern.setSelected(event.getChecked());
+			}
+		});
+
+		table_basic.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				int i = table_basic.getSelectionIndex();
+				if (i >= 0) {
+					Pattern pattern = (Pattern) checkboxTableViewer_basic.getElementAt(i);
+					patternDetailComposite.updatePattern(pattern);
+
+				}
+			}
+		});
+		table_good.addSelectionListener(new SelectionAdapter() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				int i = table_good.getSelectionIndex();
+				if (i >= 0) {
+					Pattern pattern = (Pattern) checkboxTableViewer_good.getElementAt(i);
+					patternDetailComposite.updatePattern(pattern);
+
+				}
+			}
+		});
+		if (table_good.getItemCount() > 0) {
+			table_good.select(0);
+			patternDetailComposite.updatePattern((Pattern) checkboxTableViewer_good.getElementAt(0));
+		}
+
+		recomputeNFRs();
+	}
+
+	void recomputeNFRs() {
+
+		updatePatterns(appdescription.getNfrs());
+	}
+
+	public void updatePatterns(java.util.List<Nfr> nfrs) {
+		patterns = CloudPatternHelper.inferPatterns(nfrs);
+		Patterns pat = Patterns.createDefaultPatterns();
+		java.util.List<ObjectNode> funds = pat.getPatternsByCategory("fundamental");
+		ObjectMapper mapper = new ObjectMapper();
+
+		for (ObjectNode objectNode : funds) {
+			try {
+				Pattern p = mapper.treeToValue(objectNode, Pattern.class);
+				patterns.add(p);
+			} catch (JsonProcessingException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+
+		checkboxTableViewer_good.setInput(patterns);
+		checkboxTableViewer_basic.setInput(patterns);
+
+		for (Pattern pattern : patterns) {
+			Boolean selected = false;
+			for (Pattern p : appdescription.getRecommendedPatterns()) {
+				if (pattern.getTitle().equals(p.getTitle())) {
+					selected = Boolean.logicalOr(selected, p.isSelected());
+				}
+			}
+			pattern.setSelected(selected);
+		}
+
+		for (Pattern pattern : patterns) {
+			checkboxTableViewer_basic.setChecked(pattern, pattern.isSelected());
+			checkboxTableViewer_good.setChecked(pattern, pattern.isSelected());
+		}
+
+		appdescription.setRecommendedPatterns(patterns);
+		if (table_good.getItemCount() > 0) {
+			table_good.select(0);
+			patternDetailComposite.updatePattern((Pattern) checkboxTableViewer_good.getElementAt(0));
+		} else {
+			patternDetailComposite.updatePattern(null);
+		}
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents subclassing of SWT components
+	}
+
+	@Override
+	public void open(AppDescription appdescription) {
+		this.appdescription = appdescription;
+		recomputeNFRs();
+	}
+
+}
diff --git a/ARCHITECT/architect/pom.xml b/ARCHITECT/architect/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..648b185e5fd3e19046e348984db9289b7ad3a8a8
--- /dev/null
+++ b/ARCHITECT/architect/pom.xml
@@ -0,0 +1,69 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>eu.DECIDEh2020</groupId>
+	<artifactId>architect</artifactId>
+	<version>1.0.1</version>
+	<packaging>pom</packaging>
+
+	<properties>
+		<tycho.version>1.2.0</tycho.version>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>2018-09</id>
+			<layout>p2</layout>
+			<url>http://download.eclipse.org/releases/2018-09/</url>
+		</repository>
+	</repositories>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-maven-plugin</artifactId>
+				<version>${tycho.version}</version>
+				<extensions>true</extensions>
+			</plugin>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>target-platform-configuration</artifactId>
+				<version>${tycho.version}</version>
+				<configuration>
+					<environments>
+						<environment>
+							<os>win32</os>
+							<ws>win32</ws>
+							<arch>x86</arch>
+						</environment>
+						<environment>
+							<os>win32</os>
+							<ws>win32</ws>
+							<arch>x86_64</arch>
+						</environment>
+					</environments>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-release-plugin</artifactId>
+				<version>2.5.3</version>
+				<configuration>
+					<tagNameFormat>v@{project.version}</tagNameFormat>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<modules>
+		<module>patterns</module>
+		<module>editor</module>
+		<module>feature</module>
+		<module>site</module>
+	</modules>
+
+</project>
+
diff --git a/ARCHITECT/architect/site/category.xml b/ARCHITECT/architect/site/category.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d05e68a5c60ac2f5426636b2937014a054ba76dc
--- /dev/null
+++ b/ARCHITECT/architect/site/category.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+   <feature url="features/eu.DECIDEh2020.architect.feature_1.0.1.jar" id="eu.DECIDEh2020.architect.feature" version="1.0.1">
+      <category name="DECIDE"/>
+   </feature>
+   <category-def name="DECIDE" label="DECIDE"/>
+</site>
diff --git a/ARCHITECT/architect/site/pom.xml b/ARCHITECT/architect/site/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e6dfcee11b582c2f76490ca90f5ce35bf73a6bf7
--- /dev/null
+++ b/ARCHITECT/architect/site/pom.xml
@@ -0,0 +1,15 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>eu.DECIDEh2020.architect.site</artifactId>
+	<packaging>eclipse-repository</packaging>
+
+	<parent>
+		<groupId>eu.DECIDEh2020</groupId>
+		<artifactId>architect</artifactId>
+		<version>1.0.1</version>
+		<relativePath>..</relativePath>
+	</parent>
+
+</project>
diff --git a/ARCHITECT/cloud-patterns-compendium/.gitignore b/ARCHITECT/cloud-patterns-compendium/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..f10defac90f7f6acb30aa78adf87aba6b6b2fc87
--- /dev/null
+++ b/ARCHITECT/cloud-patterns-compendium/.gitignore
@@ -0,0 +1,80 @@
+# Created by .ignore support plugin (hsz.mobi)
+### Maven template
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+
+# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored)
+!/.mvn/wrapper/maven-wrapper.jar
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+.idea/
+
+# User-specific stuff:
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/dictionaries
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.xml
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+
+# Gradle:
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# CMake
+cmake-build-debug/
+cmake-build-release/
+
+# Mongo Explorer plugin:
+.idea/**/mongoSettings.xml
+
+## File-based project format:
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+*.iml
+
+# windows specific 
+*~
+
+# eclipse project file
+.settings/
+.classpath
+.project
+
+#vertx stuff
+.vertx/
\ No newline at end of file
diff --git a/ARCHITECT/CloudPatternsMicroservice/.gitlab-ci.yml b/ARCHITECT/cloud-patterns-compendium/.gitlab-ci.yml
similarity index 83%
rename from ARCHITECT/CloudPatternsMicroservice/.gitlab-ci.yml
rename to ARCHITECT/cloud-patterns-compendium/.gitlab-ci.yml
index ae4e0fb1abe02921b2d89ce4e9ef8434518a2804..fc1da9c0c3c7a6d48d8cb6bac16b546485c71384 100644
--- a/ARCHITECT/CloudPatternsMicroservice/.gitlab-ci.yml
+++ b/ARCHITECT/cloud-patterns-compendium/.gitlab-ci.yml
@@ -12,7 +12,6 @@ build:
     - docker
   image: maven:3.3.9-jdk-8
   script:
-    - "mvn install:install-file -Dfile=3rdpartylibs/cloudpatterns-1.0-SNAPSHOT.jar -DpomFile=3rdpartylibs/pom.xml"
     - "mvn clean package -B"
   only:
     - master
diff --git a/ARCHITECT/CloudPatternsMicroservice/Dockerfile b/ARCHITECT/cloud-patterns-compendium/Dockerfile
similarity index 87%
rename from ARCHITECT/CloudPatternsMicroservice/Dockerfile
rename to ARCHITECT/cloud-patterns-compendium/Dockerfile
index 2dca7a426a87fff216c6f23b5e4b92d1b8548e72..a1842a0f78cac9c3c83120f9a4bf01381100b4c0 100644
--- a/ARCHITECT/CloudPatternsMicroservice/Dockerfile
+++ b/ARCHITECT/cloud-patterns-compendium/Dockerfile
@@ -6,9 +6,9 @@
 #   docker run -t -i -p 8080:8080 sample/vertx-java-fat
 ###
 
-FROM openjdk:8u131-jre-alpine
+FROM openjdk:alpine
 
-ENV VERTICLE_FILE cloudpatternscompendium-1.0-SNAPSHOT-fat.jar
+ENV VERTICLE_FILE cloudpatternscompendium-fat.jar
 
 # Set the location of the verticles
 ENV VERTICLE_HOME /usr/verticles
diff --git a/ARCHITECT/cloud-patterns-compendium/LICENSE.txt b/ARCHITECT/cloud-patterns-compendium/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1a5effe455affae45fa3bb7a9a870f498aa7a656
--- /dev/null
+++ b/ARCHITECT/cloud-patterns-compendium/LICENSE.txt
@@ -0,0 +1,666 @@
+Copyright (C) 2018 Fraunhofer FOKUS.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE Version 3.
+
+                    GNU AFFERO GENERAL PUBLIC LICENSE
+                       Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+  A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate.  Many developers of free software are heartened and
+encouraged by the resulting cooperation.  However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+  The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community.  It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server.  Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+  An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals.  This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU Affero General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Remote Network Interaction; Use with the GNU General Public License.
+
+  Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software.  This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time.  Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source.  For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code.  There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<https://www.gnu.org/licenses/>.
diff --git a/ARCHITECT/CloudPatternsMicroservice/README.md b/ARCHITECT/cloud-patterns-compendium/README.md
similarity index 88%
rename from ARCHITECT/CloudPatternsMicroservice/README.md
rename to ARCHITECT/cloud-patterns-compendium/README.md
index 3c24f9d09b428264a856059e2a81adbe0c1d1569..b8441a156925d765b61bdf352fffd05d06eae3f6 100644
--- a/ARCHITECT/CloudPatternsMicroservice/README.md
+++ b/ARCHITECT/cloud-patterns-compendium/README.md
@@ -6,7 +6,7 @@ A microservice to infer patterns from non-functional requirements in the context
 $ git clone git@gitlab.fokus.fraunhofer.de:DECIDE/CloudPatternsCompendium.git
 $ cd CloudPatternsCompendium
 $ mvn package
-$ java -jar target/cloudpatternscompendium-<version>-fat.jar
+$ java -jar target/cloudpatternscompendium-fat.jar
 ```
 
 The service is running on port `8080`.
@@ -34,4 +34,8 @@ The latest image is also available on the FOKUS docker hub:
 ```
 $ docker run -t -i -p 8080:8080 dockerhub.fokus.fraunhofer.de:5000/decide/cloudpatternscompendium
 ```
-But you need to login first.
\ No newline at end of file
+But you need to login first.
+
+## License
+
+[GNU Affero General Public License Version 3](LICENSE.txt)
\ No newline at end of file
diff --git a/ARCHITECT/cloud-patterns-compendium/pom.xml b/ARCHITECT/cloud-patterns-compendium/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9fc076d29394d00381dc975224e6c19c4154efc2
--- /dev/null
+++ b/ARCHITECT/cloud-patterns-compendium/pom.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>eu.DECIDEh2020</groupId>
+    <artifactId>cloudpatternscompendium</artifactId>
+    <version>1.1.1-SNAPSHOT</version>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <vertx.version>3.5.4</vertx.version>
+        <verticle.name>eu.DECIDEh2020.architect.cloudpatterns.compendium.Server</verticle.name>
+    </properties>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>io.vertx</groupId>
+                <artifactId>vertx-dependencies</artifactId>
+                <version>${vertx.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>6.14.3</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.2.3</version>
+        </dependency>
+        <dependency>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-web-templ-thymeleaf</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-health-check</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-dropwizard-metrics</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-service-proxy</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-codegen</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>eu.DECIDEh2020</groupId>
+            <artifactId>cloudpatterns</artifactId>
+            <version>1.2.1-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+    <build>
+      <plugins>
+    	<plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-release-plugin</artifactId>
+          <version>2.5.3</version>
+          <configuration>
+            <tagNameFormat>v@{project.version}</tagNameFormat>
+          </configuration>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.7.0</version>
+          <configuration>
+            <source>1.8</source>
+            <target>1.8</target>
+            <encoding>${project.build.sourceEncoding}</encoding>
+            <useIncrementalCompilation>false</useIncrementalCompilation>
+            <annotationProcessors>
+              <annotationProcessor>io.vertx.codegen.CodeGenProcessor</annotationProcessor>
+            </annotationProcessors>
+            <generatedSourcesDirectory>${project.basedir}/src/main/generated</generatedSourcesDirectory>
+            <compilerArgs>
+              <arg>-Acodegen.output=${project.basedir}/src/main</arg>
+            </compilerArgs>
+          </configuration>
+        </plugin>
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>3.1.0</version>
+          <configuration>
+            <filesets>
+              <fileset>
+                <directory>${project.basedir}/src/main/generated</directory>
+              </fileset>
+            </filesets>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-shade-plugin</artifactId>
+          <version>3.1.1</version>
+          <executions>
+            <execution>
+              <phase>package</phase>
+              <goals>
+                <goal>shade</goal>
+              </goals>
+              <configuration>
+                <transformers>
+                  <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                    <manifestEntries>
+                      <Main-Class>io.vertx.core.Launcher</Main-Class>
+                      <Main-Verticle>${verticle.name}</Main-Verticle>
+                    </manifestEntries>
+                  </transformer>
+                  <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+                  <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                    <resource>META-INF/services/io.vertx.core.spi.VerticleFactory</resource>
+                  </transformer>
+                </transformers>
+                <artifactSet></artifactSet>
+                <outputFile>${project.build.directory}/${project.artifactId}-fat.jar</outputFile>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+    </build>
+</project>
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxEBProxy.java b/ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxEBProxy.java
similarity index 94%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxEBProxy.java
rename to ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxEBProxy.java
index d48394b8b5da79bc7bf1bc7eeb0ab3ef7ed56717..2370b83ee2d2a2ff98f00e626b09e5033c8e7480 100644
--- a/ARCHITECT/CloudPatternsMicroservice/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxEBProxy.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxEBProxy.java
@@ -66,9 +66,10 @@ public class CloudPatternsServiceVertxEBProxy implements CloudPatternsService {
     } catch (IllegalStateException ex) {}
   }
 
+  @Override
   public CloudPatternsService listPatterns(Handler<AsyncResult<JsonArray>> handler) {
     if (closed) {
-      handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
+    handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
       return this;
     }
     JsonObject _json = new JsonObject();
@@ -84,9 +85,10 @@ public class CloudPatternsServiceVertxEBProxy implements CloudPatternsService {
     return this;
   }
 
+  @Override
   public CloudPatternsService listNFRs(Handler<AsyncResult<JsonArray>> handler) {
     if (closed) {
-      handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
+    handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
       return this;
     }
     JsonObject _json = new JsonObject();
@@ -102,9 +104,10 @@ public class CloudPatternsServiceVertxEBProxy implements CloudPatternsService {
     return this;
   }
 
+  @Override
   public CloudPatternsService inferPatterns(JsonArray nfrs, Handler<AsyncResult<JsonArray>> handler) {
     if (closed) {
-      handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
+    handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
       return this;
     }
     JsonObject _json = new JsonObject();
@@ -121,9 +124,10 @@ public class CloudPatternsServiceVertxEBProxy implements CloudPatternsService {
     return this;
   }
 
+  @Override
   public CloudPatternsService getPattern(String name, Handler<AsyncResult<JsonObject>> handler) {
     if (closed) {
-      handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
+    handler.handle(Future.failedFuture(new IllegalStateException("Proxy is closed")));
       return this;
     }
     JsonObject _json = new JsonObject();
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxProxyHandler.java b/ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxProxyHandler.java
similarity index 96%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxProxyHandler.java
rename to ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxProxyHandler.java
index 9efc986ba094eeb4ffe661c8d2fe2e46412c105c..1879cea98b9db04bd6377af20e4f8dae02c0743d 100644
--- a/ARCHITECT/CloudPatternsMicroservice/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxProxyHandler.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/generated/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceVertxProxyHandler.java
@@ -90,12 +90,6 @@ public class CloudPatternsServiceVertxProxyHandler extends ProxyHandler {
     accessed();
   }
 
-  public MessageConsumer<JsonObject> registerHandler(String address) {
-    MessageConsumer<JsonObject> consumer = vertx.eventBus().<JsonObject>consumer(address).handler(this);
-    this.setConsumer(consumer);
-    return consumer;
-  }
-
   private void checkTimedOut(long id) {
     long now = System.nanoTime();
     if (now - lastAccessed > timeoutSeconds * 1000000000) {
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/CloudPatternsCompendiumVerticle.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/CloudPatternsCompendiumVerticle.java
similarity index 74%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/CloudPatternsCompendiumVerticle.java
rename to ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/CloudPatternsCompendiumVerticle.java
index 1c8f236c615de0b7f8574ff0a0cdccf9a388e7c3..230ed346ec68886b860e86b4594c85f4ba2d95f0 100644
--- a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/CloudPatternsCompendiumVerticle.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/CloudPatternsCompendiumVerticle.java
@@ -1,18 +1,16 @@
 /*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
 package eu.DECIDEh2020.architect.cloudpatterns.compendium;
 
 import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/Server.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/Server.java
similarity index 84%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/Server.java
rename to ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/Server.java
index d00dac1b034c807fb5b54be4ab45674bf120d4b0..4500859216a3dc578629f002fe573e22960ef3b2 100644
--- a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/Server.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/Server.java
@@ -1,22 +1,21 @@
 /*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
 package eu.DECIDEh2020.architect.cloudpatterns.compendium;
 
 import eu.DECIDEh2020.architect.cloudpatterns.compendium.service.CloudPatternsService;
 import io.vertx.core.*;
+import io.vertx.core.http.HttpMethod;
 import io.vertx.core.json.JsonArray;
 import io.vertx.core.json.JsonObject;
 import io.vertx.ext.dropwizard.MetricsService;
@@ -24,6 +23,7 @@ import io.vertx.ext.healthchecks.HealthCheckHandler;
 import io.vertx.ext.healthchecks.Status;
 import io.vertx.ext.web.Router;
 import io.vertx.ext.web.handler.BodyHandler;
+import io.vertx.ext.web.handler.CorsHandler;
 import io.vertx.ext.web.handler.StaticHandler;
 import io.vertx.ext.web.handler.TemplateHandler;
 import io.vertx.ext.web.templ.TemplateEngine;
@@ -43,7 +43,7 @@ public class Server extends AbstractVerticle {
     private CloudPatternsService patternsService;
 
     @Override
-    public void start(Future<Void> startFuture) throws Exception {
+    public void start(Future<Void> startFuture) {
         MetricsService metrics = MetricsService.create(vertx);
 
         vertx.deployVerticle(CloudPatternsCompendiumVerticle.class.getName(), new DeploymentOptions().setWorker(true), res -> {
@@ -51,6 +51,7 @@ public class Server extends AbstractVerticle {
                 patternsService = CloudPatternsService.createProxy(vertx, "cloudpatterns");
 
                 Router router = Router.router(vertx);
+                router.route().handler(CorsHandler.create("*").allowedMethod(HttpMethod.GET));
                 router.route().handler(BodyHandler.create());
 
                 router.route("/").handler(StaticHandler.create());
@@ -63,11 +64,15 @@ public class Server extends AbstractVerticle {
                 router.get("/health*").handler(hch);
 
                 router.get("/metrics").produces("application/json").handler(routingContext -> {
-                    JsonObject m = metrics.getMetricsSnapshot(vertx);
-                    if (m != null) {
-                        routingContext.response().setStatusCode(200).end(m.encodePrettily());
-                    } else {
-                        routingContext.response().setStatusCode(503).end();
+                    try {
+                        JsonObject m = metrics.getMetricsSnapshot(vertx);
+                        if (m != null) {
+                            routingContext.response().setStatusCode(200).end(m.encodePrettily());
+                        } else {
+                            routingContext.response().setStatusCode(503).end();
+                        }
+                    } catch (Exception e) {
+                        log.error("metrics", e);
                     }
                 });
 
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/NFRConverter.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/NFRConverter.java
similarity index 60%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/NFRConverter.java
rename to ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/NFRConverter.java
index cfd913c3c3dc4c844c14237f45e3d0c8be727ded..b2f870b7550f7d8fb67a80ac0394e86d34d3b324 100644
--- a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/NFRConverter.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/NFRConverter.java
@@ -1,18 +1,16 @@
 /*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
 package eu.DECIDEh2020.architect.cloudpatterns.compendium.converters;
 
 import io.vertx.core.json.JsonObject;
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/PatternConverter.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/PatternConverter.java
similarity index 85%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/PatternConverter.java
rename to ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/PatternConverter.java
index 64141e7f7c3fa4f36f8ff94cd7cc894528b99ea4..c17a4762fa45ad637886255fd40c3ac1dea09c95 100644
--- a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/PatternConverter.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/converters/PatternConverter.java
@@ -1,18 +1,16 @@
 /*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
 package eu.DECIDEh2020.architect.cloudpatterns.compendium.converters;
 
 import eu.DECIDEh2020.architect.cloudpatterns.DP;
@@ -30,7 +28,7 @@ public class PatternConverter {
 
     public static JsonObject toJson(Resource pattern) {
         JsonObject obj = new JsonObject();
-        obj.put("uriref", pattern.getURI());
+        obj.put("uriRef", pattern.getURI());
         obj.put("title", pattern.getRequiredProperty(DCTerms.title).getString());
         if (pattern.hasProperty(DCTerms.type)) {
             JsonArray array = new JsonArray();
@@ -75,12 +73,12 @@ public class PatternConverter {
         if (pattern.hasProperty(DP.hasPositiveImpactOn)) {
             JsonArray array = new JsonArray();
             pattern.listProperties(DP.hasPositiveImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-            obj.put("positive-impacts", array);
+            obj.put("positiveImpacts", array);
         }
         if (pattern.hasProperty(DP.hasNegativeImpactOn)) {
             JsonArray array = new JsonArray();
             pattern.listProperties(DP.hasNegativeImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
-            obj.put("negative-impacts", array);
+            obj.put("negativeImpacts", array);
         }
         return obj;
     }
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsService.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsService.java
similarity index 74%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsService.java
rename to ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsService.java
index 98409d67acd23d2b1902d0059e85536897af538a..95d8279c9c311afd7dd58d60079f82361bc7bf62 100644
--- a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsService.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsService.java
@@ -1,18 +1,16 @@
 /*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
 package eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
 
 import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceImpl.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceImpl.java
similarity index 59%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceImpl.java
rename to ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceImpl.java
index 33c9111043963b6b666eedfc12666676856f8cb4..70ea22b5e29eb390562b3426ee53986a4bcac234 100644
--- a/ARCHITECT/CloudPatternsMicroservice/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceImpl.java
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/CloudPatternsServiceImpl.java
@@ -1,26 +1,28 @@
 /*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
 package eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import eu.DECIDEh2020.architect.cloudpatterns.DECIDEPatterns;
 import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
 import eu.DECIDEh2020.architect.cloudpatterns.compendium.converters.NFRConverter;
 import eu.DECIDEh2020.architect.cloudpatterns.compendium.converters.PatternConverter;
 import io.vertx.core.AsyncResult;
 import io.vertx.core.Future;
 import io.vertx.core.Handler;
+import io.vertx.core.json.Json;
 import io.vertx.core.json.JsonArray;
 import io.vertx.core.json.JsonObject;
 import org.apache.jena.rdf.model.Resource;
@@ -53,22 +55,24 @@ class CloudPatternsServiceImpl implements CloudPatternsService {
 
     @Override
     public CloudPatternsService inferPatterns(JsonArray nfrs, Handler<AsyncResult<JsonArray>> handler) {
-        List<Resource> result = patterns.inferPatterns(nfrs.stream().map(nfr -> {
-            String uriref = nfr.toString();
-            if (!uriref.startsWith("http://decideh2020.eu/resources/patterns/")) {
-                uriref = "http://decideh2020.eu/resources/patterns/" + uriref.toLowerCase();
-            }
-            return patterns.getModel().createResource(uriref);
-        }).collect(Collectors.toList()));
-        handler.handle(Future.succeededFuture(new JsonArray(result.stream().map(PatternConverter::toJson).collect(Collectors.toList()))));
+        ObjectMapper m = new ObjectMapper();
+        List<ObjectNode> nfrList = nfrs.stream().map(nfr -> m.createObjectNode().put("kind", nfr.toString())).collect(Collectors.toList());
+
+        List<ObjectNode> inferredPatterns = patterns.inferPatternsJson(nfrList);
+        JsonArray array = new JsonArray(
+            inferredPatterns.stream().map(pattern -> new JsonObject(Json.encodePrettily(pattern))).collect(Collectors.toList())
+        );
+
+        handler.handle(Future.succeededFuture(array));
+
         return this;
     }
 
     @Override
     public CloudPatternsService getPattern(String name, Handler<AsyncResult<JsonObject>> handler) {
-        Resource pattern = patterns.getModel().getResource("http://decideh2020.eu/resources/patterns/" + name);
+        ObjectNode pattern = patterns.getPatternAsJson(DECIDEPatterns.BASE + "patterns/" + name);
         if (pattern != null) {
-            handler.handle(Future.succeededFuture(PatternConverter.toJson(pattern)));
+            handler.handle(Future.succeededFuture(new JsonObject(Json.encodePrettily(pattern))));
         } else {
             handler.handle(Future.failedFuture("Pattern not found."));
         }
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/package-info.java b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..6d7d7a5fa54d9870931219b4e9e77161b4fdd630
--- /dev/null
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/compendium/service/package-info.java
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
+@ModuleGen(groupPackage = "eu.DECIDEh2020.architect.cloudpatterns", name = "cloudpatternscompendium")
+package eu.DECIDEh2020.architect.cloudpatterns.compendium.service;
+
+import io.vertx.codegen.annotations.ModuleGen;
\ No newline at end of file
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/resources/logback.xml b/ARCHITECT/cloud-patterns-compendium/src/main/resources/logback.xml
similarity index 100%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/resources/logback.xml
rename to ARCHITECT/cloud-patterns-compendium/src/main/resources/logback.xml
diff --git a/ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/images/logoDecide_300ppp_small.jpg b/ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/images/logoDecide_300ppp_small.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..dfb8c126df00306c0d3cb76ead7d6aa5e3474fd1
Binary files /dev/null and b/ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/images/logoDecide_300ppp_small.jpg differ
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/resources/openapi/openapi.json b/ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/openapi.json
similarity index 56%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/resources/openapi/openapi.json
rename to ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/openapi.json
index 4d5bfed8544501854b52ce0138906094610ad61a..16e5998fdfcd41ad754002d1cf0713f0a3d18ead 100644
--- a/ARCHITECT/CloudPatternsMicroservice/src/main/resources/openapi/openapi.json
+++ b/ARCHITECT/cloud-patterns-compendium/src/main/resources/openapi/openapi.json
@@ -1,10 +1,10 @@
 {
-  "openapi": "3.0.0",
+  "openapi": "3.0.1",
   "info": {
-    "version": "1.0",
+    "version": "1.1-SNAPSHOT",
     "title": "Cloud Patterns Compendium Microservice",
     "x-logo": {
-      "url": "openapi/images/logoDecide_300ppp.jpg"
+      "url": "openapi/images/logoDecide_300ppp_small.jpg"
     }
   },
   "servers": [
@@ -16,6 +16,7 @@
   "paths": {
     "/nfrs": {
       "get": {
+        "tags": [ "NFRs" ],
         "description": "Returns the list of all NFRs.",
         "summary": "List all NFRs",
         "operationId": "listNFRs",
@@ -38,9 +39,30 @@
     },
     "/patterns": {
       "get": {
+        "tags": [ "Patterns" ],
         "description": "Returns the list of all patterns.",
         "summary": "List all Patterns",
         "operationId": "listPatterns",
+        "parameters": [
+          {
+            "name": "categories",
+            "in": "query",
+            "description": "A list of categories to filter.",
+            "schema": {
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [
+                  "fundamental",
+                  "development",
+                  "optimization",
+                  "deployment",
+                  "simple"
+                ]
+              }
+            }
+          }
+        ],
         "responses": {
           "200": {
             "description": "List of all patterns.",
@@ -58,8 +80,47 @@
         }
       }
     },
+    "/patterns/{name}": {
+      "get": {
+        "tags": [ "Patterns" ],
+        "description": "Returns a specific pattern by name",
+        "summary": "A Pattern",
+        "operationId": "getPattern",
+        "parameters": [
+          {
+            "name": "name",
+            "in": "path",
+            "description": "Name or id of the requested pattern",
+            "required": true,
+            "schema": {
+              "type": "string"
+            },
+            "example": "distributed-application"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The pattern",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Pattern"
+                }
+              },
+              "text/html": {
+                "schema": {
+                  "type": "string",
+                  "format": "html5"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
     "/inferred/patterns": {
       "get": {
+        "tags": [ "Patterns" ],
         "description": "Returns a list patterns inferred from NFRs.",
         "summary": "Infer Patterns from NFRs",
         "operationId": "inferPatterns",
@@ -69,8 +130,27 @@
             "in": "query",
             "description": "A list of case insensitive non functional requirements.",
             "required": true,
-            "type": "array",
-            "example": "nfr=scalability,availability,performance"
+            "schema": {
+              "type": "array",
+              "items": {
+                "type": "string",
+                "enum": [ "availability", "scalability", "performance", "cost", "location" ]
+              }
+            },
+            "examples": {
+              "availability-example": {
+                "summary": "Infer patterns from availability only",
+                "value": "availability"
+              },
+              "location-example": {
+                "summary": "Infer patterns from availability only",
+                "value": "location"
+              },
+              "three-nfrs-example": {
+                "summary": "Infer patterns from a list of nfrs",
+                "value": "availability,scalability,cost"
+              }
+            }
           }
         ],
         "responses": {
@@ -81,7 +161,7 @@
                 "schema": {
                   "type": "array",
                   "items": {
-                    "$ref": "#/components/schemas/Pattern"
+                    "$ref": "#/components/schemas/ReducedPattern"
                   }
                 }
               }
@@ -93,16 +173,46 @@
   },
   "components": {
     "schemas": {
+      "ReducedPattern": {
+        "description": "A reduced representation of a pattern.",
+        "type": "object",
+        "required": [
+          "title",
+          "uriRef"
+        ],
+        "properties": {
+          "uriRef": {
+            "type": "string",
+            "format": "uri"
+          },
+          "title": {
+            "type": "string"
+          },
+          "categories": {
+            "type": "array",
+            "items": {
+              "type": "string",
+              "format": "uri"
+            }
+          },
+          "positiveImpacts": {
+            "type": "array",
+            "items": {
+              "type": "string",
+              "format": "uri"
+            }
+          }
+        }
+      },
       "Pattern": {
         "description": "A representation of a pattern.",
         "type": "object",
         "required": [
-          "name",
           "title",
-          "uriref"
+          "uriRef"
         ],
         "properties": {
-          "uriref": {
+          "uriRef": {
             "type": "string",
             "format": "uri"
           },
@@ -148,14 +258,14 @@
               "format": "uri"
             }
           },
-          "positive-impacts": {
+          "positiveImpacts": {
             "type": "array",
             "items": {
               "type": "string",
               "format": "uri"
             }
           },
-          "negative-impacts": {
+          "negativeImpacts": {
             "type": "array",
             "items": {
               "type": "string",
@@ -168,11 +278,11 @@
         "description": "A representation of a non functional requirement.",
         "type": "object",
         "required": [
-          "uriref",
+          "uriRef",
           "title"
         ],
         "properties": {
-          "uriref": {
+          "uriRef": {
             "type": "string"
           },
           "title": {
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/resources/templates/pattern.html b/ARCHITECT/cloud-patterns-compendium/src/main/resources/templates/pattern.html
similarity index 100%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/resources/templates/pattern.html
rename to ARCHITECT/cloud-patterns-compendium/src/main/resources/templates/pattern.html
diff --git a/ARCHITECT/CloudPatternsMicroservice/src/main/resources/webroot/index.html b/ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/index.html
similarity index 100%
rename from ARCHITECT/CloudPatternsMicroservice/src/main/resources/webroot/index.html
rename to ARCHITECT/cloud-patterns-compendium/src/main/resources/webroot/index.html
diff --git a/ARCHITECT/cloud-patterns/.gitignore b/ARCHITECT/cloud-patterns/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..70e100862d62237225d034c042b123732e945180
--- /dev/null
+++ b/ARCHITECT/cloud-patterns/.gitignore
@@ -0,0 +1,77 @@
+# Created by .ignore support plugin (hsz.mobi)
+### Maven template
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+
+# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored)
+!/.mvn/wrapper/maven-wrapper.jar
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+.idea/
+
+# User-specific stuff:
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/dictionaries
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.xml
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+
+# Gradle:
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# CMake
+cmake-build-debug/
+cmake-build-release/
+
+# Mongo Explorer plugin:
+.idea/**/mongoSettings.xml
+
+## File-based project format:
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+*.iml
+
+# eclipse project file
+.settings/
+.classpath
+.project
+
+# windows specific files
+*~
diff --git a/ARCHITECT/cloud-patterns/.gitlab-ci.yml b/ARCHITECT/cloud-patterns/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3e39e918e15d4230b18f24d3e79bcece218e8932
--- /dev/null
+++ b/ARCHITECT/cloud-patterns/.gitlab-ci.yml
@@ -0,0 +1,25 @@
+image: maven:alpine
+
+variables:
+  MAVEN_CLI_OPTS: "--batch-mode"
+
+before_script:
+  - apk update && apk upgrade && apk add git
+  - git config --global user.email "$GITLAB_USER_EMAIL"
+  - git config --global user.name "$GITLAB_USER_NAME"
+  - git checkout -B "$CI_BUILD_REF_NAME"
+  - git pull origin "$CI_BUILD_REF_NAME"
+
+deploy_snapshot:
+  stage: deploy
+  only:
+    - master
+  script:
+    - mvn $MAVEN_CLI_OPTS clean deploy -Dmaven.test.skip=true
+
+deploy_release:
+  stage: deploy
+  only:
+    - release
+  script:
+    - mvn $MAVEN_CLI_OPTS -Darguments="-DskipTests" -DscmCommentPrefix="[ci skip] - " release:clean release:prepare -B release:perform
diff --git a/ARCHITECT/cloud-patterns/LICENSE.txt b/ARCHITECT/cloud-patterns/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1a5effe455affae45fa3bb7a9a870f498aa7a656
--- /dev/null
+++ b/ARCHITECT/cloud-patterns/LICENSE.txt
@@ -0,0 +1,666 @@
+Copyright (C) 2018 Fraunhofer FOKUS.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE Version 3.
+
+                    GNU AFFERO GENERAL PUBLIC LICENSE
+                       Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+  A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate.  Many developers of free software are heartened and
+encouraged by the resulting cooperation.  However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+  The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community.  It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server.  Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+  An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals.  This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU Affero General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Remote Network Interaction; Use with the GNU General Public License.
+
+  Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software.  This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time.  Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source.  For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code.  There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<https://www.gnu.org/licenses/>.
diff --git a/ARCHITECT/cloud-patterns/README.md b/ARCHITECT/cloud-patterns/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..7bb4d5dae195ff0ba344202bfde962f2858bee6a
--- /dev/null
+++ b/ARCHITECT/cloud-patterns/README.md
@@ -0,0 +1,5 @@
+# Cloud Patterns
+
+## License
+
+[GNU Affero General Public License Version 3](LICENSE.txt)
\ No newline at end of file
diff --git a/ARCHITECT/cloud-patterns/pom.xml b/ARCHITECT/cloud-patterns/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..869837d7f70beadaed0ec1f2ecb491db0a7b3942
--- /dev/null
+++ b/ARCHITECT/cloud-patterns/pom.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>eu.DECIDEh2020</groupId>
+    <artifactId>cloudpatterns</artifactId>
+    <version>1.2.1-SNAPSHOT</version>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <distributionManagement>
+        <repository>
+            <id>paca</id>
+            <name>Paca Releases Repo</name>
+            <url>https://paca.fokus.fraunhofer.de/repository/maven-releases/</url>
+        </repository>
+        <snapshotRepository>
+            <id>paca</id>
+            <url>https://paca.fokus.fraunhofer.de/repository/maven-snapshots/</url>
+        </snapshotRepository>
+    </distributionManagement>
+
+    <scm>
+        <connection>scm:git:https://${GITLAB_USER_LDAP}:${GITLAB_USER_PASSWORD}@gitlab.fokus.fraunhofer.de/${CI_PROJECT_PATH}</connection>
+        <url>https://${GITLAB_USER_LDAP}:${GITLAB_USER_PASSWORD}@gitlab.fokus.fraunhofer.de/${CI_PROJECT_PATH}</url>
+        <developerConnection>scm:git:https://${GITLAB_USER_LDAP}:${GITLAB_USER_PASSWORD}@gitlab.fokus.fraunhofer.de/${CI_PROJECT_PATH}</developerConnection>
+        <tag>HEAD</tag>
+    </scm>
+
+    <dependencies>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.2.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jena</groupId>
+            <artifactId>apache-jena-libs</artifactId>
+            <type>pom</type>
+            <version>3.7.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <version>6.14.3</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-release-plugin</artifactId>
+                <version>2.5.3</version>
+                <configuration>
+                    <tagNameFormat>v@{project.version}</tagNameFormat>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.7.0</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>3.1.1</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <minimizeJar>true</minimizeJar>
+                            <shadedArtifactAttached>true</shadedArtifactAttached>
+                            <filters>
+                                <filter>
+                                    <artifact>*:*</artifact>
+                                    <excludes>
+                                        <exclude>META-INF/*.SF</exclude>
+                                        <exclude>META-INF/*.DSA</exclude>
+                                        <exclude>META-INF/*.RSA</exclude>
+                                    </excludes>
+                                </filter>
+                            </filters>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DECIDEPatterns.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DECIDEPatterns.java
similarity index 79%
rename from ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DECIDEPatterns.java
rename to ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DECIDEPatterns.java
index fd049d2fa08d093bdb702541ee09f6d1c653ae45..e74ea1978948e2cde50a9932d514ffed1a55766c 100644
--- a/ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DECIDEPatterns.java
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DECIDEPatterns.java
@@ -1,18 +1,16 @@
 /*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
 package eu.DECIDEh2020.architect.cloudpatterns;
 
 import org.apache.jena.rdf.model.Model;
@@ -50,6 +48,7 @@ public class DECIDEPatterns {
         scalability = m.createResource(BASE + "patterns/scalability");
         performance = m.createResource(BASE + "patterns/performance");
         cost = m.createResource(BASE + "patterns/cost");
+
         location = m.createResource(BASE + "patterns/location");
 
     }
diff --git a/ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DP.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DP.java
similarity index 75%
rename from ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DP.java
rename to ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DP.java
index 9e1633652f102119b3b43341810178f8800d6064..5d7e9866887b7ee6c2fbd0731c1db8324c756f1f 100644
--- a/ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DP.java
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/DP.java
@@ -1,18 +1,16 @@
 /*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
 package eu.DECIDEh2020.architect.cloudpatterns;
 
 import org.apache.jena.rdf.model.Model;
diff --git a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/NFRConverter.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/NFRConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..aff3d80beb32e8ed4b83a4fa12d5498df7b36f88
--- /dev/null
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/NFRConverter.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
+package eu.DECIDEh2020.architect.cloudpatterns;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.vocabulary.DCTerms;
+
+public class NFRConverter {
+
+    public static Resource nfrToResource(ObjectNode nfr) {
+        Patterns patterns = Patterns.createDefaultPatterns();
+        return patterns.getNFR(nfr.get("type").asText());
+    }
+
+    public static ObjectNode nfrToJson(Resource nfr) {
+        ObjectNode obj = new ObjectMapper().createObjectNode();
+        obj.put("uriRef", nfr.getURI());
+        obj.put("title", nfr.getProperty(DCTerms.title).getString());
+        obj.put("description", nfr.getProperty(DCTerms.description).getString());
+        return obj;
+    }
+
+}
diff --git a/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternConverter.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..fe5800e9929274d345feb669cf2a6612223b88a0
--- /dev/null
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternConverter.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
+package eu.DECIDEh2020.architect.cloudpatterns;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.sparql.vocabulary.FOAF;
+import org.apache.jena.vocabulary.DCTerms;
+
+public class PatternConverter {
+
+    public static Resource patternToResource(ObjectNode nfr) {
+        return null;
+    }
+
+    public static ObjectNode patternToJson(Resource pattern) {
+        ObjectNode obj = new ObjectMapper().createObjectNode();
+        obj.put("uriRef", pattern.getURI());
+        obj.put("title", pattern.getRequiredProperty(DCTerms.title).getString());
+        if (pattern.hasProperty(DCTerms.type)) {
+            ArrayNode array = obj.putArray("categories");
+            pattern.listProperties(DCTerms.type).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+        }
+        if (pattern.hasProperty(DP.icon)) {
+            obj.put("icon", pattern.getPropertyResourceValue(DP.icon).getLocalName());
+        }
+        if (pattern.hasProperty(DCTerms.subject)) {
+            obj.put("subject", pattern.getProperty(DCTerms.subject).getString());
+        }
+        if (pattern.hasProperty(DCTerms.description)) {
+            obj.put("description", pattern.getProperty(DCTerms.description).getString());
+        }
+        if (pattern.hasProperty(DP.context)) {
+            obj.put("context", pattern.getProperty(DP.context).getString());
+        }
+        if (pattern.hasProperty(DP.solution)) {
+            obj.put("solution", pattern.getProperty(DP.solution).getString());
+        }
+        if (pattern.hasProperty(DCTerms.license)) {
+            obj.put("license", pattern.getPropertyResourceValue(DCTerms.license).getLocalName());
+        }
+        if (pattern.hasProperty(FOAF.page)) {
+            ObjectNode page = obj.putObject("page");
+            Resource p = pattern.getPropertyResourceValue(FOAF.page);
+            page.put("topic", p.getProperty(FOAF.topic).getString());
+            page.put("primaryTopic", p.getPropertyResourceValue(FOAF.primaryTopic).getURI());
+        }
+        if (pattern.hasProperty(DCTerms.relation)) {
+            ArrayNode array = obj.putArray("relations");
+            pattern.listProperties(DCTerms.relation).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+        }
+        if (pattern.hasProperty(DP.hasImpactOn)) {
+            ArrayNode array = obj.putArray("impacts");
+            pattern.listProperties(DP.hasImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+        }
+        if (pattern.hasProperty(DP.hasPositiveImpactOn)) {
+            ArrayNode array = obj.putArray("positiveImpacts");
+            pattern.listProperties(DP.hasPositiveImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+        }
+        if (pattern.hasProperty(DP.hasNegativeImpactOn)) {
+            ArrayNode array = obj.putArray("negativeImpacts");
+            pattern.listProperties(DP.hasNegativeImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+        }
+        return obj;
+    }
+
+    public static ObjectNode patternToJsonReduced(Resource pattern) {
+        ObjectNode obj = new ObjectMapper().createObjectNode();
+        obj.put("uriRef", pattern.getURI());
+        obj.put("title", pattern.getRequiredProperty(DCTerms.title).getString());
+        if (pattern.hasProperty(DCTerms.type)) {
+            ArrayNode array = obj.putArray("categories");
+            pattern.listProperties(DCTerms.type).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+        }
+        if (pattern.hasProperty(DP.hasPositiveImpactOn)) {
+            ArrayNode array = obj.putArray("positiveImpacts");
+            pattern.listProperties(DP.hasPositiveImpactOn).forEachRemaining(stmt -> array.add(stmt.getResource().getURI()));
+        }
+        return obj;
+    }
+
+}
diff --git a/ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/Patterns.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/Patterns.java
similarity index 51%
rename from ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/Patterns.java
rename to ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/Patterns.java
index da263c9e86e0856398eecc801d1fd33198f53323..ada7d34e197434fe50fbb153e44e1b6c95bb40b4 100644
--- a/ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/Patterns.java
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/Patterns.java
@@ -1,23 +1,23 @@
 /*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
 package eu.DECIDEh2020.architect.cloudpatterns;
 
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.jena.rdf.model.Model;
 import org.apache.jena.rdf.model.Resource;
 
+
 import java.io.InputStream;
 import java.util.List;
 
@@ -29,16 +29,24 @@ public interface Patterns {
 
     List<Resource> listPatterns();
 
+    List<ObjectNode> getPatternsByCategory(String type);
+
     List<Resource> getPatternsByCategory(Resource type);
 
     Resource getPattern(String uri);
 
+    ObjectNode getPatternAsJson(String uri);
+
+    Resource getNFR(String uri);
+
     InputStream getIcon(Resource icon);
 
     List<Resource> listNFRs();
 
     List<Resource> inferPatterns(List<Resource> nfrs);
 
+    List<ObjectNode> inferPatternsJson(List<ObjectNode> nfrs);
+
     List<Resource> inferBadPatterns(List<Resource> nfrs);
 
     static Patterns createDefaultPatterns() {
diff --git a/ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternsImpl.java b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternsImpl.java
similarity index 68%
rename from ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternsImpl.java
rename to ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternsImpl.java
index 4910cf55dbd3bc3a0a45c686ac5176564acb3146..c7c85563c1cd2a7698a627ce41878a20341187d0 100644
--- a/ARCHITECT/CloudPatterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternsImpl.java
+++ b/ARCHITECT/cloud-patterns/src/main/java/eu/DECIDEh2020/architect/cloudpatterns/PatternsImpl.java
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 2017 Fraunhofer FOKUS.
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the
-* GNU AGPL v3 which accompanies
-* this distribution, and is available at
-* http://www.gnu.org/licenses/agpl.txt
-*
-* Contributors:
-*
-* Simon Dutkowski Fraunhofer FOKUS
-*
-* Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
-*/
-
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
 package eu.DECIDEh2020.architect.cloudpatterns;
 
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.jena.query.*;
 import org.apache.jena.rdf.model.Model;
 import org.apache.jena.rdf.model.ModelFactory;
@@ -25,7 +24,9 @@ import org.apache.jena.vocabulary.*;
 
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 class PatternsImpl implements Patterns {
 
@@ -57,18 +58,37 @@ class PatternsImpl implements Patterns {
     @Override
     public List<Resource> getPatternsByCategory(Resource type) {
         Resource res = patternsModel.getResource(type.getURI());
+        // res == type -> so why getting resource from patternsModel again?
+        // check if type is a valid resource in decide-pattern?
         if (res != null && res.hasProperty(SKOS.inScheme, DECIDEPatterns.patternCategories)) {
             return patternsModel.listResourcesWithProperty(DCTerms.type, res).toList();
         } else {
-            return null;
+            return Collections.emptyList();
         }
     }
 
+    @Override
+    public List<ObjectNode> getPatternsByCategory(String category) {
+        Resource res = patternsModel.getResource(DECIDEPatterns.BASE + "patterncategories/" + category);
+        List<Resource> patterns = getPatternsByCategory(res);
+        return patterns.stream().map(PatternConverter::patternToJsonReduced).collect(Collectors.toList());
+    }
+
     @Override
     public Resource getPattern(String uri) {
         return patternsModel.getResource(uri);
     }
 
+    @Override
+    public ObjectNode getPatternAsJson(String uri) {
+        return PatternConverter.patternToJson(patternsModel.getResource(uri));
+    }
+
+    @Override
+    public Resource getNFR(String type) {
+        return patternsModel.getResource(DECIDEPatterns.BASE + "patterns/" + type.toLowerCase());
+    }
+
     @Override
     public InputStream getIcon(Resource icon) {
         String fileName = icon.getLocalName();
@@ -111,6 +131,13 @@ class PatternsImpl implements Patterns {
         return execute(query);
     }
 
+    @Override
+    public List<ObjectNode> inferPatternsJson(List<ObjectNode> nfrs) {
+        List<Resource> nfrResources = nfrs.stream().map(nfr -> this.getNFR(nfr.get("type").asText())).collect(Collectors.toList());
+        List<Resource> patterns = inferPatterns(nfrResources);
+        return patterns.stream().map(PatternConverter::patternToJsonReduced).collect(Collectors.toList());
+    }
+
     private List<Resource> execute(Query query) {
         QueryExecution exec = QueryExecutionFactory.create(query, patternsModel);
         ResultSet result = exec.execSelect();
diff --git a/ARCHITECT/cloud-patterns/src/main/resources/patterns/decide-patterns.ttl b/ARCHITECT/cloud-patterns/src/main/resources/patterns/decide-patterns.ttl
new file mode 100644
index 0000000000000000000000000000000000000000..1e21cb8bea040d94f676d255a20773a49ddb0d35
--- /dev/null
+++ b/ARCHITECT/cloud-patterns/src/main/resources/patterns/decide-patterns.ttl
@@ -0,0 +1,588 @@
+#
+# Copyright (c) 2017 Fraunhofer FOKUS.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the
+# GNU AGPL v3 which accompanies
+# this distribution, and is available at
+# http://www.gnu.org/licenses/agpl.txt
+#
+# Contributors:
+# Simon Dutkowski Fraunhofer FOKUS
+#
+# Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+#
+@base <http://decideh2020.eu/resources/patterns/> .
+@prefix rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#> .
+@prefix xsd:<http://www.w3.org/2001/XMLSchema#> .
+@prefix dct:<http://purl.org/dc/terms/> .
+@prefix foaf:<http://xmlns.com/foaf/0.1/> .
+@prefix dp:<http://decideh2020.eu/ns/patterns/> .
+@prefix skos:<http://www.w3.org/2004/02/skos/core#> .
+
+<http://decideh2020.eu/resources/patterncategories>
+	a skos:ConceptScheme;
+	rdfs:label "Cloud Pattern Categories"@en .
+
+<http://decideh2020.eu/resources/patterncategories/fundamental>
+	a skos:Concept;
+	skos:inScheme <http://decideh2020.eu/resources/patterncategories>;
+	skos:prefLabel "Fundamental Pattern"@en .
+
+<http://decideh2020.eu/resources/patterncategories/development>
+	a skos:Concept;
+	skos:inScheme <http://decideh2020.eu/resources/patterncategories>;
+	skos:prefLabel "Development Pattern"@en .
+
+<http://decideh2020.eu/resources/patterncategories/optimization>
+	a skos:Concept;
+	skos:inScheme <http://decideh2020.eu/resources/patterncategories>;
+	skos:prefLabel "Optimization Pattern"@en .
+
+<http://decideh2020.eu/resources/patterncategories/deployment>
+	a skos:Concept;
+	skos:inScheme <http://decideh2020.eu/resources/patterncategories>;
+	skos:prefLabel "Deployment Pattern"@en .
+
+<http://decideh2020.eu/resources/patterncategories/simple>
+	a skos:Concept;
+	skos:inScheme <http://decideh2020.eu/resources/patterncategories>;
+	skos:prefLabel "Simple Pattern"@en .
+
+<availability>
+	a dp:NFR;
+	dct:title "Availability"@en;
+	dct:description "'availability' is considered as a function of time, defined as the probability that the system is operating correctly and is available to perform its function at the instant of time 't'."@en .
+
+<cost>
+	a dp:NFR;
+	dct:title "Cost"@en;
+	dct:description "Cost of the application is the sum of the charged cost of each Cloud Service."@en .
+
+<scalability>
+	a dp:NFR;
+	dct:title "Scalability"@en;
+	dct:description "Scalability refers to the characteristic of a system to increase performance by adding additional resources."@en .
+
+<performance>
+	a dp:NFR;
+	dct:title "Performance"@en;
+	dct:description "Performance is an indicator of how well a software system or component meets its requirements for timeliness. Timeliness is measured in terms of response time or throughput."@en .
+
+<location>
+	a dp:NFR;
+	dct:title "Location"@en;
+	dct:description "Location is the physical region where the cloud service is located."@en .
+
+<distributed-application>
+	a dp:Pattern;
+	dct:title "Distributed Application"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dp:icon <urn:distributed_application.png>;
+	dct:subject "Why to decompose application functionality into multiple, independent application components?"@en;
+	dct:description "Divide application functionality among multiple application components - each can then be scaled out independently (among different cloud providers)."@en;
+	dp:context
+	"Cloud application architecture should make use of the cloud provider's distribution and scaling-out support system. The cloud application should employ multiple, possibly redundant IT resources for each component to ensure its availability."@en;
+	dp:solution
+	"The cloud application's functionality is divided into multiple, independent components - each providing a specific function. These components can be grouped together into tiers to denote that they should be deployed together physically, i.e., on the same server, cluster, or cloud provider."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Distributed Application Pattern";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/distributed_application/>;
+	];
+	dct:relation <elastic-infrastructure>;
+	dct:relation <watchdog> .
+
+<two-tier-cloud-application>
+	a dp:Pattern;
+	dct:title "Two-Tier Cloud Application"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dp:icon <urn:two_tier_cloud_application.png>;
+	dct:subject "Why separate a cloud application into stateful (data handling) and stateless components?"@en;
+	dct:description
+	"Presentation and business logic is bundled into one stateless tier that is easy to scale independently. This tier is separated from the data tier that is harder to scale and often handled by a provider-supplied storage offering."@en;
+	dp:context
+	"A Distributed Application is composed of multiple application components independently scalable. Data handling or stateful functionality is significantly harder to scale than stateless components, since stateful components have to provide state information between instances. Therefore, a cloud application should be composed of easy-to-scale, stateless and hard-to-scale, stateful components."@en;
+	dp:solution
+	"The cloud application's functionality is decomposed into data handling, stateful components, accompanied by one or several storage offerings, and stateless components handling presentation and business logic. This separation enables the two tiers to elastically and independently adapt to their workload."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Two-Tier Cloud Application";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/two_tier_cloud_application/>;
+	];
+	dct:relation <stateless-component>;
+	dct:relation <distributed-application>;
+	dct:relation <stateful-components>;
+	dct:relation <three-tier-cloud-application>;
+	dct:relation <content-distribution-network>;
+	dct:relation <hybrid-data>;
+	dct:relation <hybrid-backup>;
+	dct:relation <hybrid-application-functions>;
+	dct:relation <hybrid-development-environment> .
+
+<three-tier-cloud-application>
+	a dp:Pattern;
+	dct:title "Three-Tier Cloud Application"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dp:icon <urn:three_tier_cloud_application.png>;
+	dct:subject "When to decompose presentation logic, business logic, and data handling into three separate tiers that can be scaled independently?"@en;
+	dct:description
+	"The presentation logic, business logic, and data handling are realized as separate tiers to handle stateless presentation and compute-intensive processing independently of the data tier, which is harder to scale and often handled by the cloud provider."@en;
+	dp:context
+	"Dividing a Distributed Application into three tiers instead of two (see Two-Tier Cloud Applications) results in a more efficient application, if there are processing components (e.g. business logic) which are more computationally intensive or are used less frequently than UI components, summarizing their implementation in one tier can be inefficient. This is the case if components experience different workloads. The number of provisioned component instances cannot be aligned well to differing workloads if they are grouped into coarse grained tiers."@en;
+	dp:solution
+	"The application is decomposed into three tiers, where each tier can be scaled independently and elastically. The presentation tier is comprised of a load balancer and an application component that implements the Stateless Component pattern and User Interface Component pattern. The business logic tier is comprised of an application component implementing the Stateless Component pattern in addition to the Processing Component pattern."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Three-Tier Cloud Application";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/three_tier_cloud_application/>;
+	];
+	dct:relation <two-tier-cloud-application>;
+	dct:relation <stateless-component>;
+	dct:relation <processing-component>;
+	dct:relation <user-interface-component>;
+	dct:relation <content-distribution-network>;
+	dct:relation <hybrid-cloud-applications> .
+
+<loose-coupling>
+	a dp:Pattern;
+	dct:title "Loose Coupling"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dp:icon <urn:loose_coupling.png>;
+	dct:subject "How can dependencies between Distributed Applications and between individual components of these applications be reduced?"@en;
+	dct:description
+	"Information exchange between applications and their individual components as well as associated management tasks, such as scaling, failure handling, or update management can be simplified significantly if application components can be treated individually and the dependencies among them are kept to a minimum."@en;
+	dp:context
+	"Information exchange between applications and their individual components as well as associated management tasks, such as scaling, failure handling, or update management can be simplified significantly if application components can be treated individually and the dependencies among them are kept to a minimum."@en;
+	dp:solution
+	"Communicating components and multiple integrated applications are decoupled from each other by interacting through a broker. This broker encapsulates the assumptions that communication partners would otherwise have to make about one other and, thus, ensures separation of concerns."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Loose Coupling Pattern";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/loose_coupling/>;
+	];
+	dct:relation <distributed-application>;
+	dct:relation <two-tier-cloud-application>;
+	dct:relation <hypervisor>;
+	dct:relation <eventual-consistency>;
+	dct:relation <message-oriented-middleware>;
+	dct:relation <watchdog> .
+
+<managed-configuration>
+	a dp:Pattern;
+	dct:title "Managed Configuration"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dp:icon <urn:managed_configuration.png>;
+	dct:subject "How can the configuration of scaled out application component instances be controlled in a coordinated fashion?"@en;
+	dct:description "Scaled-out application components should use a centrally stored configuration to provide a unified behavior that can be adjusted simultaneously."@en;
+	dp:context
+	"Application components of a Distributed Application often have configuration parameters. Storing configuration information together with the application component implementation can be unpractical as it results in more overhead in case of configuration changes. Each running instance of the application component must be updated separately. Component images stored in Elastic Infrastructures or Elastic Platforms also have to be updated upon configuration change."@en;
+	dp:solution
+	"Configurations are stored in a central Storage Offering, commonly, a Relational Database, Key-Value Storage, or Blob Storage from where it is accessed by all running component instances either by accessing the storage periodically or by sending messages to the components."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Managed Configuration";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/managed_configuration/>;
+	];
+	dct:relation <elastic-load-balancer>;
+	dct:relation <elastic-queue>;
+	dct:relation <provider-adapter>;
+	dct:relation <watchdog> .
+
+<containerization>
+	a dp:Pattern;
+	dct:title "Containerization"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dct:subject "How can an environment be provided with maximum support for services with high-performance recovery and scalability requirements?"@en;
+	dct:description
+	"Container-based solutions provide the important benefit of cost savings because containers are a solution to deployment problems caused by the lack of dependencies in production environments. Containers significantly improve DevOps and production operations."@en;
+	dp:context "A container management system or container engine is used for the deployment and operation of containers."@en;
+	dp:solution
+	"Services deployed on bare metal or virtual servers can impose a significant footprint. Virtualization improves portability but introduces a layer of intermediate processing that can further increase the footprint. Monolithic solution deployments can lead to widespread reduced performance and availability when any one service or solution component suffers an outage or a runtime exception. Services are deployed independently, or together with composed services, as autonomous units that are packaged into independently manageable and autonomous container images, each of which includes the services� underlying system dependencies. Tooling is provided to manage the building, deploying and operating of the containers."@en;
+	.
+
+<service-registry>
+	a dp:Pattern;
+	dct:title "Service Registry"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/fundamental>;
+	dct:subject "How are services packaged and deployed?"@en;
+	dct:description
+	"Implement a service registry, which is a database of services, their instances and their locations. Service instances are registered with the service registry on start-up and deregistered on shutdown. Client of the service and/or routers query the service registry to find the available instances of a service. A service registry might invoke a service instance�s health check API to verify that it is able to handle requests."@en;
+	dp:context
+	"You have applied the Microservice architecture pattern and architected your system as a set of services. Each service is deployed as a set of service instances for throughput and availability."@en;
+	dp:solution "Package the service as a (Docker) container image and deploy each service instance as a container"@en;
+	dct:license <unknown/propriatary>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Service Registry";
+		foaf:primaryTopic <http://microservices.io/patterns/deployment/service-per-container.html>;
+	]; .
+
+<provider-adapter>
+	a dp:Pattern;
+	dct:title "Provider Adapter"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:provider_adapter.png>;
+	dct:subject "How can the dependencies of an application component on a provider-specific interface be managed?"@en;
+	dct:description
+	"Provider interfaces are encapsulated and mapped to unified interfaces used in applications to separate concerns of interactions with the provider from application functionality."@en;
+	dp:context
+	"Cloud providers offer many interfaces that can be used in application components of a Distributed Application. If a component directly interacts with these interfaces, its implementation becomes strongly interleaved with the specific functions offered and the protocols used."@en;
+	dp:solution
+	"The Provider Adapter encapsulates all provider-specific implementations required for authentication, data formatting etc. in an abstract interface. The Provider Adapter , thus, ensures separation of concerns between application components accessing provider functionality and application components providing application functionality. It may also offer synchronous provider-interfaces to be accessed asynchronously via messages and vice versa."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Provider Adapter";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/provider_adapter/>;
+	];
+	dct:relation <data-access-component>;
+	dct:relation <managed-configuration>;
+	dct:relation <elasticity-manager>;
+	dct:relation <elastic-load-balancer>;
+	dct:relation <elastic-queue>;
+	dct:relation <watchdog>;
+	.
+
+<elasticity-manager>
+	a dp:Pattern;
+	dct:title "Elasticity Manager"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:elasticity_manager.png>;
+	dct:subject "How can the number of required application component instances be determined based on the utilization of hosting IT resources?"@en;
+	dct:description
+	"The utilization of IT resources on which an elastically scaled-out application is hosted, for example, virtual servers is used to determine the number of required application component instances."@en;
+	dp:context
+	"Application components of a Distributed Application hosted on an Elastic Infrastructure or Elastic Platform shall be scaled-out. The instances of applications components, thus, shall be provisioned and decommissioned automatically based on the current workload experienced by the application."@en;
+	dp:solution
+	"The utilization of cloud resources on which application component instances are deployed is monitored. This could be, for example, the CPU load of a virtual server. This information is used to determine the number of required instances."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Elasticity Manager";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/elasticity_manager/>;
+	];
+	dct:relation <elastic-load-balancer>;
+	dct:relation <elastic-queue>;
+	dct:relation <provider-adapter>;
+	dct:relation <statless-component> .
+
+<resiliency-management-process>
+	a dp:Pattern;
+	dct:title "Resiliency Management Process"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:resiliency_management_process.png>;
+	dct:subject "How can the overall availability of an application be ensured automatically even if individual application component instances fail?"@en;
+	dct:description "Application components are checked for failures and replaced automatically without human intervention."@en;
+	dp:context
+	"A Watchdog allows to monitor application components and react to failures. To handle this task, the component functionality must be verified and failing components must be replaced with newly provisioned components in a coordinated fashion."@en;
+	dp:solution
+	"This process is triggered by the monitoring functionality or by the Watchdog if it detects a component failure. Additionally, the Resiliency Management Process periodically verifies application component health. If a failure is detected, the faulty application component instance is decommissioned and replaced by a newly provisioned instance."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Provider Adapter";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/resiliency_management_process/>;
+	];
+	dct:relation <statless-component>;
+	dct:relation <elasticity-managment-process>;
+	.
+
+<elastic-load-balancer>
+	a dp:Pattern;
+	dct:title "Elastic Load Balancer"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:solution
+	"Based on the number of synchronous requests handled by a load balancer and possibly other utilization information, the required number of required component instances is determined."@en;
+	dp:context
+	"Application components of a Distributed Application shall be scaled out automatically. Requests sent to an application shall be used as an indicator for the currently experienced workload from which the required number of components instances shall be deducted."@en;
+	dct:description "The number of synchronous accesses to an elastically scaled-out application is used to determine the number of required application component instances."@en;
+	dct:subject "How can the number of required application component instances be determined based on monitored synchronous accesses?"@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Elastic Load Balancer";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/elastic_load_balancer/>;
+	];
+	dct:relation <statless-component>;
+	dct:relation <watchdog>;
+	dct:relation <provider-adapter>; .
+
+<elastic-queue> 
+	a dp:Pattern;
+	dct:title "Elastic Queue"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/optimization>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:elastic_queue.png>;
+	dct:subject "How can the number of required application component instances be adjusted based on monitored asynchronous accesses?"@en;
+	dct:description "The number of asynchronous accesses via messaging to an elastically scaled-out application is used to adjust the number of required application component instances."@en;
+	dp:solution
+	"Queues that are used to distribute asynchronous requests among multiple application components instances are monitored. Based on the number of enqueued messages the Elastic Queue adjusts the number of application component instances handling these requests."@en;
+	dp:context
+	"A Distributed Application is comprised of multiple application components that are accessed asynchronously and deployed to an Elastic Infrastructure or an Elastic Platform. The required provisioning and decommissioning operations to scale this application should be performed in an automated fashion."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Elastic Load Balancer";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/elastic_queue/>; ];
+	dct:relation <elasticity-management-process>;
+	dct:relation <statless-componenet>;
+	dct:relation <watchdog>;
+	dct:relation <provider-adapter> .
+
+<stateless-component>
+	a dp:Pattern;
+	dct:title "Stateless Component"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:icon <urn:stateless_component.png>;
+	dct:subject "How to increase an application component's elasticity and robustness?"@en;
+	dct:description "The application's state is detached from the application's functionality to ease scaling-out and make the application more tolerant towards component failures."@en;
+	dp:context
+	"The components of a Distributed Application are distributed among multiple cloud resources or cloud providers to benefit from this distributed runtime environment. The most significant factor complicating addition and removal of such component instances is their internal state. In case of failure, this information may be lost."@en;
+	dp:solution
+	"Application components are implemented in a fashion that they do not have an internal state. Instead, their state and configuration is stored externally in Storage Offerings or provided to the component with each request."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Stateless Component Pattern";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/stateless_component/>;
+	];
+	dct:relation <relational-database>;
+	dct:relation <distributed-application>;
+	dct:relation <key-value-storage>;
+	dct:relation <blob-storage>;
+	dct:relation <block-storage>;
+	dct:relation <key-value-storage>;
+	dct:relation <strict-consistency>;
+	dct:relation <eventual-consistency>;
+	dct:relation <message-oriented-middleware> .
+
+<data-access-component>
+	a dp:Pattern;
+	dct:title "Data Access Component"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:icon <urn:data_access_component.png>;
+	dct:subject "How can the complexity of data storage due to access protocols and data consistency be hidden and isolated while ensuring data structure configurability?"@en;
+	dct:description
+	"Functionality to store and access data elements is provided by special components that isolate complexity of data access, enable additional data consistency, and ensure adjustability of handled data elements to meet different customer requirements."@en;
+	dp:solution
+	"Access to different data sources is integrated by a Data Access Component. This component coordinates all data manipulation. In case a storage offering shall be replaced or the interface of a storage offering changes, the Data Access Component is the only component that has to be adjusted."@en;
+	dp:context
+	"Handling the complexity of accessing data, i.e., handling of authorization, querying for data, failure handling etc. tightly couples application components to the used storage offering and complicates the implementation of these components as a lot of the idiosyncrasies of data handling have to be respected by them. Instead, different data sources should be integrated to provide a unified data access to other application components. Also, data may be stored at different cloud providers that have to be integrated as well."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Data Access Component";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/data_access_component/>; ];
+	dct:relation <provider-adapter>;
+	dct:relation <compliant-data-replication>; .
+
+<compliant-data-replication>
+	a dp:Pattern;
+	dct:title "Compliant Data Replication"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/deployment>;
+	dp:hasPositiveImpactOn <location>;
+	dp:icon <urn:compliant_data_replication.png>;
+	dct:subject "How can data be replicated between environments if some environments may only handle subsets of the data due to laws and corporate regulations?"@en;
+	dct:description
+	"Data is replicated among multiple environments that may handle different data subsets. During replication data is obfuscated and deleted depending on laws and security regulations. Data updates are adjusted automatically to reflect the different data structures handled by environments."@en;
+	dp:solution
+	"Data replicas in different environments are updated asynchronously using messaging. Message filters are used to delete and obfuscate certain data elements in these messages as they leave the trusted environment. Information about the data manipulations stored in a storage offering. If data is then altered in the less secure environment, the corresponding update message is enriched by a message enricher as it enters the secure environment."@en;
+	dp:context
+	"Distributed Applications that are hosted in a Hybrid Cloud often require access to the same data from different application components. If application components accessing the data are globally distributed, data access performance may be reduced drastically if data is only stored in one geographic location. Therefore, data may have to be replicated. Due to laws and corporate regulations, some of these locations may only handle a subset of the available data or data has to be obfuscated."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Compliant Data Replication";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/compliant_data_replication/>; ]; .
+
+<user-interface-component>
+	a dp:Pattern;
+	dct:title "User Interface Component"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <availability>;
+	dp:icon <urn:user_interface_component.png>;
+	dct:subject "How can User Interface Components be accessed interactively by humans while being configurable and decoupled from the remaining application?"@en;
+	dct:description
+	"Interactive synchronous access to applications is provided to humans, while application-internal interaction is realized asynchronously when possible to ensure Loose Coupling. Furthermore, the user interface should be customizable to be used by different customers."@en;
+	dp:solution
+	"The User Interface Component serves as a bridge between the synchronous access of the human user and the asynchronous communication used with other application components. State information held externally, as described by the Stateless Component pattern. It is, therefore, attached to requests, may be held in a part of the user interface that is deployed on the user�s access device, or may be obtained from external storage. Instances of User Interface Components are scaled based on the number of synchronous requests to is as described by the Elastic Load Balancer pattern."@en;
+	dp:context
+	"User Interface Component instances part of a Distributed Application have to be added and removed easily from the application without affecting the user experience. The dependencies on other application components should, therefore, be reduced as much as possible."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "User Interface Component";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/user_interface_component/>; ];
+	dct:relation <elastic-load-balancer>;
+	dct:relation <managed-configuration>; .
+
+<processing-component>
+	a dp:Pattern;
+	dct:title "Processing Component"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:icon <urn:processing_component.png>;
+	dct:subject "How can processing be scaled out elastically among distributed resources while being configurable regarding the supported functions to meet different customers requirements?"@en;
+	dct:description
+	"Possibly long running processing functionality is handled by separate components to enable elastic scaling. Processing functionality is further made configurable to support different customer requirements."@en;
+	dp:solution
+	"Processing functionality is split into separate function blocks and assigned to independent Processing Components. Each processing component is scaled out independently and is implemented in a stateless fashion as described in the Stateless Component pattern. Scaling is handled by an Elastic Queue. Data required for processing is provided with requests or by Storage Offerings."@en;
+	dp:context
+	"The processing functionality offered by an application shall be handled by different application component instances that operate independently. Instances of these components have to be added and removed easily to the application as part of scaling operations."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Processing Component";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/processing_component/>; ];
+	dct:relation <user-interface-component>;
+	dct:relation <data-access-component>;
+	dct:relation <managed-configuration> .
+
+<content-distribution-network>
+	a dp:Pattern;
+	dct:title "Content Distribution Network"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/deployment>;
+	dp:hasPositiveImpactOn <performance>;
+	dp:icon <urn:content_distribution_network/.png>;
+	dct:subject ""@en;
+	dct:description "Applications component instances and data handled by them are globally distributed to meet the access performance required by a global user group."@en;
+	dp:solution
+	"Content replicas are established in different physical locations of one or multiple clouds. During this distribution of replicas, the topology of distribution networks is considered to ensure locality for all users. Replicas are updated from a central location."@en;
+	dp:context
+	"If the application provides multimedia content to users, for example, streamed videos and music the amount of data to be served increases drastically. If such multimedia content is located too far from the user accessing it, the communication delay of the distribution network may hinder the timely access to data. Therefore, storing content in only one centralized location, i.e., one cloud or data center is unfeasible."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Content Distribution Network";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/content_distribution_network/>; ]; .
+
+<hybrid-user-interface>
+	a dp:Pattern;
+	dct:title "Hybrid User Interface"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/deployment>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:icon <urn:hybrid_user_interface.png>;
+	dct:subject "How can a user interface for asynchronous interaction be hosted in a cloud while being integrated with an application otherwise hosted in a static data center?"@en;
+	dct:description
+	"Varying workload from a user group interacting asynchronously with an application is handled in an elastic environment while the remainder of an application resides in a static environment."@en;
+	dp:solution
+	"The User Interface Component serving users generating varying workload is hosted in an elastic cloud environment. Other application components that are hosted in a static environment. The user interface deployed in the elastic cloud is integrated with the remainder of the application in a decoupled fashion using messaging to ensure Loose Coupling."@en;
+	dp:context
+	"An application serves user groups with different workload behavior. One user group generates Static Workload, while another user group generates Periodic Workload, Once-in-a-lifetime Workload, Unpredictable Workload, or Continuously Changing Workload. Since the predictability of the user group size and workload behavior differs, it shall be ensured that unexpected peak workloads do not affect the performance of the application while each user group is handled by the most suitable cloud environment."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Hybrid User Interface";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_user_interface/>; ];
+	dct:relation <hybrid-processing>;
+	dct:relation <hybrid-backend>;
+	dct:relation <statless-component>;
+	dct:relation <three-tier-cloud-application>; .
+
+<hybrid-processing>
+	a dp:Pattern;
+	dct:title "Hybrid Processing"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/deployment>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:icon <urn:hybrid_processing.png>;
+	dct:subject "How can Processing Components that experiences varying workload be hosted in an elastic cloud while the remainder of an application is hosted in a static data center?"@en;
+	dct:description "Processing functionality that experiences varying workload is hosted in an elastic cloud while the remainder of an application resides in a static environment."@en;
+	dp:solution
+	"The Processing Components experiencing varying workloads are provisioned in an elastic cloud. Loose Coupling is ensured by exchanging information between the hosting environments asynchronously via messages."@en;
+	dp:context
+	"A Distributed Application provides processing functionality that experience different workload behavior. The user group accessing the application is, thus, predictable in size, but accesses the functions provided by the application differently. While most of the functions are used equally over time and, therefore, experience Static Workload, some Processing Components experience Periodic Workload, Unpredictable Workload, or Continuously Changing Workload."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Hybrid Processing";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_processing/>; ];
+	dct:relation <hybrid-backend>;
+	dct:relation <processing-component>;
+	dct:relation <three-tier-cloud-application>; .
+
+<hybrid-data>
+	a dp:Pattern;
+	dct:title "Hybrid Data"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/deployment>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:icon <urn:hybrid_data.png>;
+	dct:subject "How can a data handling functionality that experiences varying workload be hosted in an elastic cloud while the rest of the application is located in a static data center?"@en;
+	dct:description "Data of varying size is hosted in an elastic cloud while the remainder of an application resides in a static environment."@en;
+	dp:solution
+	"Data whose varying size makes it unsuitable for hosting in a static environment is handled by Storage Offerings in an elastic cloud. At this location data is either accessed by Data Access Components that are hosted in the static environment or by Data Access Components hosted in the elastic environment."@en;
+	dp:context
+	"A Distributed Application handles data whose size varies drastically over time. Large amounts of data may, thus, be generated periodically and are then deleted again, may increase and decrease randomly, or may display a general increase or decrease over time. Especially, during these changes, the user number and their accesses to the application can be static resulting in Static Workload on the remainder of the application components."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Hybrid Data";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_data/>;
+	];
+	dct:relation <hybrid-backend>;
+	dct:relation <content-distribution-network>;
+	dct:relation <data-access-component>; .
+
+<hybrid-backup>
+	a dp:Pattern;
+	dct:title "Hybrid Backup"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/deployment>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:icon <urn:hybrid_backup/png>;
+	dct:subject "How can data be archived in a remote environment while the remainder of the application is hosted in a static environment?"@en;
+	dct:description "Data is periodically extracted from an application to be archived in an elastic cloud for disaster recovery purposes."@en;
+	dp:solution
+	"A Distributed Application is hosted in a local static environment of the company. Data handled by Stateful Components is periodically extracted and replicated to a cloud storage offering."@en;
+	dp:context
+	"Many applications are used by small and medium businesses which do not have the required IT skills to host and maintain their own highly available infrastructure. Especially, requirements regarding business resiliency � the ability to recover from an error � and business continuity � the ability to operate during an error � are challenging. Furthermore, there are laws and regulations making businesses liable to archive data and keep it accessible for audits, often over very long periods of time."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Hybrid Backup";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_backup/>;
+	];
+	dct:relation <hybrid-data>;
+	dct:relation <compliant-data-replication>; .
+
+<hybrid-backend> 
+	a dp:Pattern;
+	dct:title "Hybrid Backend"@en;
+	dct:type <http://decideh2020.eu/resources/patterncategories/deployment>;
+	dct:type <http://decideh2020.eu/resources/patterncategories/development>;
+	dp:hasPositiveImpactOn <scalability>;
+	dp:icon <urn:hybrid_backend.png>;
+	dct:subject
+	"How can Processing Components that experience varying workload and need access to large amounts of data be hosted in an elastic environment while the remainder of the application is hosted in a static environment?"@en;
+	dct:description
+	"Backend functionality comprised of data intensive processing and data storage is experiencing varying workloads and is hosted in an elastic cloud while the rest of an application is hosted in a static data center."@en;
+	dp:solution
+	"The Processing Components experiencing varying workloads are hosted in an elastic cloud together with the data accessed during their operation. Processing Components in the elastic cloud are triggered from the static environment through asynchronous messages exchanged via message queues provided by a Message-oriented Middleware. A Data Access Component in the static environment ensures that data required by elastic Processing Components is stored in Storage Offerings The location where this data is stored may then be passed to the elastic Processing Components during their enactment via messages. Data that is not required by the backend functionality may still be stored in Stateful Components hosted in the static data center."@en;
+	dp:context
+	"A Distributed Application provides processing functionality that experiences varying workload behavior. Mainly, Static Workload has to be handled, but some Processing Components experience Periodic Workload, Unpredictable Workload, or Continuously Changing Workload. Application components providing the respective processing functionality experiencing varying workload should, therefore, be hosted in an elastic environment. However, these components have to access large amounts of data during their execution making them highly dependent on the availability and the timely access to such data."@en;
+	dct:license <https://creativecommons.org/licenses/by/4.0/>;
+	foaf:page [
+		a foaf:Document;
+		foaf:topic "Hybrid Backend";
+		foaf:primaryTopic <http://www.cloudcomputingpatterns.org/hybrid_backend/>;
+	];
+	dct:relation <three-tier-cloud-application>;
+	dct:relation <two-tier-cloud-application>;
+	dct:relation <hybrid-processing>;
+	dct:relation <compliant-data-replication>; .
\ No newline at end of file
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/CC-BY.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/CC-BY.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/CC-BY.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/CC-BY.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/_License.txt b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/_License.txt
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/_License.txt
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/_License.txt
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/application_component_proxy.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/application_component_proxy.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/application_component_proxy.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/application_component_proxy.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/at-least-once_delivery.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/at-least-once_delivery.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/at-least-once_delivery.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/at-least-once_delivery.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/batch_processing_component.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/batch_processing_component.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/batch_processing_component.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/batch_processing_component.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/blob_storage.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/blob_storage.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/blob_storage.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/blob_storage.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/block_storage.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/block_storage.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/block_storage.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/block_storage.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/community_cloud.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/community_cloud.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/community_cloud.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/community_cloud.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/compliant_data_replication.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/compliant_data_replication.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/compliant_data_replication.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/compliant_data_replication.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/content_distribution_network.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/content_distribution_network.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/content_distribution_network.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/content_distribution_network.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/continuously_changing_workload.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/continuously_changing_workload.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/continuously_changing_workload.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/continuously_changing_workload.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/data_abstractor.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/data_abstractor.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/data_abstractor.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/data_abstractor.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/data_access_component.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/data_access_component.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/data_access_component.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/data_access_component.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/dedicated_component.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/dedicated_component.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/dedicated_component.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/dedicated_component.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/distributed_application.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/distributed_application.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/distributed_application.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/distributed_application.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elastic_infrastructure.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elastic_infrastructure.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elastic_infrastructure.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elastic_infrastructure.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elastic_load_balancer.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elastic_load_balancer.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elastic_load_balancer.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elastic_load_balancer.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elastic_platform.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elastic_platform.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elastic_platform.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elastic_platform.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elastic_queue.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elastic_queue.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elastic_queue.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elastic_queue.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elasticity_management_process.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elasticity_management_process.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elasticity_management_process.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elasticity_management_process.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elasticity_manager.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elasticity_manager.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/elasticity_manager.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/elasticity_manager.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/environment-based_availability.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/environment-based_availability.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/environment-based_availability.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/environment-based_availability.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/eventual_consistency.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/eventual_consistency.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/eventual_consistency.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/eventual_consistency.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/exactly-once_delivery.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/exactly-once_delivery.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/exactly-once_delivery.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/exactly-once_delivery.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/execution_environment.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/execution_environment.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/execution_environment.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/execution_environment.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/feature_flag_management_process.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/feature_flag_management_process.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/feature_flag_management_process.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/feature_flag_management_process.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_application_functions.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_application_functions.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_application_functions.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_application_functions.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_backend.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_backend.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_backend.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_backend.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_backup.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_backup.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_backup.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_backup.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_cloud.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_cloud.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_cloud.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_cloud.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_data.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_data.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_data.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_data.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_development_environment.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_development_environment.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_development_environment.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_development_environment.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_multimedia_web_application.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_multimedia_web_application.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_multimedia_web_application.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_multimedia_web_application.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_processing.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_processing.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_processing.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_processing.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_user_interface.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_user_interface.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hybrid_user_interface.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hybrid_user_interface.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hypervisor.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hypervisor.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/hypervisor.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/hypervisor.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/idempotent_processor.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/idempotent_processor.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/idempotent_processor.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/idempotent_processor.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/infrastructure_as_a_service.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/infrastructure_as_a_service.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/infrastructure_as_a_service.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/infrastructure_as_a_service.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/integration_provider.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/integration_provider.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/integration_provider.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/integration_provider.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/key-value_storage.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/key-value_storage.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/key-value_storage.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/key-value_storage.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/loose_coupling.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/loose_coupling.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/loose_coupling.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/loose_coupling.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/managed_configuration.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/managed_configuration.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/managed_configuration.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/managed_configuration.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/map_reduce.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/map_reduce.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/map_reduce.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/map_reduce.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/message-oriented_middleware.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/message-oriented_middleware.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/message-oriented_middleware.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/message-oriented_middleware.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/message_mover.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/message_mover.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/message_mover.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/message_mover.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/multi-component_image.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/multi-component_image.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/multi-component_image.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/multi-component_image.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/node-based_availability.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/node-based_availability.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/node-based_availability.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/node-based_availability.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/once-in-a-lifetime_workload.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/once-in-a-lifetime_workload.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/once-in-a-lifetime_workload.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/once-in-a-lifetime_workload.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/periodic_workload.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/periodic_workload.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/periodic_workload.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/periodic_workload.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/platform_as_a_service.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/platform_as_a_service.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/platform_as_a_service.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/platform_as_a_service.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/private_cloud.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/private_cloud.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/private_cloud.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/private_cloud.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/processing_component.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/processing_component.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/processing_component.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/processing_component.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/provider_adapter.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/provider_adapter.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/provider_adapter.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/provider_adapter.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/public_cloud.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/public_cloud.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/public_cloud.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/public_cloud.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/relational_database.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/relational_database.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/relational_database.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/relational_database.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/resiliency_management_process.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/resiliency_management_process.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/resiliency_management_process.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/resiliency_management_process.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/restricted_data_access_component.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/restricted_data_access_component.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/restricted_data_access_component.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/restricted_data_access_component.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/shared_component.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/shared_component.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/shared_component.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/shared_component.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/software_as_a_service.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/software_as_a_service.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/software_as_a_service.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/software_as_a_service.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/standby_pooling_process.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/standby_pooling_process.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/standby_pooling_process.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/standby_pooling_process.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/stateful_component.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/stateful_component.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/stateful_component.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/stateful_component.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/stateless_component.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/stateless_component.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/stateless_component.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/stateless_component.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/static_workload.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/static_workload.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/static_workload.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/static_workload.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/strict_consistency.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/strict_consistency.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/strict_consistency.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/strict_consistency.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/tenant-isolated_component.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/tenant-isolated_component.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/tenant-isolated_component.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/tenant-isolated_component.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/three-tier_cloud_application.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/three-tier_cloud_application.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/three-tier_cloud_application.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/three-tier_cloud_application.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/timeout-based_delivery.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/timeout-based_delivery.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/timeout-based_delivery.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/timeout-based_delivery.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/timeout-based_message_processor.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/timeout-based_message_processor.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/timeout-based_message_processor.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/timeout-based_message_processor.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/transaction-based_delivery.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/transaction-based_delivery.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/transaction-based_delivery.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/transaction-based_delivery.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/transaction-based_processor.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/transaction-based_processor.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/transaction-based_processor.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/transaction-based_processor.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/two-tier_cloud_application.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/two-tier_cloud_application.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/two-tier_cloud_application.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/two-tier_cloud_application.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/unpredictable_workload.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/unpredictable_workload.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/unpredictable_workload.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/unpredictable_workload.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/update_transition_process.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/update_transition_process.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/update_transition_process.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/update_transition_process.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/user_interface_component.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/user_interface_component.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/user_interface_component.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/user_interface_component.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/virtual_networking.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/virtual_networking.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/virtual_networking.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/virtual_networking.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/watchdog.png b/ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/watchdog.png
similarity index 100%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/icons/watchdog.png
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/icons/watchdog.png
diff --git a/ARCHITECT/CloudPatterns/src/main/resources/patterns/patterns-owl.ttl b/ARCHITECT/cloud-patterns/src/main/resources/patterns/patterns-owl.ttl
similarity index 99%
rename from ARCHITECT/CloudPatterns/src/main/resources/patterns/patterns-owl.ttl
rename to ARCHITECT/cloud-patterns/src/main/resources/patterns/patterns-owl.ttl
index 198c3e180d17fb56d384282621314e2d1f2c9e31..a2ddf0a9fa130345b07aff2f01bddbe568c4fd76 100644
--- a/ARCHITECT/CloudPatterns/src/main/resources/patterns/patterns-owl.ttl
+++ b/ARCHITECT/cloud-patterns/src/main/resources/patterns/patterns-owl.ttl
@@ -7,12 +7,10 @@
 # http://www.gnu.org/licenses/agpl.txt
 #
 # Contributors:
-#
 # Simon Dutkowski Fraunhofer FOKUS
 #
 # Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
 #
-
 @prefix owl:  <http://www.w3.org/2002/07/owl#> .
 @prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
diff --git a/ARCHITECT/cloud-patterns/src/test/java/eu/DECIDEh2020/architect/patterns/PatternsTest.java b/ARCHITECT/cloud-patterns/src/test/java/eu/DECIDEh2020/architect/patterns/PatternsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..21b2a018721f63bec95cdac013cc057fa6d6d501
--- /dev/null
+++ b/ARCHITECT/cloud-patterns/src/test/java/eu/DECIDEh2020/architect/patterns/PatternsTest.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2017 Fraunhofer FOKUS.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the
+ * GNU AGPL v3 which accompanies
+ * this distribution, and is available at
+ * http://www.gnu.org/licenses/agpl.txt
+ *
+ * Contributors:
+ * Simon Dutkowski Fraunhofer FOKUS
+ *
+ * Initially developed in the context of DECIDE EU project www.DECIDE-h2020.eu
+ */
+package eu.DECIDEh2020.architect.patterns;
+
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.jena.rdf.model.Model;
+import org.apache.jena.rdf.model.ResIterator;
+import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.rdf.model.Statement;
+import org.apache.jena.sparql.function.library.leviathan.e;
+import org.apache.jena.vocabulary.DCTerms;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+import org.testng.asserts.SoftAssert;
+
+import eu.DECIDEh2020.architect.cloudpatterns.DECIDEPatterns;
+import eu.DECIDEh2020.architect.cloudpatterns.DP;
+import eu.DECIDEh2020.architect.cloudpatterns.Patterns;
+
+public class PatternsTest {
+
+	private Patterns patterns;
+	 private SoftAssert softAssert = new SoftAssert();
+
+	@BeforeTest
+	void initPatterns() {
+		patterns = Patterns.createDefaultPatterns();
+		assert patterns.getModel() != null : "Expected initial patterns model.";
+	}
+
+	@Test
+	void listPatterns() {
+		List<Resource> patternList = patterns.listPatterns();
+		assert patternList.size() == 23 : "Expected to get a list with 23 elements. But got " + patternList.size();
+	}
+
+	@Test
+	void getPattern() {
+		Resource pattern = patterns.getPattern(DECIDEPatterns.BASE + "patterns/loose-coupling");
+		assert pattern != null : "Expected to get loose coupling pattern.";
+		assert pattern.getProperty(DCTerms.title).getString()
+				.equals("Loose Coupling") : "Expected 'Loose Coupling' in title";
+	}
+
+	@Test
+	void getIcon() {
+		Resource pattern = patterns.getPattern(DECIDEPatterns.BASE + "patterns/stateless-component");
+		assert pattern != null : "Expected stateless component pattern.";
+		Resource icon = pattern.getProperty(DP.icon).getResource();
+		assert icon != null : "Expected icon property";
+		InputStream stream = patterns.getIcon(icon);
+		assert stream != null : "Expected icon as input stream.";
+	}
+
+	@Test
+	void getSolution() {
+		Resource pattern = patterns.getPattern(DECIDEPatterns.BASE + "patterns/stateless-component");
+		assert pattern != null : "Expected stateless component pattern.";
+		assert !pattern.getProperty(DP.solution).getString().isEmpty() : "Expected non empty string.";
+	}
+
+	@Test
+	void testCategories() {
+		List<Resource> patternList = patterns.getPatternsByCategory(patterns.getModel().createResource(":dummy"));
+		assert patternList == null : "Expected null list";
+		patternList = patterns.getPatternsByCategory(DECIDEPatterns.fundamentalCategory);
+		assert patternList.size() == 7 : "Expected list of patterns with 7 elements.";
+		patternList = patterns.getPatternsByCategory(DECIDEPatterns.optimizationCategory);
+		assert patternList.size() == 5 : "Expected empty list of 5 patterns.";
+		patternList = patterns.getPatternsByCategory(DECIDEPatterns.developmentCategory);
+		assert patternList.size() == 5 : "Expected list of patterns with two elements.";
+	}
+
+	@Test
+	void listNFRs() {
+		List<Resource> patternList = patterns.listNFRs();
+		assert patternList.size() == 5 : "Expected to get a list with 5 elements.";
+	}
+
+	@Test
+	void testInference() {
+		List<Resource> patternList = patterns.inferPatterns(Collections.singletonList(DECIDEPatterns.availability));
+		assert patternList.size() == 11 : "Expected to get a list with 3 elements. Got " + patternList.size();
+	}
+
+	@Test
+	void testBadInference() {
+		List<Resource> patternList = patterns.inferBadPatterns(Collections.singletonList(DECIDEPatterns.scalability));
+		assert patternList.size() == 0 : "Expected to get a list with 0 elements.";
+	}
+
+	@Test
+	void testHasImpactOn() {
+		List<Resource> patternList = patterns.listPatterns();
+		assert patternList != null : "Expected to get a list of 23 patterns";
+		Iterator<Resource> iter = patternList.iterator();
+		
+		while (iter.hasNext()) {
+			Resource pattern = iter.next();
+			assert pattern != null : "Expected a pattern";
+			Statement impact = pattern.getProperty(DP.hasPositiveImpactOn);
+			softAssert.assertNotNull(impact,pattern.getLocalName().toString());
+		}
+
+		softAssert.assertAll();
+	}
+
+}