Merge "Bug 572058 - [Robotics] It should be possible to use a (sub-) systems for the definition of a larger system"
diff --git a/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.othello/src/org/eclipse/papyrus/robotics/assertions/languages/othello/OthelloLanguage.java b/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.othello/src/org/eclipse/papyrus/robotics/assertions/languages/othello/OthelloLanguage.java
index 2c0b4ba..00f2d61 100644
--- a/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.othello/src/org/eclipse/papyrus/robotics/assertions/languages/othello/OthelloLanguage.java
+++ b/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.othello/src/org/eclipse/papyrus/robotics/assertions/languages/othello/OthelloLanguage.java
@@ -32,6 +32,7 @@
 import org.eclipse.papyrus.robotics.bpc.profile.bpc.Port;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentPort;
 import org.eclipse.papyrus.robotics.profile.robotics.components.System;
 import org.eclipse.papyrus.robotics.profile.robotics.services.ServiceDefinition;
@@ -126,7 +127,7 @@
 		// add all refinements
 		oss.append("REFINEMENT\n");
 		for (ComponentInstance compInstance : system.getInstances()) {
-			ComponentDefinition compDef = compInstance.getCompdef();
+			ComponentOrSystem compDef = compInstance.getCompdefOrSys();
 			oss.append("SUB ");
 			oss.append(compInstance.getBase_Property().getName());
 			oss.append(":"); //$NON-NLS-1$
@@ -144,7 +145,7 @@
 				Property prop = connectorEnd.getPartWithPort();
 				String portName = prop.getName() + StringConstants.DOT + ce.getName();
 				ComponentInstance compInstance = UMLUtil.getStereotypeApplication(prop, ComponentInstance.class);
-				ComponentDefinition compDef = compInstance.getCompdef();
+				ComponentOrSystem compDef = compInstance.getCompdefOrSys();
 				for (Port port : compDef.getPort()) {
 					if (((ComponentPort) port).getBase_Port().equals(ce)) {
 						if (isInputPort(port)) {
@@ -170,7 +171,7 @@
 		// add components
 		List<String> alreadyAdded = new ArrayList<String>();
 		for (ComponentInstance compInstance : system.getInstances()) {
-			ComponentDefinition compDef = compInstance.getCompdef();
+			ComponentOrSystem compDef = compInstance.getCompdefOrSys();
 			String compDefName = compDef.getBase_Class().getName();
 			if (!alreadyAdded.contains(compDefName)) {
 				oss.append("\n");
@@ -204,7 +205,7 @@
 	 */
 	public StringBuffer ossFromCompInstanceContract(ComponentInstance compInstance) {
 		StringBuffer oss = new StringBuffer();
-		List<Contract> contracts = AssertionsHelper.getCompDefinitionContracts(compInstance.getCompdef());
+		List<Contract> contracts = AssertionsHelper.getCompDefinitionContracts(compInstance.getCompdefOrSys());
 		for (Contract contract : contracts) {
 			oss.append(ossFromContract(compInstance, contract));
 		}
@@ -259,7 +260,7 @@
 	 * @param compDef
 	 * @return oss
 	 */
-	public StringBuffer ossFromCompDefinition(ComponentDefinition compDef, boolean considerAsSystem) {
+	public StringBuffer ossFromCompDefinition(ComponentOrSystem compDef, boolean considerAsSystem) {
 		StringBuffer oss = new StringBuffer();
 		oss.append("COMPONENT " + compDef.getBase_Class().getName());
 		if (considerAsSystem) {
@@ -376,7 +377,7 @@
 				String contract = "CONTRACT pass\nassume: true;\nguarantee: " + expression + ";\n";
 				oss.insert(systemRef, contract);
 			} else if (compInstance != null) {
-				ComponentDefinition compDef = compInstance.getCompdef();
+				ComponentOrSystem compDef = compInstance.getCompdefOrSys();
 				oss = ossFromCompDefinition(compDef, true);
 				oss.append("CONTRACT pass\n");
 				oss.append("assume: true;\n");
@@ -396,7 +397,7 @@
 			}
 			// Evaluating a component instance
 			else if (compInstance != null) {
-				ComponentDefinition compDef = compInstance.getCompdef();
+				ComponentOrSystem compDef = compInstance.getCompdefOrSys();
 				oss = ossFromCompDefinition(compDef, true);
 				List<Contract> contracts = AssertionsHelper.getCompDefinitionContracts(compDef);
 				for (Contract contract : contracts) {
diff --git a/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.p4rocl/src/org/eclipse/papyrus/robotics/assertions/languages/p4rocl/P4ROCLLanguage.java b/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.p4rocl/src/org/eclipse/papyrus/robotics/assertions/languages/p4rocl/P4ROCLLanguage.java
index 831cbed..eab33f5 100644
--- a/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.p4rocl/src/org/eclipse/papyrus/robotics/assertions/languages/p4rocl/P4ROCLLanguage.java
+++ b/plugins/assertions/languages/org.eclipse.papyrus.robotics.assertions.languages.p4rocl/src/org/eclipse/papyrus/robotics/assertions/languages/p4rocl/P4ROCLLanguage.java
@@ -26,6 +26,7 @@
 import org.eclipse.papyrus.robotics.assertions.languages.ocl.OCLExpressionLanguage;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.papyrus.robotics.profile.robotics.parameters.ParameterEntry;
 import org.eclipse.papyrus.robotics.profile.robotics.parameters.ParameterInstance;
 import org.eclipse.uml2.uml.Element;
@@ -132,7 +133,7 @@
 			for (ComponentInstance instance : instances) {
 				// check in properties
 				Map<String, ValueSpecification> instanceProperties = AssertionsHelper.getProperties(
-						instance.getCompdef().getBase_Class());
+						instance.getCompdefOrSys().getBase_Class());
 				if (instanceProperties.containsKey(propertyInExpression)) {
 					globalSum.append(instance.getBase_Property().getName());
 					globalSum.append(".");
@@ -152,9 +153,10 @@
 	 * Get component definition default parameters
 	 * 
 	 * @param compDef
+	 *            a component definition (or system)
 	 * @return default parameters
 	 */
-	public Map<String, String> getCompDefinitionDefaultParameters(ComponentDefinition compDef) {
+	public Map<String, String> getCompDefinitionDefaultParameters(ComponentOrSystem compDef) {
 		Map<String, String> defaultParameters = new HashMap<String, String>();
 		Iterator<EObject> i = compDef.getBase_Class().eAllContents();
 		while (i.hasNext()) {
@@ -184,7 +186,7 @@
 	 */
 	public Map<String, String> getCompInstanceParameters(ComponentInstance compInstance) {
 		// first get the default ones
-		Map<String, String> parameters = getCompDefinitionDefaultParameters(compInstance.getCompdef());
+		Map<String, String> parameters = getCompDefinitionDefaultParameters(compInstance.getCompdefOrSys());
 
 		// Comp Instance's parameter values will override Comp definition default values
 		Iterator<EObject> i = compInstance.getBase_Property().eAllContents();
diff --git a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/META-INF/MANIFEST.MF b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/META-INF/MANIFEST.MF
index 772a0d5..0b7f4b0 100644
--- a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/META-INF/MANIFEST.MF
+++ b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/META-INF/MANIFEST.MF
@@ -14,7 +14,8 @@
  org.eclipse.core.databinding;bundle-version="1.0.0",
  org.eclipse.papyrus.infra.widgets;bundle-version="[3.6.0,5.0.0)",
  org.eclipse.papyrus.infra.properties.ui;bundle-version="[3.0.0,5.0.0)",
- org.eclipse.papyrus.uml.properties;bundle-version="[3.5.0,5.0.0)"
+ org.eclipse.papyrus.uml.properties;bundle-version="[3.5.0,5.0.0)",
+ org.eclipse.papyrus.robotics.core;bundle-version="0.8.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Automatic-Module-Name: org.eclipse.papyrus.robotics.assertions.languages
 Bundle-ActivationPolicy: lazy
diff --git a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/AssertionsHelper.java b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/AssertionsHelper.java
index 67c5017..03dd913 100644
--- a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/AssertionsHelper.java
+++ b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/AssertionsHelper.java
@@ -23,8 +23,8 @@
 import org.eclipse.papyrus.robotics.assertions.profile.assertions.Assertion;
 import org.eclipse.papyrus.robotics.assertions.profile.assertions.Contract;
 import org.eclipse.papyrus.robotics.assertions.profile.assertions.Property;
-import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.uml2.uml.Constraint;
 import org.eclipse.uml2.uml.Element;
 import org.eclipse.uml2.uml.OpaqueExpression;
@@ -99,7 +99,7 @@
 	 * @param compDefinition
 	 * @return list of contracts
 	 */
-	public static List<Contract> getCompDefinitionContracts(ComponentDefinition compDefinition) {
+	public static List<Contract> getCompDefinitionContracts(ComponentOrSystem compDefinition) {
 		List<Contract> contracts = new ArrayList<Contract>();
 		Iterator<EObject> it = compDefinition.getBase_Class().eAllContents();
 		while (it.hasNext()) {
diff --git a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/P4RExpressionsHelper.java b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/P4RExpressionsHelper.java
index 5aa3c39..60eb9ac 100644
--- a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/P4RExpressionsHelper.java
+++ b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/P4RExpressionsHelper.java
@@ -21,9 +21,10 @@
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.papyrus.robotics.assertions.profile.assertions.Property;
+import org.eclipse.papyrus.robotics.core.utils.ParameterUtils;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
-import org.eclipse.papyrus.robotics.profile.robotics.parameters.ParameterEntry;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.papyrus.robotics.profile.robotics.parameters.ParameterInstance;
 import org.eclipse.uml2.uml.Element;
 import org.eclipse.uml2.uml.InstanceValue;
@@ -32,11 +33,11 @@
 import org.eclipse.uml2.uml.util.UMLUtil;
 
 public class P4RExpressionsHelper {
-	
+
 	public static String updateExpression(EObject context, String expression) {
-		
+
 		// Get context
-		
+
 		ComponentDefinition compDefinition = null;
 		ComponentInstance compInstance = null;
 		org.eclipse.papyrus.robotics.profile.robotics.components.System system = null;
@@ -69,9 +70,9 @@
 						org.eclipse.papyrus.robotics.profile.robotics.components.System.class);
 			}
 		}
-		
+
 		// --> Global sum
-		
+
 		if (system != null) {
 			expression = handleGlobalSum(system, expression);
 		}
@@ -115,7 +116,7 @@
 			if (compDefinition != null) {
 				compDef = compDefinition.getBase_Class();
 			} else if (compInstance != null) {
-				compDef = compInstance.getCompdef().getBase_Class();
+				compDef = compInstance.getCompdefOrSys().getBase_Class();
 			}
 			Map<String, ValueSpecification> properties = getProperties(compDef);
 			for (String prop : properties.keySet()) {
@@ -137,10 +138,10 @@
 					instanceName = instanceName + ".";
 				}
 				Map<String, ValueSpecification> instanceProperties = getProperties(
-						instance.getCompdef().getBase_Class());
+						instance.getCompdefOrSys().getBase_Class());
 				for (String key : instanceProperties.keySet()) {
 					if (expression.contains(instanceName + key)) {
-						Object result = AssertionsHelper.evaluateValueSpecification(instance.getCompdef(),
+						Object result = AssertionsHelper.evaluateValueSpecification(instance.getCompdefOrSys(),
 								instanceProperties.get(key));
 						if (result == null) {
 							result = "null";
@@ -164,7 +165,7 @@
 		}
 		return expression;
 	}
-	
+
 	/**
 	 * Handle global sum
 	 * 
@@ -198,7 +199,7 @@
 			for (ComponentInstance instance : instances) {
 				// check in properties
 				Map<String, ValueSpecification> instanceProperties = getProperties(
-						instance.getCompdef().getBase_Class());
+						instance.getCompdefOrSys().getBase_Class());
 				if (instanceProperties.containsKey(propertyInExpression)) {
 					globalSum.append(instance.getBase_Property().getName());
 					globalSum.append(".");
@@ -213,7 +214,7 @@
 		}
 		return expression;
 	}
-	
+
 	/**
 	 * Get Properties
 	 * 
@@ -234,7 +235,7 @@
 		}
 		return properties;
 	}
-	
+
 	/**
 	 * Get component instance parameters
 	 * 
@@ -243,7 +244,7 @@
 	 */
 	public static Map<String, String> getCompInstanceParameters(ComponentInstance compInstance) {
 		// first get the default ones
-		Map<String, String> parameters = getCompDefinitionDefaultParameters(compInstance.getCompdef());
+		Map<String, String> parameters = getCompDefinitionDefaultParameters(compInstance.getCompdefOrSys());
 
 		// Comp Instance's parameter values will override Comp definition default values
 		Iterator<EObject> i = compInstance.getBase_Property().eAllContents();
@@ -266,33 +267,28 @@
 		}
 		return parameters;
 	}
-	
+
 	/**
 	 * Get component definition default parameters
 	 * 
 	 * @param compDef
 	 * @return default parameters
 	 */
-	public static Map<String, String> getCompDefinitionDefaultParameters(ComponentDefinition compDef) {
+	public static Map<String, String> getCompDefinitionDefaultParameters(ComponentOrSystem compDef) {
 		Map<String, String> defaultParameters = new HashMap<String, String>();
-		Iterator<EObject> i = compDef.getBase_Class().eAllContents();
-		while (i.hasNext()) {
-			EObject eo = i.next();
-			ParameterEntry parameter = UMLUtil.getStereotypeApplication((Element) eo, ParameterEntry.class);
-			// context was a componentDefinition
-			if (parameter != null) {
-				String name = parameter.getBase_Property().getName();
-				String value = "";
-				if (parameter.getBase_Property().getDefaultValue() != null) {
-					// They use to be literals but we evaluate in case it uses another language
-					Object result = AssertionsHelper.evaluateValueSpecification(compDef,
-							parameter.getBase_Property().getDefaultValue());
-					value = result.toString();
-				}
-				defaultParameters.put(name, value);
+		List<org.eclipse.uml2.uml.Property> parameters = ParameterUtils.getAllParameters(compDef.getBase_Class());
+		for (org.eclipse.uml2.uml.Property parameter : parameters) {
+			String name = parameter.getName();
+			String value = ""; //$NON-NLS-1$
+			if (parameter.getDefaultValue() != null) {
+				// They use to be literals but we evaluate in case it uses another language
+				Object result = AssertionsHelper.evaluateValueSpecification(compDef,
+						parameter.getDefaultValue());
+				value = result.toString();
 			}
+			defaultParameters.put(name, value);
 		}
 		return defaultParameters;
 	}
-	
+
 }
diff --git a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/editor/StyledStringEditor.java b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/editor/StyledStringEditor.java
index 9bd3420..0867599 100644
--- a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/editor/StyledStringEditor.java
+++ b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.languages/src/org/eclipse/papyrus/robotics/assertions/languages/editor/StyledStringEditor.java
@@ -36,6 +36,7 @@
 import org.eclipse.papyrus.robotics.assertions.languages.AssertionsHelper;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.papyrus.robotics.profile.robotics.parameters.ParameterEntry;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.StyleRange;
@@ -629,7 +630,7 @@
 					String instanceName = instance.getBase_Property().getName();
 					modelKeywords.add(instanceName);
 					// component parameters
-					ComponentDefinition compDef = instance.getCompdef();
+					ComponentOrSystem compDef = instance.getCompdefOrSys();
 					for(String param : getParameterNames(compDef.getBase_Class())) {
 						modelKeywords.add(instanceName + "." + param);
 					}
diff --git a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.ui/src/org/eclipse/papyrus/robotics/assertions/ui/actions/ValidateContractHandler.java b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.ui/src/org/eclipse/papyrus/robotics/assertions/ui/actions/ValidateContractHandler.java
index 44ccef9..4fb8153 100644
--- a/plugins/assertions/org.eclipse.papyrus.robotics.assertions.ui/src/org/eclipse/papyrus/robotics/assertions/ui/actions/ValidateContractHandler.java
+++ b/plugins/assertions/org.eclipse.papyrus.robotics.assertions.ui/src/org/eclipse/papyrus/robotics/assertions/ui/actions/ValidateContractHandler.java
@@ -9,7 +9,7 @@
  *
  * Contributors:
  * 	 Jabier Martinez, Tecnalia - Initial design and implementation
- *   Angel López, Tecnalia - Implementation
+ *   Angel L�pez, Tecnalia - Implementation
  *
  *****************************************************************************/
 package org.eclipse.papyrus.robotics.assertions.ui.actions;
@@ -32,6 +32,7 @@
 import org.eclipse.papyrus.robotics.assertions.profile.assertions.Contract;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.PlatformUI;
@@ -91,7 +92,7 @@
 			contracts = AssertionsHelper.getCompDefinitionContracts(compDefinition);
 			evaluateContracts(contracts, compDefinition);
 		} else if (compInstance != null) {
-			ComponentDefinition cd = compInstance.getCompdef();
+			ComponentOrSystem cd = compInstance.getCompdefOrSys();
 			contracts = AssertionsHelper.getCompDefinitionContracts(cd);
 			evaluateContracts(contracts, compInstance);
 		} else if (system != null) {
@@ -99,7 +100,7 @@
 			MessageDialog.openInformation(Display.getCurrent().getActiveShell(), "Validate Contract",
 					"Validating contracts of component instances");
 			for (ComponentInstance ci : system.getInstances()) {
-				ComponentDefinition cd = ci.getCompdef();
+				ComponentOrSystem cd = ci.getCompdefOrSys();
 				contracts = AssertionsHelper.getCompDefinitionContracts(cd);
 				evaluateContracts(contracts, ci);
 			}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java
index bb85141..3b3de82 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/provider/RoboticsContentProvider.java
@@ -24,7 +24,6 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.papyrus.commands.Activator;
 import org.eclipse.papyrus.emf.facet.custom.metamodel.v0_2_0.internal.treeproxy.EObjectTreeElement;
@@ -59,6 +58,9 @@
 	 */
 	protected ResourceSet encapsulatedRS;
 
+	/**
+	 * A stereotype to filter. Might be null.
+	 */
 	protected Class<? extends EObject> stereotypeFilter;
 
 	/**
@@ -69,14 +71,21 @@
 	 *            a context object used to obtain the resource set
 	 * @param encapsulated
 	 *            an existing content provider
-	 * @param stereotypeFilter
-	 *            a stereotype filter
+	 * @param stereotypeFilterList
+	 *            a stereotype a list of stereotype filters
 	 * @param extension
-	 *            a file extension to search for in workspace and plugin
+	 *            a file extension to search for in workspace and plugins
 	 */
 	public RoboticsContentProvider(EObject context, IStaticContentProvider encapsulated, Class<? extends EObject> stereotypeFilter, String extension) {
-		this(context, new FilterStereotypes(encapsulated, stereotypeFilter), extension);
+		if (context.eResource() != null) {
+			this.encapsulatedRS = context.eResource().getResourceSet();
+		} else {
+			Activator.log.warn("RoboticsContentProvider: passed context is not contained in a resource (proxy?)"); //$NON-NLS-1$
+		}
+		this.encapsulated = encapsulated;
 		this.stereotypeFilter = stereotypeFilter;
+		this.extension = extension;
+		tempRS = new ResourceSetImpl();
 	}
 
 	/**
@@ -90,20 +99,8 @@
 	 * @param extension
 	 *            a file extension to search for in workspace and plugin
 	 */
-	public RoboticsContentProvider(EObject context, IStructuredContentProvider encapsulated, String extension) {
-		if (context.eResource() != null) {
-			this.encapsulatedRS = context.eResource().getResourceSet();
-		} else {
-			Activator.log.debug("RoboticsContentProvider: passed context is not contained in a resource (proxy?)"); //$NON-NLS-1$
-		}
-		this.encapsulated = encapsulated;
-		if (encapsulated instanceof FilterStereotypes) {
-			this.stereotypeFilter = ((FilterStereotypes) encapsulated).getStereotypeFilter();
-		} else {
-			Activator.log.debug("RoboticsContentProvider: passed encapsulated content provider does not specialize class org.eclipse.papyrus.robotics.core.provider.FilterStereotypes"); //$NON-NLS-1$
-		}
-		this.extension = extension;
-		tempRS = new ResourceSetImpl();
+	public RoboticsContentProvider(EObject context, IStaticContentProvider encapsulated, String extension) {
+		this(context, encapsulated, null, extension);
 	}
 
 	protected Object[] getTopElements() {
@@ -136,9 +133,12 @@
 	}
 
 	/**
-	 * Check, whether a resource contains search stereotype (used in the hasChildren) dialog
+	 * Check, whether a resource contains searched stereotypes (used in the hasChildren) dialog
 	 */
 	protected boolean containsStereotype(Resource r) {
+		if (stereotypeFilter == null) {
+			return true;
+		}
 		for (EObject obj : r.getContents()) {
 			if (stereotypeFilter.isInstance(obj)) {
 				return true;
@@ -186,8 +186,7 @@
 			if (uri.path().endsWith(extension)) {
 				Resource r = tempRS.getResource((URI) element, true);
 				return containsStereotype(r);
-			}
-			else {
+			} else {
 				// likely a pathmap prefix, always return true
 				return true;
 			}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/types/advice/ComponentInstanceEditHelperAdvice.java b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/types/advice/ComponentInstanceEditHelperAdvice.java
index a030394..42dabda 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/types/advice/ComponentInstanceEditHelperAdvice.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/types/advice/ComponentInstanceEditHelperAdvice.java
@@ -29,7 +29,7 @@
 import org.eclipse.papyrus.robotics.core.menu.MenuHelper;
 import org.eclipse.papyrus.robotics.core.provider.RoboticsContentProvider;
 import org.eclipse.papyrus.robotics.core.utils.FileExtensions;
-import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.papyrus.uml.tools.providers.UMLContentProvider;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.uml2.uml.Classifier;
@@ -54,7 +54,7 @@
 
 		EncapsulatedContentProvider cpWithWS = new RoboticsContentProvider(part,
 				new UMLContentProvider(part, UMLPackage.eINSTANCE.getTypedElement_Type()),
-				ComponentDefinition.class, FileExtensions.COMPDEF_UML);
+				ComponentOrSystem.class, FileExtensions.COMPDEF_UML + "|" + FileExtensions.SYSTEM_UML); //$NON-NLS-1$
 
 		EnhancedPopupMenu popupMenuState = MenuHelper.createPopupMenu(cpWithWS, "Choose component type", false);
 
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/ParameterUtils.java b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/ParameterUtils.java
index 475fd03..e505f0a 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/ParameterUtils.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/ParameterUtils.java
@@ -1,3 +1,19 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  ansgar.radermacher@cea.fr  - Initial API and implementation
+ *
+ *****************************************************************************/
+
 package org.eclipse.papyrus.robotics.core.utils;
 
 import java.util.ArrayList;
@@ -11,7 +27,14 @@
 import org.eclipse.uml2.uml.Property;
 import org.eclipse.uml2.uml.StructuredClassifier;
 
+/**
+ * Utilities around parameter classes
+ */
 public class ParameterUtils {
+	/**
+	 * @param clazz a component definition
+	 * @return all parameters of a component definition
+	 */
 	public static List<Property> getAllParameters(Class clazz) {
 		List<Property> parameterList = new ArrayList<Property>();
 		for (Class superClass : clazz.getSuperClasses()) {
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/ScanUtils.java b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/ScanUtils.java
index 382f602..812cd4d 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/ScanUtils.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/ScanUtils.java
@@ -31,7 +31,7 @@
 
 	/**
 	 * @param extension
-	 *            filter models having this extension
+	 *            filter models having this extension (a "|" allows to check for multiple extensions)
 	 * @return a list of URIs
 	 */
 	public static List<URI> modelURIsInWorkspace(String extension) {
@@ -55,6 +55,7 @@
 	 * URIs of the models contained.
 	 * 
 	 * @param extension
+	 *            an extension (a "|" allows to check for multiple extensions)
 	 * @return list of URIs
 	 */
 	public static List<URI> pathmapsWithModels(String extension) {
@@ -86,7 +87,7 @@
 	 * @param uri
 	 *            the URI of a pathmap - all URIs accessible via that pathmap are returned
 	 * @param extension
-	 *            the file extension to scan for
+	 *            the file extension to scan for (a "|" allows to check for multiple extensions)
 	 * @return list of model URIs
 	 */
 	public static List<URI> modelsFromPath(URI uri, String extension) {
@@ -128,7 +129,7 @@
 	 * @param path
 	 *            an initial path within the bundle
 	 * @param extension
-	 *            an extension
+	 *            an extension (a "|" allows to check for multiple extensions)
 	 * @return true, if the bundle contains models with the given extension
 	 */
 	protected static boolean hasBundleModels(Bundle bundle, String path, String extension) {
@@ -137,7 +138,7 @@
 		if (urlEnum != null) {
 			while (urlEnum.hasMoreElements()) {
 				URL url = urlEnum.nextElement();
-				if (url.getPath().endsWith(extension)) {
+				if (matchesExtension(url.getPath(), extension)) {
 					return true;
 				} else {
 					boolean found = hasBundleModels(bundle, url.getPath(), extension);
@@ -157,7 +158,7 @@
 		if (urlEnum != null) {
 			while (urlEnum.hasMoreElements()) {
 				URL url = urlEnum.nextElement();
-				if (url.getPath().endsWith(extension)) {
+				if (matchesExtension(url.getPath(), extension)) {
 					String modelPath = pathmap + url.getPath().replaceFirst(initialPath, ""); //$NON-NLS-1$
 					URI uri = URI.createURI(modelPath);
 					list.add(uri);
@@ -217,7 +218,7 @@
 			if (member instanceof IContainer) {
 				processContainer((IContainer) member, extension, list);
 			} else if (member instanceof IFile) {
-				if (member.getName().endsWith(extension)) {
+				if (matchesExtension(member.getName(), extension)) {
 					IFile file = (IFile) member;
 					URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true);
 					list.add(uri);
@@ -225,4 +226,16 @@
 			}
 		}
 	}
+
+	/*
+	 * check whether the extension matches. An "|" operator is support to check for multiple extensions
+	 */
+	public static boolean matchesExtension(String str, String extension) {
+		for (String ext : extension.split("\\|")) { //$NON-NLS-1$
+			if (str.endsWith(ext)) {
+				return true;
+			}
+		}
+		return false;
+	}
 }
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.diagrams/resources/palettes/RoboticsAssemblyDiagram.paletteconfiguration b/plugins/customization/org.eclipse.papyrus.robotics.diagrams/resources/palettes/RoboticsAssemblyDiagram.paletteconfiguration
index bea4fac..f0e88e9 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.diagrams/resources/palettes/RoboticsAssemblyDiagram.paletteconfiguration
+++ b/plugins/customization/org.eclipse.papyrus.robotics.diagrams/resources/palettes/RoboticsAssemblyDiagram.paletteconfiguration
@@ -20,6 +20,15 @@
         <elementType xmi:type="elementtypesconfigurations:SpecializationTypeConfiguration" href="platform:/plugin/org.eclipse.papyrus.robotics.diagrams/resources/elementtypes/robotics.di.elementtypesconfigurations#org.eclipse.papyrus.robotics.di.ComponentInstance_Property_Shape_CN"/>
       </elementDescriptors>
     </ownedConfigurations>
+    <ownedConfigurations xmi:type="paletteconfiguration:ToolConfiguration" id="palettemodel.org.eclipse.papyrus.robotics.diagram.rmsassembly.SubsystemPort" label="Subsystem Port" description="Create a component port" kind="CreationTool">
+      <icon xmi:type="paletteconfiguration:IconDescriptor" pluginID="org.eclipse.papyrus.robotics.profile" iconPath="/icons/ComponentPort.png"/>
+      <elementDescriptors xmi:type="paletteconfiguration:ElementDescriptor">
+        <elementType xmi:type="elementtypesconfigurations:SpecializationTypeConfiguration" href="platform:/plugin/org.eclipse.papyrus.robotics.diagrams/resources/elementtypes/robotics.di.elementtypesconfigurations#org.eclipse.papyrus.robotics.di.ComponentPort_Port_Shape"/>
+      </elementDescriptors>
+      <elementDescriptors xmi:type="paletteconfiguration:ElementDescriptor">
+        <elementType xmi:type="elementtypesconfigurations:SpecializationTypeConfiguration" href="platform:/plugin/org.eclipse.papyrus.robotics.diagrams/resources/elementtypes/robotics.di.elementtypesconfigurations#org.eclipse.papyrus.robotics.di.ComponentPort_Port_Shape_CN"/>
+      </elementDescriptors>
+    </ownedConfigurations>
     <ownedConfigurations xmi:type="paletteconfiguration:SeparatorConfiguration" id="RMSSystemComponentArchitectureRelationships" label="Relationships" description="System Component Architecture Relationships"/>
     <ownedConfigurations xmi:type="paletteconfiguration:ToolConfiguration" id="palettemodel.org.eclipse.papyrus.robotics.diagram.rmsassembly.Connects" label="connects" description="Create a ComponentInstance connects ComponentInstance connection" kind="ConnectionTool">
       <icon xmi:type="paletteconfiguration:IconDescriptor" pluginID="org.eclipse.papyrus.robotics.profile" iconPath="/icons/Connects.gif"/>
@@ -27,7 +36,7 @@
         <elementType xmi:type="elementtypesconfigurations:SpecializationTypeConfiguration" href="platform:/plugin/org.eclipse.papyrus.robotics.diagrams/resources/elementtypes/robotics.di.elementtypesconfigurations#_CqkT4D9wEeisDbGz3MyJ_Q"/>
       </elementDescriptors>
     </ownedConfigurations>
-    <ownedConfigurations xmi:type="paletteconfiguration:ToolConfiguration" id="palettemodel.org.eclipse.papyrus.robotics.diagram.rmscomponent.Link" label="Link" description="Create new Link" kind="ConnectionTool">
+    <ownedConfigurations xmi:type="paletteconfiguration:ToolConfiguration" id="palettemodel.org.eclipse.papyrus.robotics.diagram.rmsassembly.Link" label="Link" description="Create new Link" kind="ConnectionTool">
       <icon xmi:type="paletteconfiguration:IconDescriptor" pluginID="org.eclipse.papyrus.uml.diagram.clazz" iconPath="/icons/obj16/Link.gif"/>
       <elementDescriptors xmi:type="paletteconfiguration:ElementDescriptor">
         <elementType xmi:type="elementtypesconfigurations:SpecializationTypeConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.service.types/model/umldi.elementtypesconfigurations#org.eclipse.papyrus.umldi.Comment_AnnotatedElementEdge"/>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.ecore b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.ecore
index 30ee9cd..fb7406c 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.ecore
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.ecore
@@ -20,13 +20,10 @@
           upperBound="-1" eType="#//functions/Function" changeable="false" volatile="true"
           transient="true" derived="true"/>
     </eClassifiers>
-    <eClassifiers xsi:type="ecore:EClass" name="ComponentDefinition" eSuperTypes="platform:/plugin/org.eclipse.papyrus.robotics.bpc.profile/model/bpc.ecore#//Block">
+    <eClassifiers xsi:type="ecore:EClass" name="ComponentDefinition" eSuperTypes="#//components/ComponentOrSystem">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="Components own activities via the ownedBehavior attribute of the extended class. Thus, the activities property is derived. Activities in turn reference existing functions and are thus principally a grouping mechanism."/>
       </eAnnotations>
-      <eStructuralFeatures xsi:type="ecore:EReference" name="services" ordered="false"
-          upperBound="-1" eType="#//components/ComponentService" changeable="false"
-          volatile="true" transient="true" derived="true"/>
       <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" ordered="false"
           eType="#//parameters/Parameter" changeable="false" volatile="true" transient="true"
           derived="true"/>
@@ -34,6 +31,12 @@
           upperBound="-1" eType="#//components/Activity" changeable="false" volatile="true"
           transient="true" derived="true"/>
     </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="ComponentOrSystem" abstract="true"
+        eSuperTypes="platform:/plugin/org.eclipse.papyrus.robotics.bpc.profile/model/bpc.ecore#//Block">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="services" ordered="false"
+          upperBound="-1" eType="#//components/ComponentService" changeable="false"
+          volatile="true" transient="true" derived="true"/>
+    </eClassifiers>
     <eClassifiers xsi:type="ecore:EClass" name="ComponentPort" eSuperTypes="platform:/plugin/org.eclipse.papyrus.robotics.bpc.profile/model/bpc.ecore#//Port">
       <eStructuralFeatures xsi:type="ecore:EReference" name="base_Port" ordered="false"
           lowerBound="1" eType="ecore:EClass platform:/plugin/org.eclipse.uml2.uml/model/UML.ecore#//Port"/>
@@ -55,15 +58,12 @@
           transient="true" derived="true"/>
       <eStructuralFeatures xsi:type="ecore:EReference" name="base_Property" ordered="false"
           lowerBound="1" eType="ecore:EClass platform:/plugin/org.eclipse.uml2.uml/model/UML.ecore#//Property"/>
-      <eStructuralFeatures xsi:type="ecore:EReference" name="compdef" ordered="false"
-          eType="#//components/ComponentDefinition" changeable="false" volatile="true"
+      <eStructuralFeatures xsi:type="ecore:EReference" name="compdefOrSys" ordered="false"
+          eType="#//components/ComponentOrSystem" changeable="false" volatile="true"
           transient="true" derived="true"/>
       <eStructuralFeatures xsi:type="ecore:EReference" name="port" ordered="false"
           upperBound="-1" eType="#//components/ComponentPort" changeable="false" volatile="true"
           transient="true" derived="true"/>
-      <eStructuralFeatures xsi:type="ecore:EReference" name="activities" ordered="false"
-          upperBound="-1" eType="#//components/Activity" changeable="false" volatile="true"
-          transient="true" derived="true"/>
     </eClassifiers>
     <eClassifiers xsi:type="ecore:EClass" name="ComponentService" eSuperTypes="platform:/plugin/org.eclipse.papyrus.robotics.bpc.profile/model/bpc.ecore#//Entity">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -81,7 +81,7 @@
       <eStructuralFeatures xsi:type="ecore:EReference" name="base_InstanceSpecification"
           ordered="false" lowerBound="1" eType="ecore:EClass platform:/plugin/org.eclipse.uml2.uml/model/UML.ecore#//InstanceSpecification"/>
     </eClassifiers>
-    <eClassifiers xsi:type="ecore:EClass" name="System" eSuperTypes="platform:/plugin/org.eclipse.papyrus.robotics.bpc.profile/model/bpc.ecore#//Block">
+    <eClassifiers xsi:type="ecore:EClass" name="System" eSuperTypes="#//components/ComponentOrSystem">
       <eStructuralFeatures xsi:type="ecore:EReference" name="instances" ordered="false"
           upperBound="-1" eType="#//components/ComponentInstance" changeable="false"
           volatile="true" transient="true" derived="true"/>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.genmodel b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.genmodel
index c69a756..8c13e00 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.genmodel
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.genmodel
@@ -49,12 +49,14 @@
       </genClasses>
       <genClasses xsi:type="genmodel:GenClass" ecoreClass="robotics.ecore#//components/ComponentDefinition">
         <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
-            propertySortChoices="true" ecoreFeature="ecore:EReference robotics.ecore#//components/ComponentDefinition/services"/>
-        <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
             propertySortChoices="true" ecoreFeature="ecore:EReference robotics.ecore#//components/ComponentDefinition/parameter"/>
         <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
             propertySortChoices="true" ecoreFeature="ecore:EReference robotics.ecore#//components/ComponentDefinition/activities"/>
       </genClasses>
+      <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="robotics.ecore#//components/ComponentOrSystem">
+        <genFeatures xsi:type="genmodel:GenFeature" property="Readonly" notify="false"
+            createChild="false" ecoreFeature="ecore:EReference robotics.ecore#//components/ComponentOrSystem/services"/>
+      </genClasses>
       <genClasses xsi:type="genmodel:GenClass" ecoreClass="robotics.ecore#//components/ComponentPort">
         <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
             propertySortChoices="true" ecoreFeature="ecore:EReference robotics.ecore#//components/ComponentPort/base_Port"/>
@@ -71,11 +73,9 @@
         <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
             propertySortChoices="true" ecoreFeature="ecore:EReference robotics.ecore#//components/ComponentInstance/base_Property"/>
         <genFeatures xsi:type="genmodel:GenFeature" property="Readonly" notify="false"
-            createChild="false" ecoreFeature="ecore:EReference robotics.ecore#//components/ComponentInstance/compdef"/>
+            createChild="false" ecoreFeature="ecore:EReference robotics.ecore#//components/ComponentInstance/compdefOrSys"/>
         <genFeatures xsi:type="genmodel:GenFeature" property="Readonly" notify="false"
             createChild="false" ecoreFeature="ecore:EReference robotics.ecore#//components/ComponentInstance/port"/>
-        <genFeatures xsi:type="genmodel:GenFeature" property="Readonly" notify="false"
-            createChild="false" ecoreFeature="ecore:EReference robotics.ecore#//components/ComponentInstance/activities"/>
       </genClasses>
       <genClasses xsi:type="genmodel:GenClass" ecoreClass="robotics.ecore#//components/ComponentService">
         <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.notation b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.notation
index 57c5279..787d371 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.notation
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.notation
@@ -102,14 +102,6 @@
     <children xmi:type="notation:Shape" xmi:id="_L35AgJZ2Eeeq1f8hGgKVzA" type="Stereotype_Shape">
       <children xmi:type="notation:DecorationNode" xmi:id="_L4A8UJZ2Eeeq1f8hGgKVzA" type="Stereotype_NameLabel"/>
       <children xmi:type="notation:BasicCompartment" xmi:id="_L4A8UZZ2Eeeq1f8hGgKVzA" type="Stereotype_AttributeCompartment">
-        <children xmi:type="notation:Shape" xmi:id="_3mOrkPv2Eee2kOgXcGh18g" type="Property_ClassAttributeLabel">
-          <element xmi:type="uml:Property" href="robotics.profile.uml#_niAaAvv2Eee2kOgXcGh18g"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_3mOrkfv2Eee2kOgXcGh18g"/>
-        </children>
-        <children xmi:type="notation:Shape" xmi:id="_3maRwPv2Eee2kOgXcGh18g" type="Property_ClassAttributeLabel">
-          <element xmi:type="uml:Property" href="robotics.profile.uml#_I4DK8PvyEee2kOgXcGh18g"/>
-          <layoutConstraint xmi:type="notation:Location" xmi:id="_3maRwfv2Eee2kOgXcGh18g"/>
-        </children>
         <children xmi:type="notation:Shape" xmi:id="_3mnGEPv2Eee2kOgXcGh18g" type="Property_ClassAttributeLabel">
           <element xmi:type="uml:Property" href="robotics.profile.uml#_YeniEvvwEeeGAO2m_WRmDg"/>
           <layoutConstraint xmi:type="notation:Location" xmi:id="_3mnGEfv2Eee2kOgXcGh18g"/>
@@ -130,7 +122,7 @@
         <layoutConstraint xmi:type="notation:Bounds" xmi:id="_L4BjZJZ2Eeeq1f8hGgKVzA"/>
       </children>
       <element xmi:type="uml:Stereotype" href="robotics.profile.uml#_L3wdoJZ2Eeeq1f8hGgKVzA"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_L35AgZZ2Eeeq1f8hGgKVzA" x="500" y="300" width="281" height="161"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_L35AgZZ2Eeeq1f8hGgKVzA" x="460" y="380" width="201" height="81"/>
     </children>
     <children xmi:type="notation:Shape" xmi:id="_PcskAJZ2Eeeq1f8hGgKVzA" type="Stereotype_Shape" gradient="16777215, -1, 0">
       <children xmi:type="notation:DecorationNode" xmi:id="_PcskApZ2Eeeq1f8hGgKVzA" type="Stereotype_NameLabel"/>
@@ -256,7 +248,7 @@
         <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lZ2p1Pw6Eee2kOgXcGh18g"/>
       </children>
       <element xmi:type="uml:Stereotype" href="robotics.profile.uml#_VoeJwJZ2Eeeq1f8hGgKVzA"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lZ1bsfw6Eee2kOgXcGh18g" x="200" y="300" width="241" height="161"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lZ1bsfw6Eee2kOgXcGh18g" x="200" y="300" width="201" height="161"/>
     </children>
     <children xmi:type="notation:Shape" xmi:id="_s1jfAPw9Eee2kOgXcGh18g" type="Stereotype_Shape" gradient="16777215, -1, 0">
       <children xmi:type="notation:DecorationNode" xmi:id="_s1kGEPw9Eee2kOgXcGh18g" type="Stereotype_NameLabel"/>
@@ -301,7 +293,7 @@
     <children xmi:type="notation:Shape" xmi:id="_eeHC4Pw-Eee2kOgXcGh18g" type="Comment_Shape">
       <children xmi:type="notation:DecorationNode" xmi:id="_eeHp8Pw-Eee2kOgXcGh18g" type="Comment_BodyLabel"/>
       <element xmi:type="uml:Comment" href="robotics.profile.uml#_FPxLoJbnEeeM7-EkGcZisw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eeHC4fw-Eee2kOgXcGh18g" x="240" y="580" width="461" height="121"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eeHC4fw-Eee2kOgXcGh18g" x="240" y="580" width="461" height="101"/>
     </children>
     <children xmi:type="notation:Shape" xmi:id="_mZxWYBM-Eei-CMVLY1Smdg" type="Stereotype_Shape" fillColor="14012867">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_27GBYBNDEei-CMVLY1Smdg" source="QualifiedName">
@@ -321,7 +313,7 @@
         <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mZzyqhM-Eei-CMVLY1Smdg"/>
       </children>
       <element xmi:type="uml:Stereotype" href="pathmap://ROBOTICS_BPC_PROFILES/bpc.profile.uml#_tQzYoKgfEeexrbjCvoglCQ"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mZxWYRM-Eei-CMVLY1Smdg" x="200" y="140" width="581" height="100"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mZxWYRM-Eei-CMVLY1Smdg" x="200" y="140" width="581" height="81"/>
     </children>
     <children xmi:type="notation:Shape" xmi:id="_Qou2gBM_Eei-CMVLY1Smdg" type="Stereotype_Shape" gradient="16777215, -1, 0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z6NqUBNDEei-CMVLY1Smdg" source="QualifiedName">
@@ -428,7 +420,7 @@
         <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qC1gXDm1Eei--ZsfKWaFtw"/>
       </children>
       <element xmi:type="uml:Stereotype" href="robotics.profile.uml#_1VSQgDmrEei--ZsfKWaFtw"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qC1gUTm1Eei--ZsfKWaFtw" x="500" y="500" width="281" height="61"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qC1gUTm1Eei--ZsfKWaFtw" x="460" y="500" width="281" height="61"/>
     </children>
     <children xmi:type="notation:Shape" xmi:id="_Kx1QAAnqEeqsaI2iFtV_3g" type="Stereotype_Shape">
       <children xmi:type="notation:DecorationNode" xmi:id="_Kx3FMAnqEeqsaI2iFtV_3g" type="Stereotype_NameLabel"/>
@@ -459,6 +451,52 @@
       <element xmi:type="uml:Stereotype" href="robotics.profile.uml#_KxqQ4AnqEeqsaI2iFtV_3g"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Kx1QAQnqEeqsaI2iFtV_3g" x="920" y="140" width="161" height="101"/>
     </children>
+    <children xmi:type="notation:Shape" xmi:id="_D3exAIQpEeuhg4b0yfu4kA" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_D3f_IIQpEeuhg4b0yfu4kA" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_D3f_IYQpEeuhg4b0yfu4kA" type="Stereotype_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_QfdlMIQpEeuhg4b0yfu4kA" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="robotics.profile.uml#_niAaAvv2Eee2kOgXcGh18g"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_QfdlMYQpEeuhg4b0yfu4kA"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_3maRwPv2Eee2kOgXcGh18g" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="robotics.profile.uml#_I4DK8PvyEee2kOgXcGh18g"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_3maRwfv2Eee2kOgXcGh18g"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_D3f_IoQpEeuhg4b0yfu4kA"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_D3f_I4QpEeuhg4b0yfu4kA"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_D3f_JIQpEeuhg4b0yfu4kA"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_D3f_JYQpEeuhg4b0yfu4kA"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_D3f_JoQpEeuhg4b0yfu4kA" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_D3f_J4QpEeuhg4b0yfu4kA"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_D3f_KIQpEeuhg4b0yfu4kA"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_D3f_KYQpEeuhg4b0yfu4kA"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_D3f_KoQpEeuhg4b0yfu4kA"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="robotics.profile.uml#_D3D6QIQpEeuhg4b0yfu4kA"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_D3exAYQpEeuhg4b0yfu4kA" x="460" y="260" width="381" height="81"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_fi6yQIfXEeuGtdWdsD4-EQ" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_fi6yQofXEeuGtdWdsD4-EQ" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_fi6yQ4fXEeuGtdWdsD4-EQ" type="Stereotype_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_1ij5YIfXEeuGtdWdsD4-EQ" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="robotics.profile.uml#_5k4hExSWEei-CMVLY1Smdg"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_1ij5YYfXEeuGtdWdsD4-EQ"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_fi6yRIfXEeuGtdWdsD4-EQ"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_fi6yRYfXEeuGtdWdsD4-EQ"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_fi6yRofXEeuGtdWdsD4-EQ"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fi6yR4fXEeuGtdWdsD4-EQ"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_fi6ySIfXEeuGtdWdsD4-EQ" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_fi6ySYfXEeuGtdWdsD4-EQ"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_fi6ySofXEeuGtdWdsD4-EQ"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_fi6yS4fXEeuGtdWdsD4-EQ"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fi6yTIfXEeuGtdWdsD4-EQ"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="robotics.profile.uml#_sp__ABSWEei-CMVLY1Smdg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fi6yQYfXEeuGtdWdsD4-EQ" x="680" y="380" width="161" height="81"/>
+    </children>
     <styles xmi:type="notation:StringValueStyle" xmi:id="_GNuTAZZ2Eeeq1f8hGgKVzA" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_GNuTApZ2Eeeq1f8hGgKVzA"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_GNuTA5Z2Eeeq1f8hGgKVzA" diagramKindId="org.eclipse.papyrus.uml.diagram.profile">
@@ -516,40 +554,9 @@
       <styles xmi:type="notation:FontStyle" xmi:id="_YgfKUfvwEeeGAO2m_WRmDg"/>
       <element xmi:type="uml:Association" href="robotics.profile.uml#_Yem7APvwEeeGAO2m_WRmDg"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YgfKUvvwEeeGAO2m_WRmDg" points="[680, 501, -643984, -643984]$[680, 520, -643984, -643984]$[700, 520, -643984, -643984]$[700, 540, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YjroQPvwEeeGAO2m_WRmDg" id="(0.498220640569395,1.0)"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YjroQPvwEeeGAO2m_WRmDg" id="(0.6965174129353234,1.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YjroQfvwEeeGAO2m_WRmDg" id="(0.498220640569395,0.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_I50FgPvyEee2kOgXcGh18g" type="Association_Edge" source="_L35AgJZ2Eeeq1f8hGgKVzA" target="_PcskAJZ2Eeeq1f8hGgKVzA" routing="Rectilinear">
-      <children xmi:type="notation:DecorationNode" xmi:id="_I50skPvyEee2kOgXcGh18g" type="Association_StereotypeLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_PRMJkPw6Eee2kOgXcGh18g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_I50skfvyEee2kOgXcGh18g" y="60"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_I50skvvyEee2kOgXcGh18g" visible="false" type="Association_NameLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_PR7wcPw6Eee2kOgXcGh18g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_I50sk_vyEee2kOgXcGh18g" y="20"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_I50slPvyEee2kOgXcGh18g" type="Association_TargetRoleLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_PSqwQPw6Eee2kOgXcGh18g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_I50slfvyEee2kOgXcGh18g" x="-45" y="7"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_I50slvvyEee2kOgXcGh18g" visible="false" type="Association_SourceRoleLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_PTa-MPw6Eee2kOgXcGh18g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_I50sl_vyEee2kOgXcGh18g" x="21" y="-20"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_I50smPvyEee2kOgXcGh18g" visible="false" type="Association_SourceMultiplicityLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_PULzMPw6Eee2kOgXcGh18g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_I50smfvyEee2kOgXcGh18g" x="21" y="20"/>
-      </children>
-      <children xmi:type="notation:DecorationNode" xmi:id="_I50smvvyEee2kOgXcGh18g" type="Association_TargetMultiplicityLabel">
-        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_PVIOYPw6Eee2kOgXcGh18g" name="IS_UPDATED_POSITION" booleanValue="true"/>
-        <layoutConstraint xmi:type="notation:Location" xmi:id="_I50sm_vyEee2kOgXcGh18g" x="-35" y="-13"/>
-      </children>
-      <styles xmi:type="notation:FontStyle" xmi:id="_I50FgfvyEee2kOgXcGh18g"/>
-      <element xmi:type="uml:Association" href="robotics.profile.uml#_I3-ScPvyEee2kOgXcGh18g"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_I50FgvvyEee2kOgXcGh18g" points="[781, 420, -643984, -643984]$[860, 420, -643984, -643984]$[860, 440, -643984, -643984]$[920, 440, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_I9Xv0PvyEee2kOgXcGh18g" id="(1.0,0.7453416149068323)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_I9Xv0fvyEee2kOgXcGh18g" id="(0.0,0.24691358024691357)"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_khTCEPv2Eee2kOgXcGh18g" type="Generalization_Edge" source="_8W6wMPvyEee2kOgXcGh18g" target="_kgUxsPv2Eee2kOgXcGh18g" routing="Rectilinear">
       <children xmi:type="notation:DecorationNode" xmi:id="_khTpIPv2Eee2kOgXcGh18g" type="Generalization_StereotypeLabel">
         <styles xmi:type="notation:BooleanValueStyle" xmi:id="_lKHVkPv2Eee2kOgXcGh18g" name="IS_UPDATED_POSITION" booleanValue="true"/>
@@ -561,7 +568,7 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lKUJ4Pv2Eee2kOgXcGh18g" id="(0.6644518272425249,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lKUJ4fv2Eee2kOgXcGh18g" id="(0.9159034138218152,1.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_niPDgPv2Eee2kOgXcGh18g" type="Association_Edge" source="_L35AgJZ2Eeeq1f8hGgKVzA" target="_8W6wMPvyEee2kOgXcGh18g" routing="Rectilinear">
+    <edges xmi:type="notation:Connector" xmi:id="_niPDgPv2Eee2kOgXcGh18g" type="Association_Edge" source="_D3exAIQpEeuhg4b0yfu4kA" target="_8W6wMPvyEee2kOgXcGh18g" routing="Rectilinear">
       <children xmi:type="notation:DecorationNode" xmi:id="_niPDg_v2Eee2kOgXcGh18g" type="Association_StereotypeLabel">
         <styles xmi:type="notation:BooleanValueStyle" xmi:id="_g6I9QPw6Eee2kOgXcGh18g" name="IS_UPDATED_POSITION" booleanValue="true"/>
         <layoutConstraint xmi:type="notation:Location" xmi:id="_niPDhPv2Eee2kOgXcGh18g" y="60"/>
@@ -588,8 +595,8 @@
       </children>
       <styles xmi:type="notation:FontStyle" xmi:id="_niPDgfv2Eee2kOgXcGh18g"/>
       <element xmi:type="uml:Association" href="robotics.profile.uml#_nh_y8Pv2Eee2kOgXcGh18g"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_niPDgvv2Eee2kOgXcGh18g" points="[881, 360, -643984, -643984]$[1020, 360, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ni1gcPv2Eee2kOgXcGh18g" id="(1.0,0.37267080745341613)"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_niPDgvv2Eee2kOgXcGh18g" points="[781, 300, -643984, -643984]$[860, 300, -643984, -643984]$[860, 360, -643984, -643984]$[920, 360, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ni1gcPv2Eee2kOgXcGh18g" id="(1.0,0.49382716049382713)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ni1gcfv2Eee2kOgXcGh18g" id="(0.0,0.594059405940594)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="_zYTdIPv3Eee2kOgXcGh18g" type="Association_Edge" target="_kgUxsPv2Eee2kOgXcGh18g">
@@ -711,7 +718,7 @@
       <styles xmi:type="notation:FontStyle" xmi:id="_v0byUfw6Eee2kOgXcGh18g"/>
       <element xmi:type="uml:Association" href="robotics.profile.uml#_vk3sUPw6Eee2kOgXcGh18g"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v0byUvw6Eee2kOgXcGh18g" points="[520, 420, -643984, -643984]$[457, 420, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v20X8Pw6Eee2kOgXcGh18g" id="(0.0,0.7453416149068323)"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v20X8Pw6Eee2kOgXcGh18g" id="(0.0,0.49382716049382713)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v20_APw6Eee2kOgXcGh18g" id="(1.0,0.7453416149068323)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="_AfT0MPw7Eee2kOgXcGh18g" type="Generalization_Edge" source="_lZ1bsPw6Eee2kOgXcGh18g" routing="Rectilinear">
@@ -770,7 +777,7 @@
       <styles xmi:type="notation:FontStyle" xmi:id="_egwHMfw-Eee2kOgXcGh18g"/>
       <element xsi:nil="true"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_egwHMvw-Eee2kOgXcGh18g" points="[701, 660, -643984, -643984]$[860, 660, -643984, -643984]$[860, 480, -643984, -643984]$[920, 480, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDGqwPw-Eee2kOgXcGh18g" id="(1.0,0.6611570247933884)"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gDGqwPw-Eee2kOgXcGh18g" id="(1.0,0.7920792079207921)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iJquoPw-Eee2kOgXcGh18g" id="(0.0,0.7407407407407407)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="_ei9GoPw-Eee2kOgXcGh18g" type="Comment_AnnotatedElementEdge" source="_eeHC4Pw-Eee2kOgXcGh18g" target="_lZ1bsPw6Eee2kOgXcGh18g">
@@ -778,18 +785,18 @@
       <element xsi:nil="true"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lPUfMpbsEeeM7-EkGcZisw" points="[340, 620, -643984, -643984]$[340, 461, -643984, -643984]"/>
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lQPsQJbsEeeM7-EkGcZisw" id="(0.21691973969631237,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lQPsQZbsEeeM7-EkGcZisw" id="(0.5809128630705395,1.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lQPsQZbsEeeM7-EkGcZisw" id="(0.6965174129353234,1.0)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_mfC38BM-Eei-CMVLY1Smdg" type="Generalization_Edge" source="_L35AgJZ2Eeeq1f8hGgKVzA" target="_mZxWYBM-Eei-CMVLY1Smdg" routing="Rectilinear">
+    <edges xmi:type="notation:Connector" xmi:id="_mfC38BM-Eei-CMVLY1Smdg" type="Generalization_Edge" source="_L35AgJZ2Eeeq1f8hGgKVzA" target="_D3exAIQpEeuhg4b0yfu4kA" routing="Rectilinear">
       <children xmi:type="notation:DecorationNode" xmi:id="_mfDfABM-Eei-CMVLY1Smdg" type="Generalization_StereotypeLabel">
         <styles xmi:type="notation:BooleanValueStyle" xmi:id="_uBRTQBM-Eei-CMVLY1Smdg" name="IS_UPDATED_POSITION" booleanValue="true"/>
         <layoutConstraint xmi:type="notation:Location" xmi:id="_mfDfARM-Eei-CMVLY1Smdg" y="60"/>
       </children>
       <styles xmi:type="notation:FontStyle" xmi:id="_mfC38RM-Eei-CMVLY1Smdg"/>
       <element xmi:type="uml:Generalization" href="robotics.profile.uml#_0XJ1AKiHEeerK_UDQFFzLg"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mfC38hM-Eei-CMVLY1Smdg" points="[640, 300, -643984, -643984]$[640, 240, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_t_fxoBM-Eei-CMVLY1Smdg" id="(0.498220640569395,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ooyLoBM-Eei-CMVLY1Smdg" id="(0.7573149741824441,1.0)"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mfC38hM-Eei-CMVLY1Smdg" points="[580, 380, -643984, -643984]$[580, 341, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_t_fxoBM-Eei-CMVLY1Smdg" id="(0.5970149253731343,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ooyLoBM-Eei-CMVLY1Smdg" id="(0.31496062992125984,1.0)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="_qsE5EBM-Eei-CMVLY1Smdg" type="Generalization_Edge" source="_lZ1bsPw6Eee2kOgXcGh18g" target="_mZxWYBM-Eei-CMVLY1Smdg" routing="Rectilinear">
       <children xmi:type="notation:DecorationNode" xmi:id="_qsFgIBM-Eei-CMVLY1Smdg" type="Generalization_StereotypeLabel">
@@ -799,7 +806,7 @@
       <styles xmi:type="notation:FontStyle" xmi:id="_qsE5ERM-Eei-CMVLY1Smdg"/>
       <element xmi:type="uml:Generalization" href="robotics.profile.uml#_ARjFAPw7Eee2kOgXcGh18g"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qsE5EhM-Eei-CMVLY1Smdg" points="[320, 300, -643984, -643984]$[320, 280, -643984, -643984]$[320, 240, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s9YNUBM-Eei-CMVLY1Smdg" id="(0.4979253112033195,0.0)"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s9YNUBM-Eei-CMVLY1Smdg" id="(0.5970149253731343,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s9YNURM-Eei-CMVLY1Smdg" id="(0.20654044750430292,1.0)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="__7HNMBM_Eei-CMVLY1Smdg" type="Association_Edge" source="_mZxWYBM-Eei-CMVLY1Smdg" target="_kgUxsPv2Eee2kOgXcGh18g" routing="Rectilinear">
@@ -903,7 +910,7 @@
       <styles xmi:type="notation:FontStyle" xmi:id="__eVgQS6LEei0V9-WLHIyvg"/>
       <element xmi:type="uml:Association" href="robotics.profile.uml#_aYdWoC6HEei0V9-WLHIyvg"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__eVgQi6LEei0V9-WLHIyvg" points="[320, 461, -643984, -643984]$[320, 500, -643984, -643984]$[120, 500, -643984, -643984]$[120, 580, -643984, -643984]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AiWiAC6MEei0V9-WLHIyvg" id="(0.4979253112033195,1.0)"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AiWiAC6MEei0V9-WLHIyvg" id="(0.5970149253731343,1.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AiXJEC6MEei0V9-WLHIyvg" id="(0.5649717514124294,0.0)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="_Uc06wDgAEeirkoCxAcpuEA" type="Association_Edge" source="_lZ1bsPw6Eee2kOgXcGh18g" target="_Kzdz0DgAEeirkoCxAcpuEA">
@@ -957,7 +964,28 @@
       <element xmi:type="uml:Generalization" href="robotics.profile.uml#_PMlkEAnqEeqsaI2iFtV_3g"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PNh_QgnqEeqsaI2iFtV_3g" points="[1120, 180, -643984, -643984]$[881, 180, -643984, -643984]"/>
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PPaOkAnqEeqsaI2iFtV_3g" id="(0.0,0.39603960396039606)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PPaOkQnqEeqsaI2iFtV_3g" id="(1.0,0.4)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PPaOkQnqEeqsaI2iFtV_3g" id="(1.0,0.49382716049382713)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_XpMoAIQpEeuhg4b0yfu4kA" type="Generalization_Edge" source="_D3exAIQpEeuhg4b0yfu4kA" target="_mZxWYBM-Eei-CMVLY1Smdg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_XpMoA4QpEeuhg4b0yfu4kA" type="Generalization_StereotypeLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_XpMoBIQpEeuhg4b0yfu4kA" y="60"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_XpMoAYQpEeuhg4b0yfu4kA"/>
+      <element xmi:type="uml:Generalization" href="robotics.profile.uml#_XnhNAIQpEeuhg4b0yfu4kA"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_XpMoAoQpEeuhg4b0yfu4kA" points="[640, 260, -643984, -643984]$[640, 221, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Xr3hgIQpEeuhg4b0yfu4kA" id="(0.47244094488188976,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Xr3hgYQpEeuhg4b0yfu4kA" id="(0.7573149741824441,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_pWPtgIfXEeuGtdWdsD4-EQ" type="Generalization_Edge" source="_fi6yQIfXEeuGtdWdsD4-EQ" target="_D3exAIQpEeuhg4b0yfu4kA">
+      <children xmi:type="notation:DecorationNode" xmi:id="_pWPtg4fXEeuGtdWdsD4-EQ" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_61sm8IfXEeuGtdWdsD4-EQ" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_pWPthIfXEeuGtdWdsD4-EQ" y="60"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_pWPtgYfXEeuGtdWdsD4-EQ"/>
+      <element xmi:type="uml:Generalization" href="robotics.profile.uml#_wNfT4BSWEei-CMVLY1Smdg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pWPtgofXEeuGtdWdsD4-EQ" points="[760, 380, -643984, -643984]$[760, 341, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2mh30IfXEeuGtdWdsD4-EQ" id="(0.4968944099378882,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qIQZQIfXEeuGtdWdsD4-EQ" id="(0.7874015748031497,1.0)"/>
     </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="_ggTNUJbWEeeM7-EkGcZisw" type="PapyrusUMLProfileDiagram" name="components (extensions)" measurementUnit="Pixel">
@@ -1619,6 +1647,46 @@
       <element xsi:nil="true"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fWfV0iQsEeuD8eTvhiVIwg" x="980" y="400"/>
     </children>
+    <children xmi:type="notation:Shape" xmi:id="_LvfrE4fXEeuGtdWdsD4-EQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_LvfrFIfXEeuGtdWdsD4-EQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LviuYIfXEeuGtdWdsD4-EQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LvfrFYfXEeuGtdWdsD4-EQ" x="160" y="20"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_LvrRQ4fXEeuGtdWdsD4-EQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_LvrRRIfXEeuGtdWdsD4-EQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Lvr4UIfXEeuGtdWdsD4-EQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#InstanceSpecification"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LvrRRYfXEeuGtdWdsD4-EQ" x="594" y="400"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_Lv23cIfXEeuGtdWdsD4-EQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_Lv23cYfXEeuGtdWdsD4-EQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Lv23c4fXEeuGtdWdsD4-EQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Port"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Lv23cofXEeuGtdWdsD4-EQ" x="720" y="20"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_LwBPgIfXEeuGtdWdsD4-EQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_LwBPgYfXEeuGtdWdsD4-EQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LwBPg4fXEeuGtdWdsD4-EQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LwBPgofXEeuGtdWdsD4-EQ" x="260" y="400"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_LwOq44fXEeuGtdWdsD4-EQ" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_LwOq5IfXEeuGtdWdsD4-EQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LwOq5ofXEeuGtdWdsD4-EQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Package"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LwOq5YfXEeuGtdWdsD4-EQ" x="980" y="400"/>
+    </children>
     <styles xmi:type="notation:StringValueStyle" xmi:id="_ggTNUZbWEeeM7-EkGcZisw" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_ggTNUpbWEeeM7-EkGcZisw"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_ggTNU5bWEeeM7-EkGcZisw" diagramKindId="org.eclipse.papyrus.uml.diagram.profile">
@@ -2137,6 +2205,56 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fWfV1yQsEeuD8eTvhiVIwg"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fWfV2CQsEeuD8eTvhiVIwg"/>
     </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_LviuYYfXEeuGtdWdsD4-EQ" type="StereotypeCommentLink" source="_l4mHsJbWEeeM7-EkGcZisw" target="_LvfrE4fXEeuGtdWdsD4-EQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_LviuYofXEeuGtdWdsD4-EQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LviuZofXEeuGtdWdsD4-EQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LviuY4fXEeuGtdWdsD4-EQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LviuZIfXEeuGtdWdsD4-EQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LviuZYfXEeuGtdWdsD4-EQ"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_Lvr4UYfXEeuGtdWdsD4-EQ" type="StereotypeCommentLink" source="_7TJCwJ0uEeeBys1xGPG1Rg" target="_LvrRQ4fXEeuGtdWdsD4-EQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_Lvr4UofXEeuGtdWdsD4-EQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Lvr4VofXEeuGtdWdsD4-EQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#InstanceSpecification"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Lvr4U4fXEeuGtdWdsD4-EQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Lvr4VIfXEeuGtdWdsD4-EQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Lvr4VYfXEeuGtdWdsD4-EQ"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_Lv23dIfXEeuGtdWdsD4-EQ" type="StereotypeCommentLink" source="_vQnEQPR-EeeeOeGeZwxiZw" target="_Lv23cIfXEeuGtdWdsD4-EQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_Lv23dYfXEeuGtdWdsD4-EQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Lv23eYfXEeuGtdWdsD4-EQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Port"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Lv23dofXEeuGtdWdsD4-EQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Lv23d4fXEeuGtdWdsD4-EQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Lv23eIfXEeuGtdWdsD4-EQ"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_LwBPhIfXEeuGtdWdsD4-EQ" type="StereotypeCommentLink" source="_aPTLUBNDEei-CMVLY1Smdg" target="_LwBPgIfXEeuGtdWdsD4-EQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_LwBPhYfXEeuGtdWdsD4-EQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LwBPiYfXEeuGtdWdsD4-EQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LwBPhofXEeuGtdWdsD4-EQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LwBPh4fXEeuGtdWdsD4-EQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LwBPiIfXEeuGtdWdsD4-EQ"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_LwOq54fXEeuGtdWdsD4-EQ" type="StereotypeCommentLink" source="_twkUcElaEeicede5K86kPg" target="_LwOq44fXEeuGtdWdsD4-EQ">
+      <styles xmi:type="notation:FontStyle" xmi:id="_LwOq6IfXEeuGtdWdsD4-EQ"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_LwPR8IfXEeuGtdWdsD4-EQ" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Package"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LwOq6YfXEeuGtdWdsD4-EQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LwOq6ofXEeuGtdWdsD4-EQ"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LwOq64fXEeuGtdWdsD4-EQ"/>
+    </edges>
   </notation:Diagram>
   <notation:Diagram xmi:id="__HqKkJe6EeeiCOWsEr9OuA" type="PapyrusUMLProfileDiagram" name="commPattern" measurementUnit="Pixel">
     <children xmi:type="notation:Shape" xmi:id="_DxmxMJe7EeeiCOWsEr9OuA" type="Stereotype_Shape">
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.uml b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.uml
index c304a87..44382f4 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.uml
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.uml
@@ -32,21 +32,10 @@
       <importedElement xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Package"/>
     </elementImport>
     <packagedElement xmi:type="uml:Stereotype" xmi:id="_L3wdoJZ2Eeeq1f8hGgKVzA" name="ComponentDefinition">
-      <generalization xmi:type="uml:Generalization" xmi:id="_0XJ1AKiHEeerK_UDQFFzLg">
-        <general xmi:type="uml:Stereotype" href="pathmap://ROBOTICS_BPC_PROFILES/bpc.profile.uml#_tQzYoKgfEeexrbjCvoglCQ"/>
-      </generalization>
+      <generalization xmi:type="uml:Generalization" xmi:id="_0XJ1AKiHEeerK_UDQFFzLg" general="_D3D6QIQpEeuhg4b0yfu4kA"/>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_zxDFQJbWEeeM7-EkGcZisw" name="base_Class" association="_zw-MwJbWEeeM7-EkGcZisw">
         <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_niAaAvv2Eee2kOgXcGh18g" name="port" type="_1QQ5kPR-EeeeOeGeZwxiZw" isReadOnly="true" isDerived="true" association="_nh_y8Pv2Eee2kOgXcGh18g">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_u0l20Pv2Eee2kOgXcGh18g"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_u01ucPv2Eee2kOgXcGh18g" value="*"/>
-        <subsettedProperty xmi:type="uml:Property" href="pathmap://ROBOTICS_BPC_PROFILES/bpc.profile.uml#_fxPrIKg-EeeT_sbBf9FSBw"/>
-      </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_I4DK8PvyEee2kOgXcGh18g" name="services" type="_PcmdYJZ2Eeeq1f8hGgKVzA" isReadOnly="true" isDerived="true" association="_I3-ScPvyEee2kOgXcGh18g">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_TVfaMPvyEee2kOgXcGh18g"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_TV5C0PvyEee2kOgXcGh18g" value="*"/>
-      </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_YeniEvvwEeeGAO2m_WRmDg" name="parameter" type="_1VSQgDmrEei--ZsfKWaFtw" isReadOnly="true" isDerived="true" association="_Yem7APvwEeeGAO2m_WRmDg">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_dPIqwPvwEeeGAO2m_WRmDg"/>
       </ownedAttribute>
@@ -168,13 +157,13 @@
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_I4B80PvyEee2kOgXcGh18g" source="org.eclipse.papyrus">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_I4Cj4PvyEee2kOgXcGh18g" key="nature" value="UML_Nature"/>
       </eAnnotations>
-      <ownedEnd xmi:type="uml:Property" xmi:id="_I4EZEPvyEee2kOgXcGh18g" name="componentdefinition" type="_L3wdoJZ2Eeeq1f8hGgKVzA" association="_I3-ScPvyEee2kOgXcGh18g"/>
+      <ownedEnd xmi:type="uml:Property" xmi:id="_I4EZEPvyEee2kOgXcGh18g" name="componentdefinition" type="_D3D6QIQpEeuhg4b0yfu4kA" association="_I3-ScPvyEee2kOgXcGh18g"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_nh_y8Pv2Eee2kOgXcGh18g" memberEnd="_niAaAvv2Eee2kOgXcGh18g _niBBEPv2Eee2kOgXcGh18g">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_niAaAPv2Eee2kOgXcGh18g" source="org.eclipse.papyrus">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_niAaAfv2Eee2kOgXcGh18g" key="nature" value="UML_Nature"/>
       </eAnnotations>
-      <ownedEnd xmi:type="uml:Property" xmi:id="_niBBEPv2Eee2kOgXcGh18g" name="componentdefinition" type="_L3wdoJZ2Eeeq1f8hGgKVzA" association="_nh_y8Pv2Eee2kOgXcGh18g"/>
+      <ownedEnd xmi:type="uml:Property" xmi:id="_niBBEPv2Eee2kOgXcGh18g" name="componentdefinition" type="_D3D6QIQpEeuhg4b0yfu4kA" association="_nh_y8Pv2Eee2kOgXcGh18g"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Association" xmi:id="_PQqQAPw4Eee2kOgXcGh18g" memberEnd="_PQssQfw4Eee2kOgXcGh18g _PQuhcPw4Eee2kOgXcGh18g">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_PQsFMPw4Eee2kOgXcGh18g" source="org.eclipse.papyrus">
@@ -219,17 +208,13 @@
       <ownedAttribute xmi:type="uml:Property" xmi:id="_iWacYRNDEei-CMVLY1Smdg" name="base_Property" association="_iWZ1UBNDEei-CMVLY1Smdg">
         <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_jD8WkBX_Eeqxas4IZZ7cdQ" name="compdef" visibility="public" type="_L3wdoJZ2Eeeq1f8hGgKVzA" isReadOnly="true" isDerived="true">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_jD8WkBX_Eeqxas4IZZ7cdQ" name="compdefOrSys" visibility="public" type="_D3D6QIQpEeuhg4b0yfu4kA" isReadOnly="true" isDerived="true">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rk4c4BX_Eeqxas4IZZ7cdQ"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_G59VoBYWEeq5E4IA8Cy87w" name="port" type="_1QQ5kPR-EeeeOeGeZwxiZw" isReadOnly="true" isDerived="true">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Jw9X8BYWEeq5E4IA8Cy87w"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_JvVAQBYWEeq5E4IA8Cy87w" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_yl-FwBYaEeqpsOdTX52jjA" name="activities" type="_VoeJwJZ2Eeeq1f8hGgKVzA" isReadOnly="true" isDerived="true">
-        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_259DcBYaEeqpsOdTX52jjA"/>
-        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_24ayYBYaEeqpsOdTX52jjA" value="*"/>
-      </ownedAttribute>
       <icon xmi:type="uml:Image" xmi:id="_pox-8Ct6EeisMvszWrx9QA" location="platform:/plugin/org.eclipse.papyrus.robotics.profile/icons/ComponentInstance.png">
         <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wAlOgCt6EeisMvszWrx9QA" source="image_papyrus">
           <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_wAl1kCt6EeisMvszWrx9QA" key="image_kind_key" value="icon"/>
@@ -246,9 +231,7 @@
       <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_iWacYBNDEei-CMVLY1Smdg" name="extension_ComponentInstance" type="_f-vFQBNBEei-CMVLY1Smdg" aggregation="composite" association="_iWZ1UBNDEei-CMVLY1Smdg"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Stereotype" xmi:id="_sp__ABSWEei-CMVLY1Smdg" name="System">
-      <generalization xmi:type="uml:Generalization" xmi:id="_wNfT4BSWEei-CMVLY1Smdg">
-        <general xmi:type="uml:Stereotype" href="pathmap://ROBOTICS_BPC_PROFILES/bpc.profile.uml#_tQzYoKgfEeexrbjCvoglCQ"/>
-      </generalization>
+      <generalization xmi:type="uml:Generalization" xmi:id="_wNfT4BSWEei-CMVLY1Smdg" general="_D3D6QIQpEeuhg4b0yfu4kA"/>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_5k4hExSWEei-CMVLY1Smdg" name="instances" type="_f-vFQBNBEei-CMVLY1Smdg" isReadOnly="true" isDerived="true" association="_5k4hEBSWEei-CMVLY1Smdg">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_h01W0BSXEei-CMVLY1Smdg"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_h1NxUBSXEei-CMVLY1Smdg" value="*"/>
@@ -379,6 +362,20 @@
       </eAnnotations>
       <ownedEnd xmi:type="uml:Property" xmi:id="_LhpiEMdVEeqRKuua5g3EAA" name="system" type="_sp__ABSWEei-CMVLY1Smdg" association="_LhbfoMdVEeqRKuua5g3EAA"/>
     </packagedElement>
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="_D3D6QIQpEeuhg4b0yfu4kA" name="ComponentOrSystem" isAbstract="true">
+      <generalization xmi:type="uml:Generalization" xmi:id="_XnhNAIQpEeuhg4b0yfu4kA">
+        <general xmi:type="uml:Stereotype" href="pathmap://ROBOTICS_BPC_PROFILES/bpc.profile.uml#_tQzYoKgfEeexrbjCvoglCQ"/>
+      </generalization>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_niAaAvv2Eee2kOgXcGh18g" name="port" type="_1QQ5kPR-EeeeOeGeZwxiZw" isReadOnly="true" isDerived="true" association="_nh_y8Pv2Eee2kOgXcGh18g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_u0l20Pv2Eee2kOgXcGh18g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_u01ucPv2Eee2kOgXcGh18g" value="*"/>
+        <subsettedProperty xmi:type="uml:Property" href="pathmap://ROBOTICS_BPC_PROFILES/bpc.profile.uml#_fxPrIKg-EeeT_sbBf9FSBw"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_I4DK8PvyEee2kOgXcGh18g" name="services" type="_PcmdYJZ2Eeeq1f8hGgKVzA" isReadOnly="true" isDerived="true" association="_I3-ScPvyEee2kOgXcGh18g">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_TVfaMPvyEee2kOgXcGh18g"/>
+        <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_TV5C0PvyEee2kOgXcGh18g" value="*"/>
+      </ownedAttribute>
+    </packagedElement>
   </packagedElement>
   <packagedElement xmi:type="uml:Profile" xmi:id="_8Z6x8Je6EeeiCOWsEr9OuA" name="commpattern" URI="http://www.eclipse.org/papyrus/robotics/commpattern/1" metaclassReference="_OgONAPIxEeeZEoGxrLp_vw _pVNaUCamEeitH-pStkBWTw">
     <elementImport xmi:type="uml:ElementImport" xmi:id="_OgONAPIxEeeZEoGxrLp_vw" alias="Class">
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/behavior/impl/BehaviorFactoryImpl.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/behavior/impl/BehaviorFactoryImpl.java
index 73ac8b9..0145434 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/behavior/impl/BehaviorFactoryImpl.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/behavior/impl/BehaviorFactoryImpl.java
@@ -16,6 +16,7 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.papyrus.robotics.profile.robotics.behavior.*;
 import org.eclipse.papyrus.robotics.profile.robotics.behavior.BehaviorDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.behavior.BehaviorFactory;
 import org.eclipse.papyrus.robotics.profile.robotics.behavior.BehaviorPackage;
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentDefinition.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentDefinition.java
index f92bb09..8bc4b9d 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentDefinition.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentDefinition.java
@@ -12,8 +12,6 @@
 package org.eclipse.papyrus.robotics.profile.robotics.components;
 
 import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.papyrus.robotics.bpc.profile.bpc.Block;
 import org.eclipse.papyrus.robotics.profile.robotics.parameters.Parameter;
 
 /**
@@ -29,7 +27,6 @@
  * The following features are supported:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition#getServices <em>Services</em>}</li>
  *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition#getParameter <em>Parameter</em>}</li>
  *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition#getActivities <em>Activities</em>}</li>
  * </ul>
@@ -38,23 +35,7 @@
  * @model
  * @generated
  */
-public interface ComponentDefinition extends Block {
-	/**
-	 * Returns the value of the '<em><b>Services</b></em>' reference list.
-	 * The list contents are of type {@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentService}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Services</em>' reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Services</em>' reference list.
-	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage#getComponentDefinition_Services()
-	 * @model transient="true" changeable="false" volatile="true" derived="true" ordered="false"
-	 * @generated
-	 */
-	EList<ComponentService> getServices();
-
+public interface ComponentDefinition extends ComponentOrSystem {
 	/**
 	 * Returns the value of the '<em><b>Parameter</b></em>' reference.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentInstance.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentInstance.java
index 339078e..30cd7d1 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentInstance.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentInstance.java
@@ -27,9 +27,8 @@
  * <ul>
  *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getParamInstance <em>Param Instance</em>}</li>
  *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getBase_Property <em>Base Property</em>}</li>
- *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getCompdef <em>Compdef</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getCompdefOrSys <em>Compdef Or Sys</em>}</li>
  *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getPort <em>Port</em>}</li>
- *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getActivities <em>Activities</em>}</li>
  * </ul>
  *
  * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage#getComponentInstance()
@@ -79,19 +78,19 @@
 	void setBase_Property(Property value);
 
 	/**
-	 * Returns the value of the '<em><b>Compdef</b></em>' reference.
+	 * Returns the value of the '<em><b>Compdef Or Sys</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <p>
-	 * If the meaning of the '<em>Compdef</em>' reference isn't clear,
+	 * If the meaning of the '<em>Compdef Or Sys</em>' reference isn't clear,
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Compdef</em>' reference.
-	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage#getComponentInstance_Compdef()
+	 * @return the value of the '<em>Compdef Or Sys</em>' reference.
+	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage#getComponentInstance_CompdefOrSys()
 	 * @model transient="true" changeable="false" volatile="true" derived="true" ordered="false"
 	 * @generated
 	 */
-	ComponentDefinition getCompdef();
+	ComponentOrSystem getCompdefOrSys();
 
 	/**
 	 * Returns the value of the '<em><b>Port</b></em>' reference list.
@@ -109,20 +108,4 @@
 	 */
 	EList<ComponentPort> getPort();
 
-	/**
-	 * Returns the value of the '<em><b>Activities</b></em>' reference list.
-	 * The list contents are of type {@link org.eclipse.papyrus.robotics.profile.robotics.components.Activity}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Activities</em>' reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Activities</em>' reference list.
-	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage#getComponentInstance_Activities()
-	 * @model transient="true" changeable="false" volatile="true" derived="true" ordered="false"
-	 * @generated
-	 */
-	EList<Activity> getActivities();
-
 } // ComponentInstance
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentOrSystem.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentOrSystem.java
new file mode 100644
index 0000000..bb7fc23
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentOrSystem.java
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2019 CEA LIST
+ * 
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ */
+package org.eclipse.papyrus.robotics.profile.robotics.components;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.papyrus.robotics.bpc.profile.bpc.Block;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Component Or System</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem#getServices <em>Services</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage#getComponentOrSystem()
+ * @model abstract="true"
+ * @generated
+ */
+public interface ComponentOrSystem extends Block {
+	/**
+	 * Returns the value of the '<em><b>Services</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentService}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Services</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Services</em>' reference list.
+	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage#getComponentOrSystem_Services()
+	 * @model transient="true" changeable="false" volatile="true" derived="true" ordered="false"
+	 * @generated
+	 */
+	EList<ComponentService> getServices();
+
+} // ComponentOrSystem
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentsPackage.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentsPackage.java
index cf0d136..7c25093 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentsPackage.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/ComponentsPackage.java
@@ -331,6 +331,160 @@
 	int ACTIVITY_PORT_OPERATION_COUNT = BPCPackage.PORT_OPERATION_COUNT + 0;
 
 	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentOrSystemImpl <em>Component Or System</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentOrSystemImpl
+	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getComponentOrSystem()
+	 * @generated
+	 */
+	int COMPONENT_OR_SYSTEM = 3;
+
+	/**
+	 * The feature id for the '<em><b>Property</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__PROPERTY = BPCPackage.BLOCK__PROPERTY;
+
+	/**
+	 * The feature id for the '<em><b>Instance uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__INSTANCE_UID = BPCPackage.BLOCK__INSTANCE_UID;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__DESCRIPTION = BPCPackage.BLOCK__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Authorship</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__AUTHORSHIP = BPCPackage.BLOCK__AUTHORSHIP;
+
+	/**
+	 * The feature id for the '<em><b>Provenance</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__PROVENANCE = BPCPackage.BLOCK__PROVENANCE;
+
+	/**
+	 * The feature id for the '<em><b>Model uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__MODEL_UID = BPCPackage.BLOCK__MODEL_UID;
+
+	/**
+	 * The feature id for the '<em><b>Metamodel uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__METAMODEL_UID = BPCPackage.BLOCK__METAMODEL_UID;
+
+	/**
+	 * The feature id for the '<em><b>Port</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__PORT = BPCPackage.BLOCK__PORT;
+
+	/**
+	 * The feature id for the '<em><b>Connector</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__CONNECTOR = BPCPackage.BLOCK__CONNECTOR;
+
+	/**
+	 * The feature id for the '<em><b>Collection</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__COLLECTION = BPCPackage.BLOCK__COLLECTION;
+
+	/**
+	 * The feature id for the '<em><b>Block</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__BLOCK = BPCPackage.BLOCK__BLOCK;
+
+	/**
+	 * The feature id for the '<em><b>Relation</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__RELATION = BPCPackage.BLOCK__RELATION;
+
+	/**
+	 * The feature id for the '<em><b>Base Class</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__BASE_CLASS = BPCPackage.BLOCK__BASE_CLASS;
+
+	/**
+	 * The feature id for the '<em><b>Services</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM__SERVICES = BPCPackage.BLOCK_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Component Or System</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM_FEATURE_COUNT = BPCPackage.BLOCK_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Component Or System</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COMPONENT_OR_SYSTEM_OPERATION_COUNT = BPCPackage.BLOCK_OPERATION_COUNT + 0;
+
+	/**
 	 * The meta object id for the '{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentDefinitionImpl <em>Component Definition</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -347,7 +501,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__PROPERTY = BPCPackage.BLOCK__PROPERTY;
+	int COMPONENT_DEFINITION__PROPERTY = COMPONENT_OR_SYSTEM__PROPERTY;
 
 	/**
 	 * The feature id for the '<em><b>Instance uid</b></em>' attribute.
@@ -356,7 +510,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__INSTANCE_UID = BPCPackage.BLOCK__INSTANCE_UID;
+	int COMPONENT_DEFINITION__INSTANCE_UID = COMPONENT_OR_SYSTEM__INSTANCE_UID;
 
 	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
@@ -365,7 +519,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__DESCRIPTION = BPCPackage.BLOCK__DESCRIPTION;
+	int COMPONENT_DEFINITION__DESCRIPTION = COMPONENT_OR_SYSTEM__DESCRIPTION;
 
 	/**
 	 * The feature id for the '<em><b>Authorship</b></em>' attribute.
@@ -374,7 +528,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__AUTHORSHIP = BPCPackage.BLOCK__AUTHORSHIP;
+	int COMPONENT_DEFINITION__AUTHORSHIP = COMPONENT_OR_SYSTEM__AUTHORSHIP;
 
 	/**
 	 * The feature id for the '<em><b>Provenance</b></em>' attribute.
@@ -383,7 +537,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__PROVENANCE = BPCPackage.BLOCK__PROVENANCE;
+	int COMPONENT_DEFINITION__PROVENANCE = COMPONENT_OR_SYSTEM__PROVENANCE;
 
 	/**
 	 * The feature id for the '<em><b>Model uid</b></em>' attribute.
@@ -392,7 +546,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__MODEL_UID = BPCPackage.BLOCK__MODEL_UID;
+	int COMPONENT_DEFINITION__MODEL_UID = COMPONENT_OR_SYSTEM__MODEL_UID;
 
 	/**
 	 * The feature id for the '<em><b>Metamodel uid</b></em>' attribute.
@@ -401,7 +555,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__METAMODEL_UID = BPCPackage.BLOCK__METAMODEL_UID;
+	int COMPONENT_DEFINITION__METAMODEL_UID = COMPONENT_OR_SYSTEM__METAMODEL_UID;
 
 	/**
 	 * The feature id for the '<em><b>Port</b></em>' reference list.
@@ -410,7 +564,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__PORT = BPCPackage.BLOCK__PORT;
+	int COMPONENT_DEFINITION__PORT = COMPONENT_OR_SYSTEM__PORT;
 
 	/**
 	 * The feature id for the '<em><b>Connector</b></em>' reference list.
@@ -419,7 +573,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__CONNECTOR = BPCPackage.BLOCK__CONNECTOR;
+	int COMPONENT_DEFINITION__CONNECTOR = COMPONENT_OR_SYSTEM__CONNECTOR;
 
 	/**
 	 * The feature id for the '<em><b>Collection</b></em>' reference list.
@@ -428,7 +582,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__COLLECTION = BPCPackage.BLOCK__COLLECTION;
+	int COMPONENT_DEFINITION__COLLECTION = COMPONENT_OR_SYSTEM__COLLECTION;
 
 	/**
 	 * The feature id for the '<em><b>Block</b></em>' reference list.
@@ -437,7 +591,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__BLOCK = BPCPackage.BLOCK__BLOCK;
+	int COMPONENT_DEFINITION__BLOCK = COMPONENT_OR_SYSTEM__BLOCK;
 
 	/**
 	 * The feature id for the '<em><b>Relation</b></em>' reference list.
@@ -446,7 +600,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__RELATION = BPCPackage.BLOCK__RELATION;
+	int COMPONENT_DEFINITION__RELATION = COMPONENT_OR_SYSTEM__RELATION;
 
 	/**
 	 * The feature id for the '<em><b>Base Class</b></em>' reference.
@@ -455,7 +609,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__BASE_CLASS = BPCPackage.BLOCK__BASE_CLASS;
+	int COMPONENT_DEFINITION__BASE_CLASS = COMPONENT_OR_SYSTEM__BASE_CLASS;
 
 	/**
 	 * The feature id for the '<em><b>Services</b></em>' reference list.
@@ -464,7 +618,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__SERVICES = BPCPackage.BLOCK_FEATURE_COUNT + 0;
+	int COMPONENT_DEFINITION__SERVICES = COMPONENT_OR_SYSTEM__SERVICES;
 
 	/**
 	 * The feature id for the '<em><b>Parameter</b></em>' reference.
@@ -473,7 +627,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__PARAMETER = BPCPackage.BLOCK_FEATURE_COUNT + 1;
+	int COMPONENT_DEFINITION__PARAMETER = COMPONENT_OR_SYSTEM_FEATURE_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Activities</b></em>' reference list.
@@ -482,7 +636,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION__ACTIVITIES = BPCPackage.BLOCK_FEATURE_COUNT + 2;
+	int COMPONENT_DEFINITION__ACTIVITIES = COMPONENT_OR_SYSTEM_FEATURE_COUNT + 1;
 
 	/**
 	 * The number of structural features of the '<em>Component Definition</em>' class.
@@ -491,7 +645,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION_FEATURE_COUNT = BPCPackage.BLOCK_FEATURE_COUNT + 3;
+	int COMPONENT_DEFINITION_FEATURE_COUNT = COMPONENT_OR_SYSTEM_FEATURE_COUNT + 2;
 
 	/**
 	 * The number of operations of the '<em>Component Definition</em>' class.
@@ -500,7 +654,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_DEFINITION_OPERATION_COUNT = BPCPackage.BLOCK_OPERATION_COUNT + 0;
+	int COMPONENT_DEFINITION_OPERATION_COUNT = COMPONENT_OR_SYSTEM_OPERATION_COUNT + 0;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentPortImpl <em>Component Port</em>}' class.
@@ -510,7 +664,7 @@
 	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getComponentPort()
 	 * @generated
 	 */
-	int COMPONENT_PORT = 3;
+	int COMPONENT_PORT = 4;
 
 	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference list.
@@ -646,7 +800,7 @@
 	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getComponentInstance()
 	 * @generated
 	 */
-	int COMPONENT_INSTANCE = 4;
+	int COMPONENT_INSTANCE = 5;
 
 	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference list.
@@ -730,13 +884,13 @@
 	int COMPONENT_INSTANCE__BASE_PROPERTY = BPCPackage.ENTITY_FEATURE_COUNT + 1;
 
 	/**
-	 * The feature id for the '<em><b>Compdef</b></em>' reference.
+	 * The feature id for the '<em><b>Compdef Or Sys</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_INSTANCE__COMPDEF = BPCPackage.ENTITY_FEATURE_COUNT + 2;
+	int COMPONENT_INSTANCE__COMPDEF_OR_SYS = BPCPackage.ENTITY_FEATURE_COUNT + 2;
 
 	/**
 	 * The feature id for the '<em><b>Port</b></em>' reference list.
@@ -748,22 +902,13 @@
 	int COMPONENT_INSTANCE__PORT = BPCPackage.ENTITY_FEATURE_COUNT + 3;
 
 	/**
-	 * The feature id for the '<em><b>Activities</b></em>' reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int COMPONENT_INSTANCE__ACTIVITIES = BPCPackage.ENTITY_FEATURE_COUNT + 4;
-
-	/**
 	 * The number of structural features of the '<em>Component Instance</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int COMPONENT_INSTANCE_FEATURE_COUNT = BPCPackage.ENTITY_FEATURE_COUNT + 5;
+	int COMPONENT_INSTANCE_FEATURE_COUNT = BPCPackage.ENTITY_FEATURE_COUNT + 4;
 
 	/**
 	 * The number of operations of the '<em>Component Instance</em>' class.
@@ -782,7 +927,7 @@
 	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getComponentService()
 	 * @generated
 	 */
-	int COMPONENT_SERVICE = 5;
+	int COMPONENT_SERVICE = 6;
 
 	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference list.
@@ -900,7 +1045,7 @@
 	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getServiceConfiguration()
 	 * @generated
 	 */
-	int SERVICE_CONFIGURATION = 6;
+	int SERVICE_CONFIGURATION = 7;
 
 	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference list.
@@ -1000,7 +1145,7 @@
 	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getSystem()
 	 * @generated
 	 */
-	int SYSTEM = 7;
+	int SYSTEM = 8;
 
 	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference list.
@@ -1009,7 +1154,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__PROPERTY = BPCPackage.BLOCK__PROPERTY;
+	int SYSTEM__PROPERTY = COMPONENT_OR_SYSTEM__PROPERTY;
 
 	/**
 	 * The feature id for the '<em><b>Instance uid</b></em>' attribute.
@@ -1018,7 +1163,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__INSTANCE_UID = BPCPackage.BLOCK__INSTANCE_UID;
+	int SYSTEM__INSTANCE_UID = COMPONENT_OR_SYSTEM__INSTANCE_UID;
 
 	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
@@ -1027,7 +1172,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__DESCRIPTION = BPCPackage.BLOCK__DESCRIPTION;
+	int SYSTEM__DESCRIPTION = COMPONENT_OR_SYSTEM__DESCRIPTION;
 
 	/**
 	 * The feature id for the '<em><b>Authorship</b></em>' attribute.
@@ -1036,7 +1181,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__AUTHORSHIP = BPCPackage.BLOCK__AUTHORSHIP;
+	int SYSTEM__AUTHORSHIP = COMPONENT_OR_SYSTEM__AUTHORSHIP;
 
 	/**
 	 * The feature id for the '<em><b>Provenance</b></em>' attribute.
@@ -1045,7 +1190,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__PROVENANCE = BPCPackage.BLOCK__PROVENANCE;
+	int SYSTEM__PROVENANCE = COMPONENT_OR_SYSTEM__PROVENANCE;
 
 	/**
 	 * The feature id for the '<em><b>Model uid</b></em>' attribute.
@@ -1054,7 +1199,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__MODEL_UID = BPCPackage.BLOCK__MODEL_UID;
+	int SYSTEM__MODEL_UID = COMPONENT_OR_SYSTEM__MODEL_UID;
 
 	/**
 	 * The feature id for the '<em><b>Metamodel uid</b></em>' attribute.
@@ -1063,7 +1208,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__METAMODEL_UID = BPCPackage.BLOCK__METAMODEL_UID;
+	int SYSTEM__METAMODEL_UID = COMPONENT_OR_SYSTEM__METAMODEL_UID;
 
 	/**
 	 * The feature id for the '<em><b>Port</b></em>' reference list.
@@ -1072,7 +1217,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__PORT = BPCPackage.BLOCK__PORT;
+	int SYSTEM__PORT = COMPONENT_OR_SYSTEM__PORT;
 
 	/**
 	 * The feature id for the '<em><b>Connector</b></em>' reference list.
@@ -1081,7 +1226,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__CONNECTOR = BPCPackage.BLOCK__CONNECTOR;
+	int SYSTEM__CONNECTOR = COMPONENT_OR_SYSTEM__CONNECTOR;
 
 	/**
 	 * The feature id for the '<em><b>Collection</b></em>' reference list.
@@ -1090,7 +1235,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__COLLECTION = BPCPackage.BLOCK__COLLECTION;
+	int SYSTEM__COLLECTION = COMPONENT_OR_SYSTEM__COLLECTION;
 
 	/**
 	 * The feature id for the '<em><b>Block</b></em>' reference list.
@@ -1099,7 +1244,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__BLOCK = BPCPackage.BLOCK__BLOCK;
+	int SYSTEM__BLOCK = COMPONENT_OR_SYSTEM__BLOCK;
 
 	/**
 	 * The feature id for the '<em><b>Relation</b></em>' reference list.
@@ -1108,7 +1253,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__RELATION = BPCPackage.BLOCK__RELATION;
+	int SYSTEM__RELATION = COMPONENT_OR_SYSTEM__RELATION;
 
 	/**
 	 * The feature id for the '<em><b>Base Class</b></em>' reference.
@@ -1117,7 +1262,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__BASE_CLASS = BPCPackage.BLOCK__BASE_CLASS;
+	int SYSTEM__BASE_CLASS = COMPONENT_OR_SYSTEM__BASE_CLASS;
+
+	/**
+	 * The feature id for the '<em><b>Services</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SYSTEM__SERVICES = COMPONENT_OR_SYSTEM__SERVICES;
 
 	/**
 	 * The feature id for the '<em><b>Instances</b></em>' reference list.
@@ -1126,7 +1280,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__INSTANCES = BPCPackage.BLOCK_FEATURE_COUNT + 0;
+	int SYSTEM__INSTANCES = COMPONENT_OR_SYSTEM_FEATURE_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Task</b></em>' reference list.
@@ -1135,7 +1289,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM__TASK = BPCPackage.BLOCK_FEATURE_COUNT + 1;
+	int SYSTEM__TASK = COMPONENT_OR_SYSTEM_FEATURE_COUNT + 1;
 
 	/**
 	 * The number of structural features of the '<em>System</em>' class.
@@ -1144,7 +1298,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM_FEATURE_COUNT = BPCPackage.BLOCK_FEATURE_COUNT + 2;
+	int SYSTEM_FEATURE_COUNT = COMPONENT_OR_SYSTEM_FEATURE_COUNT + 2;
 
 	/**
 	 * The number of operations of the '<em>System</em>' class.
@@ -1153,7 +1307,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int SYSTEM_OPERATION_COUNT = BPCPackage.BLOCK_OPERATION_COUNT + 0;
+	int SYSTEM_OPERATION_COUNT = COMPONENT_OR_SYSTEM_OPERATION_COUNT + 0;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ActivityInstanceImpl <em>Activity Instance</em>}' class.
@@ -1163,7 +1317,7 @@
 	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getActivityInstance()
 	 * @generated
 	 */
-	int ACTIVITY_INSTANCE = 8;
+	int ACTIVITY_INSTANCE = 9;
 
 	/**
 	 * The feature id for the '<em><b>Base Property</b></em>' reference.
@@ -1200,7 +1354,7 @@
 	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getActivityConfiguration()
 	 * @generated
 	 */
-	int ACTIVITY_CONFIGURATION = 9;
+	int ACTIVITY_CONFIGURATION = 10;
 
 	/**
 	 * The feature id for the '<em><b>Base Instance Specification</b></em>' reference.
@@ -1237,7 +1391,7 @@
 	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getComponentDefinitionModel()
 	 * @generated
 	 */
-	int COMPONENT_DEFINITION_MODEL = 10;
+	int COMPONENT_DEFINITION_MODEL = 11;
 
 	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference list.
@@ -1373,7 +1527,7 @@
 	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getSystemComponentArchitectureModel()
 	 * @generated
 	 */
-	int SYSTEM_COMPONENT_ARCHITECTURE_MODEL = 11;
+	int SYSTEM_COMPONENT_ARCHITECTURE_MODEL = 12;
 
 	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference list.
@@ -1474,7 +1628,7 @@
 	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getPeriodicTimer()
 	 * @generated
 	 */
-	int PERIODIC_TIMER = 12;
+	int PERIODIC_TIMER = 13;
 
 	/**
 	 * The feature id for the '<em><b>Property</b></em>' reference list.
@@ -1685,17 +1839,6 @@
 	EClass getComponentDefinition();
 
 	/**
-	 * Returns the meta object for the reference list '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition#getServices <em>Services</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference list '<em>Services</em>'.
-	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition#getServices()
-	 * @see #getComponentDefinition()
-	 * @generated
-	 */
-	EReference getComponentDefinition_Services();
-
-	/**
 	 * Returns the meta object for the reference '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition#getParameter <em>Parameter</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1718,6 +1861,27 @@
 	EReference getComponentDefinition_Activities();
 
 	/**
+	 * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem <em>Component Or System</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Component Or System</em>'.
+	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem
+	 * @generated
+	 */
+	EClass getComponentOrSystem();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem#getServices <em>Services</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Services</em>'.
+	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem#getServices()
+	 * @see #getComponentOrSystem()
+	 * @generated
+	 */
+	EReference getComponentOrSystem_Services();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentPort <em>Component Port</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1815,15 +1979,15 @@
 	EReference getComponentInstance_Base_Property();
 
 	/**
-	 * Returns the meta object for the reference '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getCompdef <em>Compdef</em>}'.
+	 * Returns the meta object for the reference '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getCompdefOrSys <em>Compdef Or Sys</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference '<em>Compdef</em>'.
-	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getCompdef()
+	 * @return the meta object for the reference '<em>Compdef Or Sys</em>'.
+	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getCompdefOrSys()
 	 * @see #getComponentInstance()
 	 * @generated
 	 */
-	EReference getComponentInstance_Compdef();
+	EReference getComponentInstance_CompdefOrSys();
 
 	/**
 	 * Returns the meta object for the reference list '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getPort <em>Port</em>}'.
@@ -1837,17 +2001,6 @@
 	EReference getComponentInstance_Port();
 
 	/**
-	 * Returns the meta object for the reference list '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getActivities <em>Activities</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference list '<em>Activities</em>'.
-	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance#getActivities()
-	 * @see #getComponentInstance()
-	 * @generated
-	 */
-	EReference getComponentInstance_Activities();
-
-	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentService <em>Component Service</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2170,14 +2323,6 @@
 		EClass COMPONENT_DEFINITION = eINSTANCE.getComponentDefinition();
 
 		/**
-		 * The meta object literal for the '<em><b>Services</b></em>' reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference COMPONENT_DEFINITION__SERVICES = eINSTANCE.getComponentDefinition_Services();
-
-		/**
 		 * The meta object literal for the '<em><b>Parameter</b></em>' reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -2194,6 +2339,24 @@
 		EReference COMPONENT_DEFINITION__ACTIVITIES = eINSTANCE.getComponentDefinition_Activities();
 
 		/**
+		 * The meta object literal for the '{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentOrSystemImpl <em>Component Or System</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentOrSystemImpl
+		 * @see org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentsPackageImpl#getComponentOrSystem()
+		 * @generated
+		 */
+		EClass COMPONENT_OR_SYSTEM = eINSTANCE.getComponentOrSystem();
+
+		/**
+		 * The meta object literal for the '<em><b>Services</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference COMPONENT_OR_SYSTEM__SERVICES = eINSTANCE.getComponentOrSystem_Services();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentPortImpl <em>Component Port</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -2270,12 +2433,12 @@
 		EReference COMPONENT_INSTANCE__BASE_PROPERTY = eINSTANCE.getComponentInstance_Base_Property();
 
 		/**
-		 * The meta object literal for the '<em><b>Compdef</b></em>' reference feature.
+		 * The meta object literal for the '<em><b>Compdef Or Sys</b></em>' reference feature.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EReference COMPONENT_INSTANCE__COMPDEF = eINSTANCE.getComponentInstance_Compdef();
+		EReference COMPONENT_INSTANCE__COMPDEF_OR_SYS = eINSTANCE.getComponentInstance_CompdefOrSys();
 
 		/**
 		 * The meta object literal for the '<em><b>Port</b></em>' reference list feature.
@@ -2286,14 +2449,6 @@
 		EReference COMPONENT_INSTANCE__PORT = eINSTANCE.getComponentInstance_Port();
 
 		/**
-		 * The meta object literal for the '<em><b>Activities</b></em>' reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference COMPONENT_INSTANCE__ACTIVITIES = eINSTANCE.getComponentInstance_Activities();
-
-		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentServiceImpl <em>Component Service</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/System.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/System.java
index 25f31ad..3be6c35 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/System.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/System.java
@@ -12,8 +12,6 @@
 package org.eclipse.papyrus.robotics.profile.robotics.components;
 
 import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.papyrus.robotics.bpc.profile.bpc.Block;
 import org.eclipse.papyrus.robotics.profile.robotics.behavior.Task;
 
 /**
@@ -33,7 +31,7 @@
  * @model
  * @generated
  */
-public interface System extends Block {
+public interface System extends ComponentOrSystem {
 	/**
 	 * Returns the value of the '<em><b>Instances</b></em>' reference list.
 	 * The list contents are of type {@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance}.
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentDefinitionImpl.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentDefinitionImpl.java
index 6556c21..9c4db45 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentDefinitionImpl.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentDefinitionImpl.java
@@ -14,17 +14,13 @@
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.UniqueEList;
 import org.eclipse.emf.ecore.EClass;
-import org.eclipse.papyrus.robotics.bpc.profile.bpc.impl.BlockImpl;
 import org.eclipse.papyrus.robotics.profile.robotics.components.Activity;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
-import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentService;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage;
 import org.eclipse.papyrus.robotics.profile.robotics.parameters.Parameter;
 import org.eclipse.papyrus.uml.tools.utils.StereotypeUtil;
 import org.eclipse.uml2.uml.Classifier;
-import org.eclipse.uml2.uml.Port;
 import org.eclipse.uml2.uml.StructuredClassifier;
-import org.eclipse.uml2.uml.Type;
 import org.eclipse.uml2.uml.util.UMLUtil;
 
 /**
@@ -35,14 +31,13 @@
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentDefinitionImpl#getServices <em>Services</em>}</li>
  *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentDefinitionImpl#getParameter <em>Parameter</em>}</li>
  *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentDefinitionImpl#getActivities <em>Activities</em>}</li>
  * </ul>
  *
  * @generated
  */
-public class ComponentDefinitionImpl extends BlockImpl implements ComponentDefinition {
+public class ComponentDefinitionImpl extends ComponentOrSystemImpl implements ComponentDefinition {
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -87,28 +82,6 @@
 	 * 
 	 * @generated NOT
 	 */
-	public EList<ComponentService> getServices() {
-		EList<ComponentService> serviceList = new UniqueEList<ComponentService>();
-		if (getBase_Class() != null) {
-			for (Port port : getBase_Class().getOwnedPorts()) {
-				Type type = port.getType();
-				if (type != null) {
-					ComponentService service = UMLUtil.getStereotypeApplication(type, ComponentService.class);
-					if (service != null) {
-						serviceList.add(service);
-					}
-				}
-			}
-		}
-		return serviceList;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * 
-	 * @generated NOT
-	 */
 	public Parameter getParameter() {
 		Parameter param = null;
 		if (getBase_Class() != null) {
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentInstanceImpl.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentInstanceImpl.java
index b6a736d..47941c7 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentInstanceImpl.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentInstanceImpl.java
@@ -18,9 +18,8 @@
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.papyrus.robotics.bpc.profile.bpc.impl.EntityImpl;
-import org.eclipse.papyrus.robotics.profile.robotics.components.Activity;
-import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentPort;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage;
 import org.eclipse.papyrus.robotics.profile.robotics.parameters.ParameterInstance;
@@ -41,9 +40,8 @@
  * <ul>
  *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentInstanceImpl#getParamInstance <em>Param Instance</em>}</li>
  *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentInstanceImpl#getBase_Property <em>Base Property</em>}</li>
- *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentInstanceImpl#getCompdef <em>Compdef</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentInstanceImpl#getCompdefOrSys <em>Compdef Or Sys</em>}</li>
  *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentInstanceImpl#getPort <em>Port</em>}</li>
- *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentInstanceImpl#getActivities <em>Activities</em>}</li>
  * </ul>
  *
  * @generated
@@ -146,9 +144,9 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public ComponentDefinition getCompdef() {
-		ComponentDefinition compdef = basicGetCompdef();
-		return compdef != null && compdef.eIsProxy() ? (ComponentDefinition)eResolveProxy((InternalEObject)compdef) : compdef;
+	public ComponentOrSystem getCompdefOrSys() {
+		ComponentOrSystem compdefOrSys = basicGetCompdefOrSys();
+		return compdefOrSys != null && compdefOrSys.eIsProxy() ? (ComponentOrSystem)eResolveProxy((InternalEObject)compdefOrSys) : compdefOrSys;
 	}
 
 	/**
@@ -156,11 +154,11 @@
 	 * <!-- end-user-doc -->
 	 * @generated NOT
 	 */
-	public ComponentDefinition basicGetCompdef() {
+	public ComponentOrSystem basicGetCompdefOrSys() {
 		if (getBase_Property() != null) {
 			Type type = getBase_Property().getType();
 			if (type != null) {
-				return UMLUtil.getStereotypeApplication(type, ComponentDefinition.class);
+				return UMLUtil.getStereotypeApplication(type, ComponentOrSystem.class);
 			}
 		}
 		return null;
@@ -173,7 +171,7 @@
 	 */
 	@SuppressWarnings({ "unchecked", "rawtypes" })
 	public EList<ComponentPort> getPort() {
-		ComponentDefinition definition = getCompdef();
+		ComponentOrSystem definition = getCompdefOrSys();
 		if (definition != null) {
 			// CompDef.ports subsets BCP ports
 			return (EList) definition.getPort();
@@ -184,19 +182,6 @@
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated NOT
-	 */
-	public EList<Activity> getActivities() {
-		ComponentDefinition definition = getCompdef();
-		if (definition != null) {
-			return definition.getActivities();
-		}
-		return new BasicEList<Activity>();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	@Override
@@ -208,13 +193,11 @@
 			case ComponentsPackage.COMPONENT_INSTANCE__BASE_PROPERTY:
 				if (resolve) return getBase_Property();
 				return basicGetBase_Property();
-			case ComponentsPackage.COMPONENT_INSTANCE__COMPDEF:
-				if (resolve) return getCompdef();
-				return basicGetCompdef();
+			case ComponentsPackage.COMPONENT_INSTANCE__COMPDEF_OR_SYS:
+				if (resolve) return getCompdefOrSys();
+				return basicGetCompdefOrSys();
 			case ComponentsPackage.COMPONENT_INSTANCE__PORT:
 				return getPort();
-			case ComponentsPackage.COMPONENT_INSTANCE__ACTIVITIES:
-				return getActivities();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -261,12 +244,10 @@
 				return basicGetParamInstance() != null;
 			case ComponentsPackage.COMPONENT_INSTANCE__BASE_PROPERTY:
 				return base_Property != null;
-			case ComponentsPackage.COMPONENT_INSTANCE__COMPDEF:
-				return basicGetCompdef() != null;
+			case ComponentsPackage.COMPONENT_INSTANCE__COMPDEF_OR_SYS:
+				return basicGetCompdefOrSys() != null;
 			case ComponentsPackage.COMPONENT_INSTANCE__PORT:
 				return !getPort().isEmpty();
-			case ComponentsPackage.COMPONENT_INSTANCE__ACTIVITIES:
-				return !getActivities().isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentOrSystemImpl.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentOrSystemImpl.java
new file mode 100644
index 0000000..ce90dba
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentOrSystemImpl.java
@@ -0,0 +1,108 @@
+/**
+ * Copyright (c) 2019 CEA LIST
+ * 
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ */
+package org.eclipse.papyrus.robotics.profile.robotics.components.impl;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.UniqueEList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.papyrus.robotics.bpc.profile.bpc.impl.BlockImpl;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentService;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Type;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Component Or System</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.robotics.profile.robotics.components.impl.ComponentOrSystemImpl#getServices <em>Services</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public abstract class ComponentOrSystemImpl extends BlockImpl implements ComponentOrSystem {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ComponentOrSystemImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ComponentsPackage.Literals.COMPONENT_OR_SYSTEM;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * 
+	 * @generated NOT
+	 */
+	public EList<ComponentService> getServices() {
+		EList<ComponentService> serviceList = new UniqueEList<ComponentService>();
+		if (getBase_Class() != null) {
+			for (Port port : getBase_Class().getOwnedPorts()) {
+				Type type = port.getType();
+				if (type != null) {
+					ComponentService service = UMLUtil.getStereotypeApplication(type, ComponentService.class);
+					if (service != null) {
+						serviceList.add(service);
+					}
+				}
+			}
+		}
+		return serviceList;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ComponentsPackage.COMPONENT_OR_SYSTEM__SERVICES:
+				return getServices();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ComponentsPackage.COMPONENT_OR_SYSTEM__SERVICES:
+				return !getServices().isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ComponentOrSystemImpl
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentsPackageImpl.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentsPackageImpl.java
index 9ab9b01..4df979a 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentsPackageImpl.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/ComponentsPackageImpl.java
@@ -33,6 +33,7 @@
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinitionModel;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentPort;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentService;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsFactory;
@@ -91,6 +92,13 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	private EClass componentOrSystemEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	private EClass componentPortEClass = null;
 
 	/**
@@ -324,7 +332,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getComponentDefinition_Services() {
+	public EReference getComponentDefinition_Parameter() {
 		return (EReference)componentDefinitionEClass.getEStructuralFeatures().get(0);
 	}
 
@@ -333,7 +341,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getComponentDefinition_Parameter() {
+	public EReference getComponentDefinition_Activities() {
 		return (EReference)componentDefinitionEClass.getEStructuralFeatures().get(1);
 	}
 
@@ -342,8 +350,17 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getComponentDefinition_Activities() {
-		return (EReference)componentDefinitionEClass.getEStructuralFeatures().get(2);
+	public EClass getComponentOrSystem() {
+		return componentOrSystemEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getComponentOrSystem_Services() {
+		return (EReference)componentOrSystemEClass.getEStructuralFeatures().get(0);
 	}
 
 	/**
@@ -486,7 +503,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getComponentInstance_Compdef() {
+	public EReference getComponentInstance_CompdefOrSys() {
 		return (EReference)componentInstanceEClass.getEStructuralFeatures().get(2);
 	}
 
@@ -504,15 +521,6 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public EReference getComponentInstance_Activities() {
-		return (EReference)componentInstanceEClass.getEStructuralFeatures().get(4);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
 	public EClass getSystem() {
 		return systemEClass;
 	}
@@ -697,10 +705,12 @@
 		createEReference(activityPortEClass, ACTIVITY_PORT__FUNCTIONS);
 
 		componentDefinitionEClass = createEClass(COMPONENT_DEFINITION);
-		createEReference(componentDefinitionEClass, COMPONENT_DEFINITION__SERVICES);
 		createEReference(componentDefinitionEClass, COMPONENT_DEFINITION__PARAMETER);
 		createEReference(componentDefinitionEClass, COMPONENT_DEFINITION__ACTIVITIES);
 
+		componentOrSystemEClass = createEClass(COMPONENT_OR_SYSTEM);
+		createEReference(componentOrSystemEClass, COMPONENT_OR_SYSTEM__SERVICES);
+
 		componentPortEClass = createEClass(COMPONENT_PORT);
 		createEReference(componentPortEClass, COMPONENT_PORT__BASE_PORT);
 		createEReference(componentPortEClass, COMPONENT_PORT__PROVIDES);
@@ -711,9 +721,8 @@
 		componentInstanceEClass = createEClass(COMPONENT_INSTANCE);
 		createEReference(componentInstanceEClass, COMPONENT_INSTANCE__PARAM_INSTANCE);
 		createEReference(componentInstanceEClass, COMPONENT_INSTANCE__BASE_PROPERTY);
-		createEReference(componentInstanceEClass, COMPONENT_INSTANCE__COMPDEF);
+		createEReference(componentInstanceEClass, COMPONENT_INSTANCE__COMPDEF_OR_SYS);
 		createEReference(componentInstanceEClass, COMPONENT_INSTANCE__PORT);
-		createEReference(componentInstanceEClass, COMPONENT_INSTANCE__ACTIVITIES);
 
 		componentServiceEClass = createEClass(COMPONENT_SERVICE);
 		createEReference(componentServiceEClass, COMPONENT_SERVICE__BASE_CLASS);
@@ -786,12 +795,13 @@
 		// Add supertypes to classes
 		activityEClass.getESuperTypes().add(theBPCPackage.getBlock());
 		activityPortEClass.getESuperTypes().add(theBPCPackage.getPort());
-		componentDefinitionEClass.getESuperTypes().add(theBPCPackage.getBlock());
+		componentDefinitionEClass.getESuperTypes().add(this.getComponentOrSystem());
+		componentOrSystemEClass.getESuperTypes().add(theBPCPackage.getBlock());
 		componentPortEClass.getESuperTypes().add(theBPCPackage.getPort());
 		componentInstanceEClass.getESuperTypes().add(theBPCPackage.getEntity());
 		componentServiceEClass.getESuperTypes().add(theBPCPackage.getEntity());
 		serviceConfigurationEClass.getESuperTypes().add(theBPCPackage.getEntity());
-		systemEClass.getESuperTypes().add(theBPCPackage.getBlock());
+		systemEClass.getESuperTypes().add(this.getComponentOrSystem());
 		componentDefinitionModelEClass.getESuperTypes().add(theBPCPackage.getEntity());
 		systemComponentArchitectureModelEClass.getESuperTypes().add(theBPCPackage.getEntity());
 		periodicTimerEClass.getESuperTypes().add(theBPCPackage.getBlock());
@@ -805,10 +815,12 @@
 		initEReference(getActivityPort_Functions(), theFunctionsPackage.getFunction(), null, "functions", null, 0, -1, ActivityPort.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(componentDefinitionEClass, ComponentDefinition.class, "ComponentDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
-		initEReference(getComponentDefinition_Services(), this.getComponentService(), null, "services", null, 0, -1, ComponentDefinition.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 		initEReference(getComponentDefinition_Parameter(), theParametersPackage.getParameter(), null, "parameter", null, 0, 1, ComponentDefinition.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 		initEReference(getComponentDefinition_Activities(), this.getActivity(), null, "activities", null, 0, -1, ComponentDefinition.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 
+		initEClass(componentOrSystemEClass, ComponentOrSystem.class, "ComponentOrSystem", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(getComponentOrSystem_Services(), this.getComponentService(), null, "services", null, 0, -1, ComponentOrSystem.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+
 		initEClass(componentPortEClass, ComponentPort.class, "ComponentPort", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getComponentPort_Base_Port(), theUMLPackage.getPort(), null, "base_Port", null, 1, 1, ComponentPort.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 		initEReference(getComponentPort_Provides(), theServicesPackage.getServiceDefinition(), null, "provides", null, 0, 1, ComponentPort.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
@@ -819,9 +831,8 @@
 		initEClass(componentInstanceEClass, ComponentInstance.class, "ComponentInstance", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getComponentInstance_ParamInstance(), theParametersPackage.getParameterInstance(), null, "paramInstance", null, 0, 1, ComponentInstance.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 		initEReference(getComponentInstance_Base_Property(), theUMLPackage.getProperty(), null, "base_Property", null, 1, 1, ComponentInstance.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEReference(getComponentInstance_Compdef(), this.getComponentDefinition(), null, "compdef", null, 0, 1, ComponentInstance.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+		initEReference(getComponentInstance_CompdefOrSys(), this.getComponentOrSystem(), null, "compdefOrSys", null, 0, 1, ComponentInstance.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 		initEReference(getComponentInstance_Port(), this.getComponentPort(), null, "port", null, 0, -1, ComponentInstance.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
-		initEReference(getComponentInstance_Activities(), this.getActivity(), null, "activities", null, 0, -1, ComponentInstance.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
 
 		initEClass(componentServiceEClass, ComponentService.class, "ComponentService", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 		initEReference(getComponentService_Base_Class(), theUMLPackage.getClass_(), null, "base_Class", null, 1, 1, ComponentService.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/SystemImpl.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/SystemImpl.java
index ce3c62f..9d846f0 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/SystemImpl.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/impl/SystemImpl.java
@@ -16,7 +16,6 @@
 import org.eclipse.emf.common.util.UniqueEList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.util.EObjectResolvingEList;
-import org.eclipse.papyrus.robotics.bpc.profile.bpc.impl.BlockImpl;
 import org.eclipse.papyrus.robotics.profile.robotics.behavior.Task;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage;
@@ -37,7 +36,7 @@
  *
  * @generated
  */
-public class SystemImpl extends BlockImpl implements org.eclipse.papyrus.robotics.profile.robotics.components.System {
+public class SystemImpl extends ComponentOrSystemImpl implements org.eclipse.papyrus.robotics.profile.robotics.components.System {
 	/**
 	 * The cached value of the '{@link #getTask() <em>Task</em>}' reference list.
 	 * <!-- begin-user-doc -->
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/util/ComponentsAdapterFactory.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/util/ComponentsAdapterFactory.java
index 4f68de2..e5628d9 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/util/ComponentsAdapterFactory.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/util/ComponentsAdapterFactory.java
@@ -28,6 +28,7 @@
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinitionModel;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentPort;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentService;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage;
@@ -104,6 +105,10 @@
 				return createComponentDefinitionAdapter();
 			}
 			@Override
+			public Adapter caseComponentOrSystem(ComponentOrSystem object) {
+				return createComponentOrSystemAdapter();
+			}
+			@Override
 			public Adapter caseComponentPort(ComponentPort object) {
 				return createComponentPortAdapter();
 			}
@@ -218,6 +223,20 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem <em>Component Or System</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem
+	 * @generated
+	 */
+	public Adapter createComponentOrSystemAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.robotics.profile.robotics.components.ComponentPort <em>Component Port</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/util/ComponentsSwitch.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/util/ComponentsSwitch.java
index 1dd100a..4e38d90 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/util/ComponentsSwitch.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/components/util/ComponentsSwitch.java
@@ -26,6 +26,7 @@
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinitionModel;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentInstance;
+import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentOrSystem;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentPort;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentService;
 import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentsPackage;
@@ -109,11 +110,20 @@
 			case ComponentsPackage.COMPONENT_DEFINITION: {
 				ComponentDefinition componentDefinition = (ComponentDefinition)theEObject;
 				T result = caseComponentDefinition(componentDefinition);
+				if (result == null) result = caseComponentOrSystem(componentDefinition);
 				if (result == null) result = caseBlock(componentDefinition);
 				if (result == null) result = caseEntity(componentDefinition);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case ComponentsPackage.COMPONENT_OR_SYSTEM: {
+				ComponentOrSystem componentOrSystem = (ComponentOrSystem)theEObject;
+				T result = caseComponentOrSystem(componentOrSystem);
+				if (result == null) result = caseBlock(componentOrSystem);
+				if (result == null) result = caseEntity(componentOrSystem);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case ComponentsPackage.COMPONENT_PORT: {
 				ComponentPort componentPort = (ComponentPort)theEObject;
 				T result = caseComponentPort(componentPort);
@@ -146,6 +156,7 @@
 			case ComponentsPackage.SYSTEM: {
 				org.eclipse.papyrus.robotics.profile.robotics.components.System system = (org.eclipse.papyrus.robotics.profile.robotics.components.System)theEObject;
 				T result = caseSystem(system);
+				if (result == null) result = caseComponentOrSystem(system);
 				if (result == null) result = caseBlock(system);
 				if (result == null) result = caseEntity(system);
 				if (result == null) result = defaultCase(theEObject);
@@ -235,6 +246,21 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Component Or System</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Component Or System</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseComponentOrSystem(ComponentOrSystem object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Component Port</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/ui/SingleComponentInstance.xwt b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/ui/SingleComponentInstance.xwt
index 17f1027..1367268 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/ui/SingleComponentInstance.xwt
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/compdef/ui/SingleComponentInstance.xwt
@@ -12,13 +12,10 @@
 		<Composite.layout>
 			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
 		</Composite.layout>
-		<pprms:ComponentTypeDialog input="{Binding}" customLabel="Comp. definition"
+		<pprms:ComponentTypeDialog input="{Binding}" customLabel="Comp.def or system"
 			property="UML:TypedElement:type"></pprms:ComponentTypeDialog>
 		<pprms:RobMultiReference input="{Binding}"
 			property="robotics:components:ComponentInstance:port"
 			readOnly="true" customLabel="Ports"></pprms:RobMultiReference>
-		<pprms:RobMultiReference input="{Binding}"
-			property="robotics:components:ComponentInstance:activities"
-			readOnly="true" customLabel="Activities"></pprms:RobMultiReference>
 	</Composite>
 </Composite>
\ No newline at end of file
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/datatype/ui/SingleAttribute.xwt b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/datatype/ui/SingleAttribute.xwt
index 1acaaa5..55c9fb1 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/datatype/ui/SingleAttribute.xwt
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/properties/datatype/ui/SingleAttribute.xwt
@@ -2,6 +2,7 @@
 <Composite xmlns="http://www.eclipse.org/xwt/presentation"
 	xmlns:j="clr-namespace:java.lang" xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
 	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+	xmlns:pprms="clr-namespace:org.eclipse.papyrus.robotics.properties.widgets"
 	xmlns:uml="clr-namespace:org.eclipse.papyrus.uml.properties.widgets"
 	xmlns:x="http://www.eclipse.org/xwt">
 	<Composite.layout>
@@ -11,7 +12,7 @@
 		<Composite.layout>
 			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
 		</Composite.layout>
-		<ppe:ReferenceDialog input="{Binding}" property="UML:TypedElement:type"></ppe:ReferenceDialog>
+		<pprms:DataTypeRefDialog input="{Binding}" property="UML:TypedElement:type"></pprms:DataTypeRefDialog>
 		<uml:MultiplicityDialog input="{Binding}"
 			property="Multiplicity:multiplicity"></uml:MultiplicityDialog>
 	</Composite>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/src/org/eclipse/papyrus/robotics/properties/widgets/DataTypeRefDialog.java b/plugins/customization/org.eclipse.papyrus.robotics.properties/src/org/eclipse/papyrus/robotics/properties/widgets/DataTypeRefDialog.java
new file mode 100644
index 0000000..8d74919
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/src/org/eclipse/papyrus/robotics/properties/widgets/DataTypeRefDialog.java
@@ -0,0 +1,32 @@
+/*****************************************************************************
+ * Copyright (c) 2021 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  Ansgar Radermacher (CEA LIST) ansgar.radermacher@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.robotics.properties.widgets;
+
+import org.eclipse.papyrus.robotics.core.utils.FileExtensions;
+import org.eclipse.papyrus.robotics.profile.robotics.commobject.DataType;
+import org.eclipse.swt.widgets.Composite;
+
+public class DataTypeRefDialog extends ReferenceWoAddDialog {
+
+	public DataTypeRefDialog(Composite parent, int style) {
+		super(parent, style);
+	}
+
+	@Override
+	protected org.eclipse.papyrus.infra.widgets.editors.ReferenceDialog createReferenceDialog(Composite parent, int style) {
+		return new RoboticsReferenceDialog(parent, style, DataType.class, FileExtensions.SERVICEDEF_UML);
+	}
+}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.properties/src/org/eclipse/papyrus/robotics/properties/widgets/RoboticsReferenceDialog.java b/plugins/customization/org.eclipse.papyrus.robotics.properties/src/org/eclipse/papyrus/robotics/properties/widgets/RoboticsReferenceDialog.java
index 7fbe8c6..5a4bec4 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.properties/src/org/eclipse/papyrus/robotics/properties/widgets/RoboticsReferenceDialog.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.properties/src/org/eclipse/papyrus/robotics/properties/widgets/RoboticsReferenceDialog.java
@@ -1,3 +1,18 @@
+/*****************************************************************************
+ * Copyright (c) 2019, 2020 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  Ansgar Radermacher (CEA LIST) ansgar.radermacher@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
 package org.eclipse.papyrus.robotics.properties.widgets;
 
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -11,20 +26,38 @@
 import org.eclipse.papyrus.robotics.core.utils.ScanUtils;
 import org.eclipse.swt.widgets.Composite;
 
+/**
+ * Robotics reference dialog. Supposed to be overridden by sub-classes
+ * that define the extension and stereotype to look for.
+ * Attention wrt. naming: this is rather an editor, not a dialog referenced from XWT.
+ */
 public class RoboticsReferenceDialog extends ReferenceDialog {
 
 	protected Class<? extends EObject> stereotypeFilter;
-	
+
 	protected String extension;
 
 	protected EObject context;
 
+	/**
+	 * 
+	 * Constructor.
+	 *
+	 * @param parent
+	 *            the graphical parent composite
+	 * @param style
+	 *            the SWT style
+	 * @param stereotypeFilter
+	 *            an optional stereotype filter (maybe null)
+	 * @param extension
+	 *            the file extension to scan for
+	 */
 	public RoboticsReferenceDialog(Composite parent, int style, Class<? extends EObject> stereotypeFilter, String extension) {
 		super(parent, style);
 		this.stereotypeFilter = stereotypeFilter;
 		this.extension = extension;
 	}
-	
+
 	@Override
 	public void setModelObservable(@SuppressWarnings("rawtypes") IObservableValue modelProperty) {
 		super.setModelObservable(modelProperty);
@@ -33,9 +66,15 @@
 		if (contextObj instanceof EObject) {
 			context = (EObject) contextObj;
 			// create robotics content provider
-			EncapsulatedContentProvider roboticProvider = new RoboticsContentProvider(
-					context, contentProvider, stereotypeFilter, extension);
-			setContentProvider(roboticProvider);
+			EncapsulatedContentProvider roboticsProvider;
+			if (stereotypeFilter != null) {
+				roboticsProvider = new RoboticsContentProvider(
+						context, contentProvider, stereotypeFilter, extension);
+			} else {
+				roboticsProvider = new RoboticsContentProvider(
+						context, contentProvider, extension);
+			}
+			setContentProvider(roboticsProvider);
 		}
 	}