Refactoring in parametric engine, FMI EASE api update

Change-Id: Ie7ce14480c99e825aab4a5d36addaf09ceddb69d
Signed-off-by: Sebastien Revol <sebastien.revol@cea.fr>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.genmodel b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.genmodel
index 948f91d..37dcca3 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.genmodel
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.genmodel
@@ -77,6 +77,17 @@
       <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="fmiprofile.ecore#//BaseUnit/rad"/>
       <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="fmiprofile.ecore#//BaseUnit/s"/>
     </genEnums>
+    <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//Port"/>
+    <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//FMIPort"/>
+    <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="fmiprofile.ecore#//ScalarVariable">
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ScalarVariable/description"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ScalarVariable/variability"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ScalarVariable/initial"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ScalarVariable/valueReference"/>
+      <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+          propertySortChoices="true" ecoreFeature="ecore:EReference fmiprofile.ecore#//ScalarVariable/fmiVariable"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ScalarVariable/causalityKind"/>
+    </genClasses>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//FMU">
       <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//FMU/fmiVersion"/>
       <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//FMU/modelName"/>
@@ -110,15 +121,6 @@
       <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
           propertySortChoices="true" ecoreFeature="ecore:EReference fmiprofile.ecore#//AbstractVariable/base_Property"/>
     </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="fmiprofile.ecore#//ScalarVariable">
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ScalarVariable/description"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ScalarVariable/variability"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ScalarVariable/initial"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ScalarVariable/valueReference"/>
-      <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
-          propertySortChoices="true" ecoreFeature="ecore:EReference fmiprofile.ecore#//ScalarVariable/fmiVariable"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ScalarVariable/causalityKind"/>
-    </genClasses>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//Local"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//CS_FMU">
       <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//CS_FMU/canHandleVariableCommunicationStepSize"/>
@@ -133,7 +135,6 @@
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//ME_FMU">
       <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute fmiprofile.ecore#//ME_FMU/completedIntegratorStepNotNeeded"/>
     </genClasses>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//FMIPort"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//Independent"/>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//Unknown">
       <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
@@ -169,6 +170,5 @@
           propertySortChoices="true" ecoreFeature="ecore:EReference fmiprofile.ecore#//InitialUnknownDependency/base_Dependency"/>
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//CalculatedParameter"/>
-    <genClasses xsi:type="genmodel:GenClass" ecoreClass="fmiprofile.ecore#//Port"/>
   </genPackages>
 </genmodel:GenModel>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.notation b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.notation
index 3db1c83..7b38688 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.notation
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.notation
@@ -348,22 +348,6 @@
       <element xmi:type="uml:Stereotype" href="FMI.profile.uml#_dWNCEO5uEeS9FOvuH52nyQ"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dWZPUe5uEeS9FOvuH52nyQ" x="780" y="280" width="173" height="85"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_L-U64AOkEeWTZ-coMJ-ChQ" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_L-U64QOkEeWTZ-coMJ-ChQ" showTitle="true"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_L-Vh8AOkEeWTZ-coMJ-ChQ" 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="_L-U64gOkEeWTZ-coMJ-ChQ" x="1244" y="-106"/>
-    </children>
-    <children xmi:type="notation:Shape" xmi:id="_L_FI0AOkEeWTZ-coMJ-ChQ" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_L_FI0QOkEeWTZ-coMJ-ChQ" showTitle="true"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_L_Fv4AOkEeWTZ-coMJ-ChQ" 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="_L_FI0gOkEeWTZ-coMJ-ChQ" x="296" y="-199"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_rZNX8AOlEeWTZ-coMJ-ChQ" type="StereotypeComment">
       <styles xmi:type="notation:TitleStyle" xmi:id="_rZNX8QOlEeWTZ-coMJ-ChQ" showTitle="true"/>
       <styles xmi:type="notation:EObjectValueStyle" xmi:id="_rZNX8wOlEeWTZ-coMJ-ChQ" name="BASE_ELEMENT">
@@ -514,14 +498,6 @@
       <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UlAWECCeEeWt4Mi1ebEMdw" x="842" y="492"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_UmGiQCCeEeWt4Mi1ebEMdw" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_UmGiQSCeEeWt4Mi1ebEMdw" showTitle="true"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_UmHJUCCeEeWt4Mi1ebEMdw" 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="_UmGiQiCeEeWt4Mi1ebEMdw" x="1446" y="628"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_Xbn94CCeEeWt4Mi1ebEMdw" type="Stereotype_Shape" gradient="16777215, -1, 0">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_qy_wUCCgEeWt4Mi1ebEMdw" source="PapyrusCSSForceValue">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qy_wUSCgEeWt4Mi1ebEMdw" key="gradient" value="true"/>
@@ -676,14 +652,6 @@
       <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Dependency"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_k37r4JK2EeWNJOjtFNxhjA" x="1551" y="-108"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_k5vCsJK2EeWNJOjtFNxhjA" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_k5vCsZK2EeWNJOjtFNxhjA" showTitle="true"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_k5vpwJK2EeWNJOjtFNxhjA" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Dependency"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_k5vCspK2EeWNJOjtFNxhjA" x="1700" y="198"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_rfICUJK2EeWNJOjtFNxhjA" type="Stereotype_Shape">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bGiggAYIEea37IpNp9toNQ" source="PapyrusCSSForceValue">
         <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_bGiggQYIEea37IpNp9toNQ" key="gradient" value="true"/>
@@ -951,14 +919,6 @@
       <element xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/ModelDescriptionProxy.uml#_oZMi1CgJEeaEPIADLpYHKQ"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hVwZMSihEeaEPIADLpYHKQ" x="806" y="-28" height="81"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_hV8mcyihEeaEPIADLpYHKQ" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_hV8mdCihEeaEPIADLpYHKQ"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_hV8mdiihEeaEPIADLpYHKQ" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/ModelDescriptionProxy.uml#_oZMi1CgJEeaEPIADLpYHKQ"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hV8mdSihEeaEPIADLpYHKQ" x="200"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_h-nwACihEeaEPIADLpYHKQ" type="Class_Shape">
       <children xmi:type="notation:DecorationNode" xmi:id="_h-oXECihEeaEPIADLpYHKQ" type="Class_NameLabel"/>
       <children xmi:type="notation:BasicCompartment" xmi:id="_h-oXESihEeaEPIADLpYHKQ" visible="false" type="Class_OperationCompartment">
@@ -997,14 +957,6 @@
       <element xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/ModelDescriptionProxy.uml#_oZMi0ygJEeaEPIADLpYHKQ"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_h-nwASihEeaEPIADLpYHKQ" x="521" y="-87" height="81"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_h-6q8yihEeaEPIADLpYHKQ" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_h-6q9CihEeaEPIADLpYHKQ"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_h-6q9iihEeaEPIADLpYHKQ" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/ModelDescriptionProxy.uml#_oZMi0ygJEeaEPIADLpYHKQ"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_h-6q9SihEeaEPIADLpYHKQ" x="200"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_d94B8CiiEeaEPIADLpYHKQ" type="Class_Shape">
       <children xmi:type="notation:DecorationNode" xmi:id="_d94B8iiiEeaEPIADLpYHKQ" type="Class_NameLabel"/>
       <children xmi:type="notation:BasicCompartment" xmi:id="_d94pACiiEeaEPIADLpYHKQ" visible="false" type="Class_OperationCompartment">
@@ -1043,14 +995,6 @@
       <element xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/fmumetamodel.uml#_APozgCgKEeaEPIADLpYHKQ"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_d94B8SiiEeaEPIADLpYHKQ" x="522" y="15" height="81"/>
     </children>
-    <children xmi:type="notation:Shape" xmi:id="_d-DoIyiiEeaEPIADLpYHKQ" type="StereotypeComment">
-      <styles xmi:type="notation:TitleStyle" xmi:id="_d-DoJCiiEeaEPIADLpYHKQ"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_d-DoJiiiEeaEPIADLpYHKQ" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/fmumetamodel.uml#_APozgCgKEeaEPIADLpYHKQ"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_d-DoJSiiEeaEPIADLpYHKQ" x="200"/>
-    </children>
     <children xmi:type="notation:Shape" xmi:id="_QTTpYIjNEeilvIR_3Qiscw" type="Stereotype_Shape">
       <children xmi:type="notation:DecorationNode" xmi:id="_QTTpYojNEeilvIR_3Qiscw" type="Stereotype_NameLabel"/>
       <children xmi:type="notation:BasicCompartment" xmi:id="_QTTpY4jNEeilvIR_3Qiscw" type="Stereotype_AttributeCompartment">
@@ -1111,6 +1055,62 @@
       <element xmi:type="uml:Comment" href="FMI.profile.uml#_7FkIQOdeEeiqD6Bjo7FTPw"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7FpAwedeEeiqD6Bjo7FTPw" x="1360" y="440" width="161" height="101"/>
     </children>
+    <children xmi:type="notation:Shape" xmi:id="_MmIDoMi5Eemyqo9qIVy2SA" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_MmIDoci5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MmIDo8i5Eemyqo9qIVy2SA" 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="_MmIDosi5Eemyqo9qIVy2SA" x="1020" y="160"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_Mm_mU8i5Eemyqo9qIVy2SA" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_Mm_mVMi5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mm_mVsi5Eemyqo9qIVy2SA" 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="_Mm_mVci5Eemyqo9qIVy2SA" x="362" y="-219"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_MnfVk8i5Eemyqo9qIVy2SA" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_MnfVlMi5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mnf8oMi5Eemyqo9qIVy2SA" 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="_MnfVlci5Eemyqo9qIVy2SA" x="1042" y="492"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_Mn4XIMi5Eemyqo9qIVy2SA" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_Mn4XIci5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mn4XI8i5Eemyqo9qIVy2SA" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Dependency"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mn4XIsi5Eemyqo9qIVy2SA" x="1751" y="-108"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_MoTN4Mi5Eemyqo9qIVy2SA" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_MoTN4ci5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MoT08Mi5Eemyqo9qIVy2SA" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/ModelDescriptionProxy.uml#_oZMi1CgJEeaEPIADLpYHKQ"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MoTN4si5Eemyqo9qIVy2SA" x="1006" y="-28"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_MobwwMi5Eemyqo9qIVy2SA" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_Mobwwci5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MocX0Mi5Eemyqo9qIVy2SA" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/ModelDescriptionProxy.uml#_oZMi0ygJEeaEPIADLpYHKQ"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mobwwsi5Eemyqo9qIVy2SA" x="721" y="-87"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_MokToMi5Eemyqo9qIVy2SA" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_MokToci5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MokTo8i5Eemyqo9qIVy2SA" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/fmumetamodel.uml#_APozgCgKEeaEPIADLpYHKQ"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MokTosi5Eemyqo9qIVy2SA" x="722" y="15"/>
+    </children>
     <styles xmi:type="notation:StringValueStyle" xmi:id="__Li9MavFEeSXqKqlHzx1gA" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <styles xmi:type="notation:DiagramStyle" xmi:id="__Li9MqvFEeSXqKqlHzx1gA"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_Zf-cAIjHEeilvIR_3Qiscw" diagramKindId="org.eclipse.papyrus.uml.diagram.profile">
@@ -1164,36 +1164,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_XS2vkOytEeSEBKJWDCrAIQ" id="(0.0,0.6)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_me404OytEeSEBKJWDCrAIQ" id="(1.0,0.4)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_L-Vh8QOkEeWTZ-coMJ-ChQ" type="StereotypeCommentLink" source="_wwA10KvHEeSXqKqlHzx1gA" target="_L-U64AOkEeWTZ-coMJ-ChQ">
-      <styles xmi:type="notation:FontStyle" xmi:id="_L-Vh8gOkEeWTZ-coMJ-ChQ"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_L-Vh9gOkEeWTZ-coMJ-ChQ" 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="_L-Vh8wOkEeWTZ-coMJ-ChQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_L-Vh9AOkEeWTZ-coMJ-ChQ"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_L-Vh9QOkEeWTZ-coMJ-ChQ"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_L_Fv4QOkEeWTZ-coMJ-ChQ" type="StereotypeCommentLink" source="_U_Al8MPiEeSibcUjNRyRzw" target="_L_FI0AOkEeWTZ-coMJ-ChQ">
-      <styles xmi:type="notation:FontStyle" xmi:id="_L_Fv4gOkEeWTZ-coMJ-ChQ"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_L_Fv5gOkEeWTZ-coMJ-ChQ" 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="_L_Fv4wOkEeWTZ-coMJ-ChQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_L_Fv5AOkEeWTZ-coMJ-ChQ"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_L_Fv5QOkEeWTZ-coMJ-ChQ"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_UmIXcCCeEeWt4Mi1ebEMdw" type="StereotypeCommentLink" source="_Uk950CCeEeWt4Mi1ebEMdw" target="_UmGiQCCeEeWt4Mi1ebEMdw">
-      <styles xmi:type="notation:FontStyle" xmi:id="_UmIXcSCeEeWt4Mi1ebEMdw"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_UmI-giCeEeWt4Mi1ebEMdw" 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="_UmIXciCeEeWt4Mi1ebEMdw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UmI-gCCeEeWt4Mi1ebEMdw"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UmI-gSCeEeWt4Mi1ebEMdw"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_nBe4cCCeEeWt4Mi1ebEMdw" type="Extension_Edge" source="_Xbn94CCeEeWt4Mi1ebEMdw" target="_Uk950CCeEeWt4Mi1ebEMdw">
       <styles xmi:type="notation:FontStyle" xmi:id="_nBe4cSCeEeWt4Mi1ebEMdw"/>
       <element xmi:type="uml:Extension" href="FMI.profile.uml#_m_15sCCeEeWt4Mi1ebEMdw"/>
@@ -1231,16 +1201,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MmG68CCgEeWt4Mi1ebEMdw" id="(0.0,0.16666666666666666)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MmG68SCgEeWt4Mi1ebEMdw" id="(1.0,0.6865671641791045)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_k5w34JK2EeWNJOjtFNxhjA" type="StereotypeCommentLink" source="_k3wswJK2EeWNJOjtFNxhjA" target="_k5vCsJK2EeWNJOjtFNxhjA">
-      <styles xmi:type="notation:FontStyle" xmi:id="_k5xe8JK2EeWNJOjtFNxhjA"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_k5yGAZK2EeWNJOjtFNxhjA" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Dependency"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_k5xe8ZK2EeWNJOjtFNxhjA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_k5xe8pK2EeWNJOjtFNxhjA"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_k5yGAJK2EeWNJOjtFNxhjA"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_t5qyIJK2EeWNJOjtFNxhjA" type="Extension_Edge" source="_rfICUJK2EeWNJOjtFNxhjA" target="_k3wswJK2EeWNJOjtFNxhjA">
       <styles xmi:type="notation:FontStyle" xmi:id="_t5qyIZK2EeWNJOjtFNxhjA"/>
       <element xmi:type="uml:Extension" href="FMI.profile.uml#_t1_MAJK2EeWNJOjtFNxhjA"/>
@@ -1269,26 +1229,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wNarwJ5OEeW4hpViu084wQ" id="(0.6333333333333333,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wNarwZ5OEeW4hpViu084wQ" id="(0.0,0.5)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_hV8mdyihEeaEPIADLpYHKQ" type="StereotypeCommentLink" source="_hVwZMCihEeaEPIADLpYHKQ" target="_hV8mcyihEeaEPIADLpYHKQ">
-      <styles xmi:type="notation:FontStyle" xmi:id="_hV8meCihEeaEPIADLpYHKQ"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_hV9NgSihEeaEPIADLpYHKQ" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/ModelDescriptionProxy.uml#_oZMi1CgJEeaEPIADLpYHKQ"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hV8meSihEeaEPIADLpYHKQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hV8meiihEeaEPIADLpYHKQ"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hV9NgCihEeaEPIADLpYHKQ"/>
-    </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_h-6q9yihEeaEPIADLpYHKQ" type="StereotypeCommentLink" source="_h-nwACihEeaEPIADLpYHKQ" target="_h-6q8yihEeaEPIADLpYHKQ">
-      <styles xmi:type="notation:FontStyle" xmi:id="_h-6q-CihEeaEPIADLpYHKQ"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_h-7SAiihEeaEPIADLpYHKQ" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/ModelDescriptionProxy.uml#_oZMi0ygJEeaEPIADLpYHKQ"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_h-6q-SihEeaEPIADLpYHKQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_h-7SACihEeaEPIADLpYHKQ"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_h-7SASihEeaEPIADLpYHKQ"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_jcgDQCihEeaEPIADLpYHKQ" type="Association_Edge" source="_6Z8tkK0REeSXqKqlHzx1gA" target="_h-nwACihEeaEPIADLpYHKQ">
       <children xmi:type="notation:DecorationNode" xmi:id="_jcgDQyihEeaEPIADLpYHKQ" type="Association_StereotypeLabel">
         <styles xmi:type="notation:BooleanValueStyle" xmi:id="_EwYV8Ox6EeanaLDm_8nQ_A" name="IS_UPDATED_POSITION" booleanValue="true"/>
@@ -1351,16 +1291,6 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rfJrECihEeaEPIADLpYHKQ" id="(0.0,0.30526315789473685)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rfJrESihEeaEPIADLpYHKQ" id="(1.0,0.2962962962962963)"/>
     </edges>
-    <edges xmi:type="notation:Connector" xmi:id="_d-EPMCiiEeaEPIADLpYHKQ" type="StereotypeCommentLink" source="_d94B8CiiEeaEPIADLpYHKQ" target="_d-DoIyiiEeaEPIADLpYHKQ">
-      <styles xmi:type="notation:FontStyle" xmi:id="_d-EPMSiiEeaEPIADLpYHKQ"/>
-      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_d-EPNSiiEeaEPIADLpYHKQ" name="BASE_ELEMENT">
-        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/fmumetamodel.uml#_APozgCgKEeaEPIADLpYHKQ"/>
-      </styles>
-      <element xsi:nil="true"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_d-EPMiiiEeaEPIADLpYHKQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_d-EPMyiiEeaEPIADLpYHKQ"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_d-EPNCiiEeaEPIADLpYHKQ"/>
-    </edges>
     <edges xmi:type="notation:Connector" xmi:id="_gPkXwCiiEeaEPIADLpYHKQ" type="Association_Edge" source="_6Z8tkK0REeSXqKqlHzx1gA" target="_d94B8CiiEeaEPIADLpYHKQ">
       <children xmi:type="notation:DecorationNode" xmi:id="_gPkXwyiiEeaEPIADLpYHKQ" type="Association_StereotypeLabel">
         <styles xmi:type="notation:BooleanValueStyle" xmi:id="_Oe9wkOx5EeanaLDm_8nQ_A" name="IS_UPDATED_POSITION" booleanValue="true"/>
@@ -1485,6 +1415,76 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BGK_0OdfEeiqD6Bjo7FTPw" id="(0.7453416149068323,0.0)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BGK_0edfEeiqD6Bjo7FTPw" id="(0.6965174129353234,1.0)"/>
     </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_MmIqsMi5Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="_wwA10KvHEeSXqKqlHzx1gA" target="_MmIDoMi5Eemyqo9qIVy2SA">
+      <styles xmi:type="notation:FontStyle" xmi:id="_MmIqsci5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MmIqtci5Eemyqo9qIVy2SA" 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="_MmIqssi5Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MmIqs8i5Eemyqo9qIVy2SA"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MmIqtMi5Eemyqo9qIVy2SA"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_MnANYMi5Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="_U_Al8MPiEeSibcUjNRyRzw" target="_Mm_mU8i5Eemyqo9qIVy2SA">
+      <styles xmi:type="notation:FontStyle" xmi:id="_MnANYci5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MnANZci5Eemyqo9qIVy2SA" 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="_MnANYsi5Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MnANY8i5Eemyqo9qIVy2SA"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MnANZMi5Eemyqo9qIVy2SA"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_Mnf8oci5Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="_Uk950CCeEeWt4Mi1ebEMdw" target="_MnfVk8i5Eemyqo9qIVy2SA">
+      <styles xmi:type="notation:FontStyle" xmi:id="_Mnf8osi5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mnf8psi5Eemyqo9qIVy2SA" 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="_Mnf8o8i5Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mnf8pMi5Eemyqo9qIVy2SA"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mnf8pci5Eemyqo9qIVy2SA"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_Mn4XJMi5Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="_k3wswJK2EeWNJOjtFNxhjA" target="_Mn4XIMi5Eemyqo9qIVy2SA">
+      <styles xmi:type="notation:FontStyle" xmi:id="_Mn4XJci5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mn4XKci5Eemyqo9qIVy2SA" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Dependency"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mn4XJsi5Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mn4XJ8i5Eemyqo9qIVy2SA"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mn4XKMi5Eemyqo9qIVy2SA"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_MoT08ci5Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="_hVwZMCihEeaEPIADLpYHKQ" target="_MoTN4Mi5Eemyqo9qIVy2SA">
+      <styles xmi:type="notation:FontStyle" xmi:id="_MoT08si5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MoT09si5Eemyqo9qIVy2SA" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/ModelDescriptionProxy.uml#_oZMi1CgJEeaEPIADLpYHKQ"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MoT088i5Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MoT09Mi5Eemyqo9qIVy2SA"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MoT09ci5Eemyqo9qIVy2SA"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_MocX0ci5Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="_h-nwACihEeaEPIADLpYHKQ" target="_MobwwMi5Eemyqo9qIVy2SA">
+      <styles xmi:type="notation:FontStyle" xmi:id="_MocX0si5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MocX1si5Eemyqo9qIVy2SA" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/ModelDescriptionProxy.uml#_oZMi0ygJEeaEPIADLpYHKQ"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MocX08i5Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MocX1Mi5Eemyqo9qIVy2SA"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MocX1ci5Eemyqo9qIVy2SA"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_Mok6sMi5Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="_d94B8CiiEeaEPIADLpYHKQ" target="_MokToMi5Eemyqo9qIVy2SA">
+      <styles xmi:type="notation:FontStyle" xmi:id="_Mok6sci5Eemyqo9qIVy2SA"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mok6tci5Eemyqo9qIVy2SA" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="platform:/resource/org.eclipse.papyrus.moka.fmi/model/fmumetamodel.uml#_APozgCgKEeaEPIADLpYHKQ"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mok6ssi5Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mok6s8i5Eemyqo9qIVy2SA"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mok6tMi5Eemyqo9qIVy2SA"/>
+    </edges>
   </notation:Diagram>
   <css:ModelStyleSheets xmi:id="_0TSJIK1EEeSXqKqlHzx1gA"/>
   <notation:Diagram xmi:id="_-HOwQAfCEeabPfm64ybCZg" type="PapyrusUMLClassDiagram" name="ClassDiagram" measurementUnit="Pixel">
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.uml b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.uml
index 298b6ff..bba71aa 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.uml
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.uml
@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA">
   <uml:Profile xmi:id="__Ki3oKvFEeSXqKqlHzx1gA" name="FMIProfile" metamodelReference="__Ki3oavFEeSXqKqlHzx1gA">
-    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_satEway_EeSXqKqlHzx1gA" source="http://www.eclipse.org/uml2/2.0.0/UML"/>
+    <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_satEway_EeSXqKqlHzx1gA" source="http://www.eclipse.org/uml2/2.0.0/UML">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_POz9IMi5Eemyqo9qIVy2SA" source="PapyrusVersion">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_POz9Ici5Eemyqo9qIVy2SA" key="Version" value="0.0.0"/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_POz9Isi5Eemyqo9qIVy2SA" key="Comment" value="&lt;undefined>"/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_POz9I8i5Eemyqo9qIVy2SA" key="Copyright" value=""/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_POz9JMi5Eemyqo9qIVy2SA" key="Date" value=""/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_POz9Jci5Eemyqo9qIVy2SA" key="Author" value="&lt;undefined>"/>
+      </eAnnotations>
+    </eAnnotations>
     <ownedComment xmi:type="uml:Comment" xmi:id="_NeAF8AfDEeabPfm64ybCZg">
       <body>This Package is only present to create an UML description of FMI Modeldescription metamodel, in order to be able to import it from this FMIProfile and to reference the FmiModelDescription from the FMU stereotype&#xD;
 </body>
@@ -43,66 +51,86 @@
     <packagedElement xmi:type="uml:Stereotype" xmi:id="_6Z7fcK0REeSXqKqlHzx1gA" name="FMU">
       <ownedAttribute xmi:type="uml:Property" xmi:id="_1n8aUK0VEeSXqKqlHzx1gA" name="fmiVersion">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_f2Ji0Mi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_GRtB4K0WEeSXqKqlHzx1gA" name="modelName">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_gqH9cMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_J4cfEK0WEeSXqKqlHzx1gA" name="guid">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_iBCGAMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_MlWxQK0WEeSXqKqlHzx1gA" name="description">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lp0KkMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_M6KjoK0WEeSXqKqlHzx1gA" name="author">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lr4AEMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_V-UrwK0WEeSXqKqlHzx1gA" name="version">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lws1sMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_W0QOMK0WEeSXqKqlHzx1gA" name="copyright">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lt3kIMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_XLIdIK0WEeSXqKqlHzx1gA" name="license">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lymTIMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_X3cJgK0WEeSXqKqlHzx1gA" name="generationTool">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_l1aWkMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_YHNq4K0WEeSXqKqlHzx1gA" name="generationDateAndTime">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_l3gBQMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_YXuMEK0WEeSXqKqlHzx1gA" name="variableNamingConvention">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_l5p9YMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_YnwzMK0WEeSXqKqlHzx1gA" name="numberOfEventIndicators">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_l7nsQMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_19CGoMXZEeSibcUjNRyRzw" name="base_Class" association="_19CtsMXZEeSibcUjNRyRzw">
         <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_RfTy4K1PEeSXqKqlHzx1gA" name="sourceFiles">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_l9TuUMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_VYUr0K1PEeSXqKqlHzx1gA" name="canBeInstantiatedOnlyOncePerProcess">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_l_RdMMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_WaONsK1PEeSXqKqlHzx1gA" name="canGetAndSetFMUstate">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_mA_7gMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_Y_Mr4K1PEeSXqKqlHzx1gA" name="canNotUseMemoryManagementFunctions">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_mDDxAMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_aMTYMK1PEeSXqKqlHzx1gA" name="canSerializeFMUstate">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_mFD8IMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_f5YPwK1PEeSXqKqlHzx1gA" name="providesDirectionalDerivative">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_mG9ZkMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_em57QK1PEeSXqKqlHzx1gA" name="needsExecutionTool">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_mI23AMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_dAv1wK1PEeSXqKqlHzx1gA" name="modelIdentifier">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_mKt4MMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_jb-e0CihEeaEPIADLpYHKQ" name="modelDescription" isReadOnly="true" isDerived="true" association="_jb8poCihEeaEPIADLpYHKQ">
         <type xmi:type="uml:Class" href="pathmap://PAPYRUS_FMI_METAMODEL/ModelDescriptionProxy.uml#_oZMi0ygJEeaEPIADLpYHKQ"/>
@@ -121,30 +149,39 @@
       <generalization xmi:type="uml:Generalization" xmi:id="_W7zp0MPiEeSibcUjNRyRzw" general="_6Z7fcK0REeSXqKqlHzx1gA"/>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_0fRVsK1PEeSXqKqlHzx1gA" name="canHandleVariableCommunicationStepSize">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_oFj0QMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_2FmaUK1PEeSXqKqlHzx1gA" name="canInterpolateInputs">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_oGuR4Mi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_5C6gAK1PEeSXqKqlHzx1gA" name="canRunAsynchronuously">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_oHuXcMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_7SO3QK1PEeSXqKqlHzx1gA" name="maxOutputDerivativeOrder">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_oIsAwMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="__aAk8K1PEeSXqKqlHzx1gA" name="needsExecutionTool">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_oJtUcMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_rW02oOwdEeSEBKJWDCrAIQ" name="startTime">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Real"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_oKpvoMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_7LzLQOwdEeSEBKJWDCrAIQ" name="stopTime">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Real"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_oLljwMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_-hgi0OwdEeSEBKJWDCrAIQ" name="stepSize">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Real"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_oMh-8Mi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_Ar590OweEeSEBKJWDCrAIQ" name="tolerance">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Real"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_oNgPUMi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Stereotype" xmi:id="_2rjcgK1OEeSXqKqlHzx1gA" name="ME_FMU">
@@ -171,17 +208,26 @@
     <packagedElement xmi:type="uml:Stereotype" xmi:id="_NRvP8OytEeSEBKJWDCrAIQ" name="ScalarVariable" isAbstract="true">
       <ownedAttribute xmi:type="uml:Property" xmi:id="_hQ1boOytEeSEBKJWDCrAIQ" name="description">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_POyH8Mi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_QwldkJdgEeWXHe1Lt_6eNw" name="variability" type="_m6Ae0CCbEeWt4Mi1ebEMdw"/>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_c98LQJdgEeWXHe1Lt_6eNw" name="initial" type="_EJc0gCCcEeWt4Mi1ebEMdw"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_QwldkJdgEeWXHe1Lt_6eNw" name="variability" type="_m6Ae0CCbEeWt4Mi1ebEMdw">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_akPkUMi5Eemyqo9qIVy2SA"/>
+      </ownedAttribute>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_c98LQJdgEeWXHe1Lt_6eNw" name="initial" type="_EJc0gCCcEeWt4Mi1ebEMdw">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_bbt-4Mi5Eemyqo9qIVy2SA"/>
+      </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_gyZUUJdgEeWXHe1Lt_6eNw" name="valueReference">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#ELong"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_cWQUgMi5Eemyqo9qIVy2SA"/>
         <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_0rpegC5BEea0_OLDat2kQQ" value="-1"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_reC30CihEeaEPIADLpYHKQ" name="fmiVariable" association="_reBCoCihEeaEPIADLpYHKQ">
         <type xmi:type="uml:Class" href="pathmap://PAPYRUS_FMI_METAMODEL/ModelDescriptionProxy.uml#_oZMi1CgJEeaEPIADLpYHKQ"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_UmZF0Mi5Eemyqo9qIVy2SA"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_gBBDULUKEeiSGMgJYpbk4Q" name="causalityKind" type="_MTGwMJdhEeWXHe1Lt_6eNw"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_gBBDULUKEeiSGMgJYpbk4Q" name="causalityKind" type="_MTGwMJdhEeWXHe1Lt_6eNw">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_dcPsMMi5Eemyqo9qIVy2SA"/>
+      </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Extension" xmi:id="_XSAbAOytEeSEBKJWDCrAIQ" name="E_AbstractVariable_Property1" memberEnd="_XSAbAeytEeSEBKJWDCrAIQ _8SO7IImlEeil3Yu5qF19Ew">
       <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_XSAbAeytEeSEBKJWDCrAIQ" name="extension_AbstractVariable" type="_-lJq4ImjEeiP2ZwYABBzMw" aggregation="composite" association="_XSAbAOytEeSEBKJWDCrAIQ"/>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/fmiprofile.ecore b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/fmiprofile.ecore
index d7210b7..d81f42b 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/fmiprofile.ecore
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/model/fmiprofile.ecore
@@ -5,74 +5,25 @@
   <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML">
     <details key="originalName" value="FMIProfile"/>
   </eAnnotations>
-  <eClassifiers xsi:type="ecore:EClass" name="FMU">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fmiVersion" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modelName" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="guid" ordered="false" lowerBound="1"
-        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="author" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="copyright" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="license" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="generationTool" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="generationDateAndTime"
-        ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variableNamingConvention"
-        ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="numberOfEventIndicators"
-        ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Integer"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="base_Class" ordered="false"
-        lowerBound="1" eType="ecore:EClass ../../org.eclipse.uml2.uml/model/UML.ecore#//Class"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sourceFiles" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="canBeInstantiatedOnlyOncePerProcess"
-        ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="canGetAndSetFMUstate" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="canNotUseMemoryManagementFunctions"
-        ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="canSerializeFMUstate" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="providesDirectionalDerivative"
-        ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="needsExecutionTool" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modelIdentifier" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="modelDescription" ordered="false"
-        lowerBound="1" eType="ecore:EClass ../../org.eclipse.papyrus.moka.fmi/model/Fmi2ModelDescription.ecore#//FmiModelDescriptionType"
-        changeable="false" volatile="true" transient="true" derived="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="fmuBundle" ordered="false"
-        lowerBound="1" eType="ecore:EClass ../../org.eclipse.papyrus.moka.fmi/model/fmumetamodel.ecore#//FMUBundle"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Port" eSuperTypes="#//FMIPort">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="This Stereotype is deprecated and should not be use anymore (let for legacy compatibility).&#xD;&#xA;"/>
+    </eAnnotations>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Parameter" eSuperTypes="#//AbstractVariable"/>
-  <eClassifiers xsi:type="ecore:EClass" name="AbstractVariable" abstract="true" eSuperTypes="#//ScalarVariable">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="base_Property" ordered="false"
-        lowerBound="1" eType="ecore:EClass ../../org.eclipse.uml2.uml/model/UML.ecore#//Property"/>
-  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FMIPort" eSuperTypes="#//ScalarVariable ../../org.eclipse.papyrus.sysml14/resources/profile/sysml.ecore#//deprecatedelements/FlowPort"/>
   <eClassifiers xsi:type="ecore:EClass" name="ScalarVariable" abstract="true">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="variability" ordered="false"
-        lowerBound="1" eType="#//VariabilityKind"/>
+        eType="#//VariabilityKind"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="initial" ordered="false"
-        lowerBound="1" eType="#//InitialKind"/>
+        eType="#//InitialKind"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="valueReference" ordered="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
-        defaultValueLiteral="-1"/>
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong" defaultValueLiteral="-1"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="fmiVariable" ordered="false"
-        lowerBound="1" eType="ecore:EClass ../../org.eclipse.papyrus.moka.fmi/model/Fmi2ModelDescription.ecore#//Fmi2ScalarVariable"/>
+        eType="ecore:EClass ../../org.eclipse.papyrus.moka.fmi/model/Fmi2ModelDescription.ecore#//Fmi2ScalarVariable"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="causalityKind" ordered="false"
-        lowerBound="1" eType="#//CausalityKind"/>
+        eType="#//CausalityKind"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="VariabilityKind">
     <eLiterals name="constant"/>
@@ -94,30 +45,82 @@
     <eLiterals name="local" value="4"/>
     <eLiterals name="independent" value="5"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FMU">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fmiVersion" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modelName" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="guid" ordered="false" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="author" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="copyright" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="license" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="generationTool" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="generationDateAndTime"
+        ordered="false" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variableNamingConvention"
+        ordered="false" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="numberOfEventIndicators"
+        ordered="false" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Integer"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="base_Class" ordered="false"
+        lowerBound="1" eType="ecore:EClass ../../org.eclipse.uml2.uml/model/UML.ecore#//Class"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sourceFiles" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="canBeInstantiatedOnlyOncePerProcess"
+        ordered="false" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="canGetAndSetFMUstate" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="canNotUseMemoryManagementFunctions"
+        ordered="false" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="canSerializeFMUstate" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="providesDirectionalDerivative"
+        ordered="false" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="needsExecutionTool" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modelIdentifier" ordered="false"
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="modelDescription" ordered="false"
+        lowerBound="1" eType="ecore:EClass ../../org.eclipse.papyrus.moka.fmi/model/Fmi2ModelDescription.ecore#//FmiModelDescriptionType"
+        changeable="false" volatile="true" transient="true" derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="fmuBundle" ordered="false"
+        lowerBound="1" eType="ecore:EClass ../../org.eclipse.papyrus.moka.fmi/model/fmumetamodel.ecore#//FMUBundle"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Parameter" eSuperTypes="#//AbstractVariable"/>
+  <eClassifiers xsi:type="ecore:EClass" name="AbstractVariable" abstract="true" eSuperTypes="#//ScalarVariable">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="base_Property" ordered="false"
+        lowerBound="1" eType="ecore:EClass ../../org.eclipse.uml2.uml/model/UML.ecore#//Property"/>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Local" eSuperTypes="#//AbstractVariable"/>
   <eClassifiers xsi:type="ecore:EClass" name="CS_FMU" eSuperTypes="#//FMU">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="canHandleVariableCommunicationStepSize"
-        ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+        ordered="false" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="canInterpolateInputs" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="canRunAsynchronuously"
-        ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+        ordered="false" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxOutputDerivativeOrder"
-        ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Integer"/>
+        ordered="false" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Integer"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="startTime" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Real"/>
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Real"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="stopTime" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Real"/>
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Real"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="stepSize" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Real"/>
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Real"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="tolerance" ordered="false"
-        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Real"/>
+        eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Real"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ME_FMU" eSuperTypes="#//FMU">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="completedIntegratorStepNotNeeded"
         ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FMIPort" eSuperTypes="#//ScalarVariable ../../org.eclipse.papyrus.sysml14/resources/profile/sysml.ecore#//deprecatedelements/FlowPort"/>
   <eClassifiers xsi:type="ecore:EClass" name="Independent" eSuperTypes="#//AbstractVariable"/>
   <eClassifiers xsi:type="ecore:EEnum" name="DependenciesKind">
     <eLiterals name="dependent"/>
@@ -193,5 +196,4 @@
     <eLiterals name="rad" value="8"/>
     <eLiterals name="s" value="9"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Port" eSuperTypes="#//FMIPort"/>
 </ecore:EPackage>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/plugin.xml b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/plugin.xml
index 657457b..677f6f2 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/plugin.xml
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/plugin.xml
@@ -33,4 +33,7 @@
           uri="http://www.eclipse.org/papyrus/FMIProfile/1.0.0">
     </factory>
  </extension>
+
+ 
+ 
 </plugin>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/BaseUnit.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/BaseUnit.java
index 3c361cb..50dd598 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/BaseUnit.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/BaseUnit.java
@@ -405,6 +405,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getValue() {
 	  return value;
 	}
@@ -414,6 +415,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getName() {
 	  return name;
 	}
@@ -423,6 +425,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getLiteral() {
 	  return literal;
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/CS_FMU.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/CS_FMU.java
index 71225be..d06c751 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/CS_FMU.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/CS_FMU.java
@@ -49,7 +49,7 @@
 	 * @return the value of the '<em>Can Handle Variable Communication Step Size</em>' attribute.
 	 * @see #setCanHandleVariableCommunicationStepSize(boolean)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getCS_FMU_CanHandleVariableCommunicationStepSize()
-	 * @model dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Boolean" ordered="false"
 	 * @generated
 	 */
 	boolean isCanHandleVariableCommunicationStepSize();
@@ -75,7 +75,7 @@
 	 * @return the value of the '<em>Can Interpolate Inputs</em>' attribute.
 	 * @see #setCanInterpolateInputs(boolean)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getCS_FMU_CanInterpolateInputs()
-	 * @model dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Boolean" ordered="false"
 	 * @generated
 	 */
 	boolean isCanInterpolateInputs();
@@ -101,7 +101,7 @@
 	 * @return the value of the '<em>Can Run Asynchronuously</em>' attribute.
 	 * @see #setCanRunAsynchronuously(boolean)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getCS_FMU_CanRunAsynchronuously()
-	 * @model dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Boolean" ordered="false"
 	 * @generated
 	 */
 	boolean isCanRunAsynchronuously();
@@ -127,7 +127,7 @@
 	 * @return the value of the '<em>Max Output Derivative Order</em>' attribute.
 	 * @see #setMaxOutputDerivativeOrder(int)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getCS_FMU_MaxOutputDerivativeOrder()
-	 * @model dataType="org.eclipse.uml2.types.Integer" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Integer" ordered="false"
 	 * @generated
 	 */
 	int getMaxOutputDerivativeOrder();
@@ -153,7 +153,7 @@
 	 * @return the value of the '<em>Start Time</em>' attribute.
 	 * @see #setStartTime(double)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getCS_FMU_StartTime()
-	 * @model dataType="org.eclipse.uml2.types.Real" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Real" ordered="false"
 	 * @generated
 	 */
 	double getStartTime();
@@ -179,7 +179,7 @@
 	 * @return the value of the '<em>Stop Time</em>' attribute.
 	 * @see #setStopTime(double)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getCS_FMU_StopTime()
-	 * @model dataType="org.eclipse.uml2.types.Real" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Real" ordered="false"
 	 * @generated
 	 */
 	double getStopTime();
@@ -205,7 +205,7 @@
 	 * @return the value of the '<em>Step Size</em>' attribute.
 	 * @see #setStepSize(double)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getCS_FMU_StepSize()
-	 * @model dataType="org.eclipse.uml2.types.Real" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Real" ordered="false"
 	 * @generated
 	 */
 	double getStepSize();
@@ -231,7 +231,7 @@
 	 * @return the value of the '<em>Tolerance</em>' attribute.
 	 * @see #setTolerance(double)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getCS_FMU_Tolerance()
-	 * @model dataType="org.eclipse.uml2.types.Real" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Real" ordered="false"
 	 * @generated
 	 */
 	double getTolerance();
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/CausalityKind.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/CausalityKind.java
index da37514..05313a2 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/CausalityKind.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/CausalityKind.java
@@ -297,6 +297,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getValue() {
 	  return value;
 	}
@@ -306,6 +307,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getName() {
 	  return name;
 	}
@@ -315,6 +317,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getLiteral() {
 	  return literal;
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/DependenciesKind.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/DependenciesKind.java
index 9d57a34..ed6651e 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/DependenciesKind.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/DependenciesKind.java
@@ -270,6 +270,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getValue() {
 	  return value;
 	}
@@ -279,6 +280,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getName() {
 	  return name;
 	}
@@ -288,6 +290,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getLiteral() {
 	  return literal;
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/FMIProfilePackage.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/FMIProfilePackage.java
index c529fd7..f9ce217 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/FMIProfilePackage.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/FMIProfilePackage.java
@@ -77,7 +77,475 @@
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getFMU()
 	 * @generated
 	 */
-	int FMU = 0;
+	int FMU = 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ScalarVariableImpl <em>Scalar Variable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ScalarVariableImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getScalarVariable()
+	 * @generated
+	 */
+	int SCALAR_VARIABLE = 2;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCALAR_VARIABLE__DESCRIPTION = 0;
+
+	/**
+	 * The feature id for the '<em><b>Variability</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCALAR_VARIABLE__VARIABILITY = 1;
+
+	/**
+	 * The feature id for the '<em><b>Initial</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCALAR_VARIABLE__INITIAL = 2;
+
+	/**
+	 * The feature id for the '<em><b>Value Reference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCALAR_VARIABLE__VALUE_REFERENCE = 3;
+
+	/**
+	 * The feature id for the '<em><b>Fmi Variable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCALAR_VARIABLE__FMI_VARIABLE = 4;
+
+	/**
+	 * The feature id for the '<em><b>Causality Kind</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCALAR_VARIABLE__CAUSALITY_KIND = 5;
+
+	/**
+	 * The number of structural features of the '<em>Scalar Variable</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCALAR_VARIABLE_FEATURE_COUNT = 6;
+
+	/**
+	 * The number of operations of the '<em>Scalar Variable</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SCALAR_VARIABLE_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.AbstractVariableImpl <em>Abstract Variable</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.AbstractVariableImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getAbstractVariable()
+	 * @generated
+	 */
+	int ABSTRACT_VARIABLE = 5;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ParameterImpl <em>Parameter</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ParameterImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getParameter()
+	 * @generated
+	 */
+	int PARAMETER = 4;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.LocalImpl <em>Local</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.LocalImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getLocal()
+	 * @generated
+	 */
+	int LOCAL = 6;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CS_FMUImpl <em>CS FMU</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CS_FMUImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getCS_FMU()
+	 * @generated
+	 */
+	int CS_FMU = 7;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ME_FMUImpl <em>ME FMU</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ME_FMUImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getME_FMU()
+	 * @generated
+	 */
+	int ME_FMU = 8;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIPortImpl <em>FMI Port</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIPortImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getFMIPort()
+	 * @generated
+	 */
+	int FMI_PORT = 1;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT__DESCRIPTION = SCALAR_VARIABLE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Variability</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT__VARIABILITY = SCALAR_VARIABLE__VARIABILITY;
+
+	/**
+	 * The feature id for the '<em><b>Initial</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT__INITIAL = SCALAR_VARIABLE__INITIAL;
+
+	/**
+	 * The feature id for the '<em><b>Value Reference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT__VALUE_REFERENCE = SCALAR_VARIABLE__VALUE_REFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Fmi Variable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT__FMI_VARIABLE = SCALAR_VARIABLE__FMI_VARIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Causality Kind</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT__CAUSALITY_KIND = SCALAR_VARIABLE__CAUSALITY_KIND;
+
+	/**
+	 * The feature id for the '<em><b>Base Port</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT__BASE_PORT = SCALAR_VARIABLE_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Direction</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT__DIRECTION = SCALAR_VARIABLE_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Is Atomic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT__IS_ATOMIC = SCALAR_VARIABLE_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>FMI Port</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT_FEATURE_COUNT = SCALAR_VARIABLE_FEATURE_COUNT + 3;
+
+	/**
+	 * The operation id for the '<em>Get Icon</em>' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT___GET_ICON = SCALAR_VARIABLE_OPERATION_COUNT + 0;
+
+	/**
+	 * The number of operations of the '<em>FMI Port</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FMI_PORT_OPERATION_COUNT = SCALAR_VARIABLE_OPERATION_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.IndependentImpl <em>Independent</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.IndependentImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getIndependent()
+	 * @generated
+	 */
+	int INDEPENDENT = 9;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.UnknownImpl <em>Unknown</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.UnknownImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getUnknown()
+	 * @generated
+	 */
+	int UNKNOWN = 10;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.OutputUnknownImpl <em>Output Unknown</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.OutputUnknownImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getOutputUnknown()
+	 * @generated
+	 */
+	int OUTPUT_UNKNOWN = 11;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.InitialUnknownImpl <em>Initial Unknown</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.InitialUnknownImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getInitialUnknown()
+	 * @generated
+	 */
+	int INITIAL_UNKNOWN = 12;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.DerivativeUnknownImpl <em>Derivative Unknown</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.DerivativeUnknownImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getDerivativeUnknown()
+	 * @generated
+	 */
+	int DERIVATIVE_UNKNOWN = 13;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CS_GraphImpl <em>CS Graph</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CS_GraphImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getCS_Graph()
+	 * @generated
+	 */
+	int CS_GRAPH = 14;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.DerivativeDependencyImpl <em>Derivative Dependency</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.DerivativeDependencyImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getDerivativeDependency()
+	 * @generated
+	 */
+	int DERIVATIVE_DEPENDENCY = 15;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.OutputDependencyImpl <em>Output Dependency</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.OutputDependencyImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getOutputDependency()
+	 * @generated
+	 */
+	int OUTPUT_DEPENDENCY = 16;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.InitialUnknownDependencyImpl <em>Initial Unknown Dependency</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.InitialUnknownDependencyImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getInitialUnknownDependency()
+	 * @generated
+	 */
+	int INITIAL_UNKNOWN_DEPENDENCY = 17;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CalculatedParameterImpl <em>Calculated Parameter</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CalculatedParameterImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getCalculatedParameter()
+	 * @generated
+	 */
+	int CALCULATED_PARAMETER = 18;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.PortImpl <em>Port</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.PortImpl
+	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getPort()
+	 * @generated
+	 */
+	int PORT = 0;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT__DESCRIPTION = FMI_PORT__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>Variability</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT__VARIABILITY = FMI_PORT__VARIABILITY;
+
+	/**
+	 * The feature id for the '<em><b>Initial</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT__INITIAL = FMI_PORT__INITIAL;
+
+	/**
+	 * The feature id for the '<em><b>Value Reference</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT__VALUE_REFERENCE = FMI_PORT__VALUE_REFERENCE;
+
+	/**
+	 * The feature id for the '<em><b>Fmi Variable</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT__FMI_VARIABLE = FMI_PORT__FMI_VARIABLE;
+
+	/**
+	 * The feature id for the '<em><b>Causality Kind</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT__CAUSALITY_KIND = FMI_PORT__CAUSALITY_KIND;
+
+	/**
+	 * The feature id for the '<em><b>Base Port</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT__BASE_PORT = FMI_PORT__BASE_PORT;
+
+	/**
+	 * The feature id for the '<em><b>Direction</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT__DIRECTION = FMI_PORT__DIRECTION;
+
+	/**
+	 * The feature id for the '<em><b>Is Atomic</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT__IS_ATOMIC = FMI_PORT__IS_ATOMIC;
+
+	/**
+	 * The number of structural features of the '<em>Port</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT_FEATURE_COUNT = FMI_PORT_FEATURE_COUNT + 0;
+
+	/**
+	 * The operation id for the '<em>Get Icon</em>' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT___GET_ICON = FMI_PORT___GET_ICON;
+
+	/**
+	 * The number of operations of the '<em>Port</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PORT_OPERATION_COUNT = FMI_PORT_OPERATION_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Fmi Version</b></em>' attribute.
@@ -305,98 +773,6 @@
 	int FMU_OPERATION_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ScalarVariableImpl <em>Scalar Variable</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ScalarVariableImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getScalarVariable()
-	 * @generated
-	 */
-	int SCALAR_VARIABLE = 3;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int SCALAR_VARIABLE__DESCRIPTION = 0;
-
-	/**
-	 * The feature id for the '<em><b>Variability</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int SCALAR_VARIABLE__VARIABILITY = 1;
-
-	/**
-	 * The feature id for the '<em><b>Initial</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int SCALAR_VARIABLE__INITIAL = 2;
-
-	/**
-	 * The feature id for the '<em><b>Value Reference</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int SCALAR_VARIABLE__VALUE_REFERENCE = 3;
-
-	/**
-	 * The feature id for the '<em><b>Fmi Variable</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int SCALAR_VARIABLE__FMI_VARIABLE = 4;
-
-	/**
-	 * The feature id for the '<em><b>Causality Kind</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int SCALAR_VARIABLE__CAUSALITY_KIND = 5;
-
-	/**
-	 * The number of structural features of the '<em>Scalar Variable</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int SCALAR_VARIABLE_FEATURE_COUNT = 6;
-
-	/**
-	 * The number of operations of the '<em>Scalar Variable</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int SCALAR_VARIABLE_OPERATION_COUNT = 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.AbstractVariableImpl <em>Abstract Variable</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.AbstractVariableImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getAbstractVariable()
-	 * @generated
-	 */
-	int ABSTRACT_VARIABLE = 2;
-
-	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -478,16 +854,6 @@
 	int ABSTRACT_VARIABLE_OPERATION_COUNT = SCALAR_VARIABLE_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ParameterImpl <em>Parameter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ParameterImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getParameter()
-	 * @generated
-	 */
-	int PARAMETER = 1;
-
-	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -569,16 +935,6 @@
 	int PARAMETER_OPERATION_COUNT = ABSTRACT_VARIABLE_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.LocalImpl <em>Local</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.LocalImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getLocal()
-	 * @generated
-	 */
-	int LOCAL = 4;
-
-	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -660,16 +1016,6 @@
 	int LOCAL_OPERATION_COUNT = ABSTRACT_VARIABLE_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CS_FMUImpl <em>CS FMU</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CS_FMUImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getCS_FMU()
-	 * @generated
-	 */
-	int CS_FMU = 5;
-
-	/**
 	 * The feature id for the '<em><b>Fmi Version</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -967,16 +1313,6 @@
 	int CS_FMU_OPERATION_COUNT = FMU_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ME_FMUImpl <em>ME FMU</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.ME_FMUImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getME_FMU()
-	 * @generated
-	 */
-	int ME_FMU = 6;
-
-	/**
 	 * The feature id for the '<em><b>Fmi Version</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1211,134 +1547,6 @@
 	int ME_FMU_OPERATION_COUNT = FMU_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIPortImpl <em>FMI Port</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIPortImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getFMIPort()
-	 * @generated
-	 */
-	int FMI_PORT = 7;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT__DESCRIPTION = SCALAR_VARIABLE__DESCRIPTION;
-
-	/**
-	 * The feature id for the '<em><b>Variability</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT__VARIABILITY = SCALAR_VARIABLE__VARIABILITY;
-
-	/**
-	 * The feature id for the '<em><b>Initial</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT__INITIAL = SCALAR_VARIABLE__INITIAL;
-
-	/**
-	 * The feature id for the '<em><b>Value Reference</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT__VALUE_REFERENCE = SCALAR_VARIABLE__VALUE_REFERENCE;
-
-	/**
-	 * The feature id for the '<em><b>Fmi Variable</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT__FMI_VARIABLE = SCALAR_VARIABLE__FMI_VARIABLE;
-
-	/**
-	 * The feature id for the '<em><b>Causality Kind</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT__CAUSALITY_KIND = SCALAR_VARIABLE__CAUSALITY_KIND;
-
-	/**
-	 * The feature id for the '<em><b>Base Port</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT__BASE_PORT = SCALAR_VARIABLE_FEATURE_COUNT + 0;
-
-	/**
-	 * The feature id for the '<em><b>Direction</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT__DIRECTION = SCALAR_VARIABLE_FEATURE_COUNT + 1;
-
-	/**
-	 * The feature id for the '<em><b>Is Atomic</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT__IS_ATOMIC = SCALAR_VARIABLE_FEATURE_COUNT + 2;
-
-	/**
-	 * The number of structural features of the '<em>FMI Port</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT_FEATURE_COUNT = SCALAR_VARIABLE_FEATURE_COUNT + 3;
-
-	/**
-	 * The operation id for the '<em>Get Icon</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT___GET_ICON = SCALAR_VARIABLE_OPERATION_COUNT + 0;
-
-	/**
-	 * The number of operations of the '<em>FMI Port</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int FMI_PORT_OPERATION_COUNT = SCALAR_VARIABLE_OPERATION_COUNT + 1;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.IndependentImpl <em>Independent</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.IndependentImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getIndependent()
-	 * @generated
-	 */
-	int INDEPENDENT = 8;
-
-	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1420,16 +1628,6 @@
 	int INDEPENDENT_OPERATION_COUNT = ABSTRACT_VARIABLE_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.UnknownImpl <em>Unknown</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.UnknownImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getUnknown()
-	 * @generated
-	 */
-	int UNKNOWN = 9;
-
-	/**
 	 * The feature id for the '<em><b>Base Property</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1475,16 +1673,6 @@
 	int UNKNOWN_OPERATION_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.OutputUnknownImpl <em>Output Unknown</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.OutputUnknownImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getOutputUnknown()
-	 * @generated
-	 */
-	int OUTPUT_UNKNOWN = 10;
-
-	/**
 	 * The feature id for the '<em><b>Base Property</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1530,16 +1718,6 @@
 	int OUTPUT_UNKNOWN_OPERATION_COUNT = UNKNOWN_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.InitialUnknownImpl <em>Initial Unknown</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.InitialUnknownImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getInitialUnknown()
-	 * @generated
-	 */
-	int INITIAL_UNKNOWN = 11;
-
-	/**
 	 * The feature id for the '<em><b>Base Property</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1585,16 +1763,6 @@
 	int INITIAL_UNKNOWN_OPERATION_COUNT = UNKNOWN_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.DerivativeUnknownImpl <em>Derivative Unknown</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.DerivativeUnknownImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getDerivativeUnknown()
-	 * @generated
-	 */
-	int DERIVATIVE_UNKNOWN = 12;
-
-	/**
 	 * The feature id for the '<em><b>Base Property</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1640,16 +1808,6 @@
 	int DERIVATIVE_UNKNOWN_OPERATION_COUNT = UNKNOWN_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CS_GraphImpl <em>CS Graph</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CS_GraphImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getCS_Graph()
-	 * @generated
-	 */
-	int CS_GRAPH = 13;
-
-	/**
 	 * The feature id for the '<em><b>Start Time</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1740,16 +1898,6 @@
 	int CS_GRAPH_OPERATION_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.DerivativeDependencyImpl <em>Derivative Dependency</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.DerivativeDependencyImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getDerivativeDependency()
-	 * @generated
-	 */
-	int DERIVATIVE_DEPENDENCY = 14;
-
-	/**
 	 * The feature id for the '<em><b>Base Dependency</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1786,16 +1934,6 @@
 	int DERIVATIVE_DEPENDENCY_OPERATION_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.OutputDependencyImpl <em>Output Dependency</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.OutputDependencyImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getOutputDependency()
-	 * @generated
-	 */
-	int OUTPUT_DEPENDENCY = 15;
-
-	/**
 	 * The feature id for the '<em><b>Base Dependency</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1823,16 +1961,6 @@
 	int OUTPUT_DEPENDENCY_OPERATION_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.InitialUnknownDependencyImpl <em>Initial Unknown Dependency</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.InitialUnknownDependencyImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getInitialUnknownDependency()
-	 * @generated
-	 */
-	int INITIAL_UNKNOWN_DEPENDENCY = 16;
-
-	/**
 	 * The feature id for the '<em><b>Base Dependency</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1860,16 +1988,6 @@
 	int INITIAL_UNKNOWN_DEPENDENCY_OPERATION_COUNT = 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CalculatedParameterImpl <em>Calculated Parameter</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.CalculatedParameterImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getCalculatedParameter()
-	 * @generated
-	 */
-	int CALCULATED_PARAMETER = 17;
-
-	/**
 	 * The feature id for the '<em><b>Description</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1951,124 +2069,6 @@
 	int CALCULATED_PARAMETER_OPERATION_COUNT = ABSTRACT_VARIABLE_OPERATION_COUNT + 0;
 
 	/**
-	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.impl.PortImpl <em>Port</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.PortImpl
-	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.impl.FMIProfilePackageImpl#getPort()
-	 * @generated
-	 */
-	int PORT = 18;
-
-	/**
-	 * The feature id for the '<em><b>Description</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT__DESCRIPTION = FMI_PORT__DESCRIPTION;
-
-	/**
-	 * The feature id for the '<em><b>Variability</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT__VARIABILITY = FMI_PORT__VARIABILITY;
-
-	/**
-	 * The feature id for the '<em><b>Initial</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT__INITIAL = FMI_PORT__INITIAL;
-
-	/**
-	 * The feature id for the '<em><b>Value Reference</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT__VALUE_REFERENCE = FMI_PORT__VALUE_REFERENCE;
-
-	/**
-	 * The feature id for the '<em><b>Fmi Variable</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT__FMI_VARIABLE = FMI_PORT__FMI_VARIABLE;
-
-	/**
-	 * The feature id for the '<em><b>Causality Kind</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT__CAUSALITY_KIND = FMI_PORT__CAUSALITY_KIND;
-
-	/**
-	 * The feature id for the '<em><b>Base Port</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT__BASE_PORT = FMI_PORT__BASE_PORT;
-
-	/**
-	 * The feature id for the '<em><b>Direction</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT__DIRECTION = FMI_PORT__DIRECTION;
-
-	/**
-	 * The feature id for the '<em><b>Is Atomic</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT__IS_ATOMIC = FMI_PORT__IS_ATOMIC;
-
-	/**
-	 * The number of structural features of the '<em>Port</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT_FEATURE_COUNT = FMI_PORT_FEATURE_COUNT + 0;
-
-	/**
-	 * The operation id for the '<em>Get Icon</em>' operation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT___GET_ICON = FMI_PORT___GET_ICON;
-
-	/**
-	 * The number of operations of the '<em>Port</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int PORT_OPERATION_COUNT = FMI_PORT_OPERATION_COUNT + 0;
-
-	/**
 	 * The meta object id for the '{@link org.eclipse.papyrus.moka.fmi.fmiprofile.VariabilityKind <em>Variability Kind</em>}' enum.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/FMU.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/FMU.java
index ebbfbfa..ab6830d 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/FMU.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/FMU.java
@@ -69,7 +69,7 @@
 	 * @return the value of the '<em>Fmi Version</em>' attribute.
 	 * @see #setFmiVersion(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_FmiVersion()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getFmiVersion();
@@ -95,7 +95,7 @@
 	 * @return the value of the '<em>Model Name</em>' attribute.
 	 * @see #setModelName(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_ModelName()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getModelName();
@@ -121,7 +121,7 @@
 	 * @return the value of the '<em>Guid</em>' attribute.
 	 * @see #setGuid(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_Guid()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getGuid();
@@ -147,7 +147,7 @@
 	 * @return the value of the '<em>Description</em>' attribute.
 	 * @see #setDescription(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_Description()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getDescription();
@@ -173,7 +173,7 @@
 	 * @return the value of the '<em>Author</em>' attribute.
 	 * @see #setAuthor(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_Author()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getAuthor();
@@ -199,7 +199,7 @@
 	 * @return the value of the '<em>Version</em>' attribute.
 	 * @see #setVersion(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_Version()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getVersion();
@@ -225,7 +225,7 @@
 	 * @return the value of the '<em>Copyright</em>' attribute.
 	 * @see #setCopyright(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_Copyright()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getCopyright();
@@ -251,7 +251,7 @@
 	 * @return the value of the '<em>License</em>' attribute.
 	 * @see #setLicense(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_License()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getLicense();
@@ -277,7 +277,7 @@
 	 * @return the value of the '<em>Generation Tool</em>' attribute.
 	 * @see #setGenerationTool(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_GenerationTool()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getGenerationTool();
@@ -303,7 +303,7 @@
 	 * @return the value of the '<em>Generation Date And Time</em>' attribute.
 	 * @see #setGenerationDateAndTime(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_GenerationDateAndTime()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getGenerationDateAndTime();
@@ -329,7 +329,7 @@
 	 * @return the value of the '<em>Variable Naming Convention</em>' attribute.
 	 * @see #setVariableNamingConvention(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_VariableNamingConvention()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getVariableNamingConvention();
@@ -355,7 +355,7 @@
 	 * @return the value of the '<em>Number Of Event Indicators</em>' attribute.
 	 * @see #setNumberOfEventIndicators(int)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_NumberOfEventIndicators()
-	 * @model dataType="org.eclipse.uml2.types.Integer" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Integer" ordered="false"
 	 * @generated
 	 */
 	int getNumberOfEventIndicators();
@@ -407,7 +407,7 @@
 	 * @return the value of the '<em>Source Files</em>' attribute.
 	 * @see #setSourceFiles(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_SourceFiles()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getSourceFiles();
@@ -433,7 +433,7 @@
 	 * @return the value of the '<em>Can Be Instantiated Only Once Per Process</em>' attribute.
 	 * @see #setCanBeInstantiatedOnlyOncePerProcess(boolean)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_CanBeInstantiatedOnlyOncePerProcess()
-	 * @model dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Boolean" ordered="false"
 	 * @generated
 	 */
 	boolean isCanBeInstantiatedOnlyOncePerProcess();
@@ -459,7 +459,7 @@
 	 * @return the value of the '<em>Can Get And Set FM Ustate</em>' attribute.
 	 * @see #setCanGetAndSetFMUstate(boolean)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_CanGetAndSetFMUstate()
-	 * @model dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Boolean" ordered="false"
 	 * @generated
 	 */
 	boolean isCanGetAndSetFMUstate();
@@ -485,7 +485,7 @@
 	 * @return the value of the '<em>Can Not Use Memory Management Functions</em>' attribute.
 	 * @see #setCanNotUseMemoryManagementFunctions(boolean)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_CanNotUseMemoryManagementFunctions()
-	 * @model dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Boolean" ordered="false"
 	 * @generated
 	 */
 	boolean isCanNotUseMemoryManagementFunctions();
@@ -511,7 +511,7 @@
 	 * @return the value of the '<em>Can Serialize FM Ustate</em>' attribute.
 	 * @see #setCanSerializeFMUstate(boolean)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_CanSerializeFMUstate()
-	 * @model dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Boolean" ordered="false"
 	 * @generated
 	 */
 	boolean isCanSerializeFMUstate();
@@ -537,7 +537,7 @@
 	 * @return the value of the '<em>Provides Directional Derivative</em>' attribute.
 	 * @see #setProvidesDirectionalDerivative(boolean)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_ProvidesDirectionalDerivative()
-	 * @model dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Boolean" ordered="false"
 	 * @generated
 	 */
 	boolean isProvidesDirectionalDerivative();
@@ -563,7 +563,7 @@
 	 * @return the value of the '<em>Needs Execution Tool</em>' attribute.
 	 * @see #setNeedsExecutionTool(boolean)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_NeedsExecutionTool()
-	 * @model dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.Boolean" ordered="false"
 	 * @generated
 	 */
 	boolean isNeedsExecutionTool();
@@ -589,7 +589,7 @@
 	 * @return the value of the '<em>Model Identifier</em>' attribute.
 	 * @see #setModelIdentifier(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getFMU_ModelIdentifier()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getModelIdentifier();
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/InitialKind.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/InitialKind.java
index 61addd9..f132d7a 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/InitialKind.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/InitialKind.java
@@ -216,6 +216,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getValue() {
 	  return value;
 	}
@@ -225,6 +226,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getName() {
 	  return name;
 	}
@@ -234,6 +236,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getLiteral() {
 	  return literal;
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/Port.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/Port.java
index b5a41ea..aa72c50 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/Port.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/Port.java
@@ -19,6 +19,11 @@
  * A representation of the model object '<em><b>Port</b></em>'.
  * <!-- end-user-doc -->
  *
+ * <!-- begin-model-doc -->
+ * This Stereotype is deprecated and should not be use anymore (let for legacy compatibility).
+ * 
+ * <!-- end-model-doc -->
+ *
  *
  * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getPort()
  * @model
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/ScalarVariable.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/ScalarVariable.java
index 8bbe30e..32f997d 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/ScalarVariable.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/ScalarVariable.java
@@ -50,7 +50,7 @@
 	 * @return the value of the '<em>Description</em>' attribute.
 	 * @see #setDescription(String)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getScalarVariable_Description()
-	 * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
 	 * @generated
 	 */
 	String getDescription();
@@ -78,7 +78,7 @@
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.VariabilityKind
 	 * @see #setVariability(VariabilityKind)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getScalarVariable_Variability()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	VariabilityKind getVariability();
@@ -107,7 +107,7 @@
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.InitialKind
 	 * @see #setInitial(InitialKind)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getScalarVariable_Initial()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	InitialKind getInitial();
@@ -135,7 +135,7 @@
 	 * @return the value of the '<em>Value Reference</em>' attribute.
 	 * @see #setValueReference(long)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getScalarVariable_ValueReference()
-	 * @model default="-1" required="true" ordered="false"
+	 * @model default="-1" ordered="false"
 	 * @generated
 	 */
 	long getValueReference();
@@ -161,7 +161,7 @@
 	 * @return the value of the '<em>Fmi Variable</em>' reference.
 	 * @see #setFmiVariable(Fmi2ScalarVariable)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getScalarVariable_FmiVariable()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	Fmi2ScalarVariable getFmiVariable();
@@ -189,7 +189,7 @@
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.CausalityKind
 	 * @see #setCausalityKind(CausalityKind)
 	 * @see org.eclipse.papyrus.moka.fmi.fmiprofile.FMIProfilePackage#getScalarVariable_CausalityKind()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	CausalityKind getCausalityKind();
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/VariabilityKind.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/VariabilityKind.java
index 61b822c..a77a5eb 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/VariabilityKind.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/VariabilityKind.java
@@ -270,6 +270,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getValue() {
 	  return value;
 	}
@@ -279,6 +280,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getName() {
 	  return name;
 	}
@@ -288,6 +290,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getLiteral() {
 	  return literal;
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/VariabilityNamingConvention.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/VariabilityNamingConvention.java
index c06fb07..0a1ca7c 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/VariabilityNamingConvention.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/VariabilityNamingConvention.java
@@ -189,6 +189,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getValue() {
 	  return value;
 	}
@@ -198,6 +199,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getName() {
 	  return name;
 	}
@@ -207,6 +209,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getLiteral() {
 	  return literal;
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/AbstractVariableImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/AbstractVariableImpl.java
index ade654c..f336160 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/AbstractVariableImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/AbstractVariableImpl.java
@@ -73,6 +73,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Property getBase_Property() {
 		if (base_Property != null && base_Property.eIsProxy()) {
 			InternalEObject oldBase_Property = (InternalEObject)base_Property;
@@ -99,6 +100,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Property(Property newBase_Property) {
 		Property oldBase_Property = base_Property;
 		base_Property = newBase_Property;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/CS_FMUImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/CS_FMUImpl.java
index 1a5ad52..fff9965 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/CS_FMUImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/CS_FMUImpl.java
@@ -227,6 +227,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isCanHandleVariableCommunicationStepSize() {
 		return canHandleVariableCommunicationStepSize;
 	}
@@ -236,6 +237,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setCanHandleVariableCommunicationStepSize(boolean newCanHandleVariableCommunicationStepSize) {
 		boolean oldCanHandleVariableCommunicationStepSize = canHandleVariableCommunicationStepSize;
 		canHandleVariableCommunicationStepSize = newCanHandleVariableCommunicationStepSize;
@@ -248,6 +250,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isCanInterpolateInputs() {
 		return canInterpolateInputs;
 	}
@@ -257,6 +260,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setCanInterpolateInputs(boolean newCanInterpolateInputs) {
 		boolean oldCanInterpolateInputs = canInterpolateInputs;
 		canInterpolateInputs = newCanInterpolateInputs;
@@ -269,6 +273,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isCanRunAsynchronuously() {
 		return canRunAsynchronuously;
 	}
@@ -278,6 +283,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setCanRunAsynchronuously(boolean newCanRunAsynchronuously) {
 		boolean oldCanRunAsynchronuously = canRunAsynchronuously;
 		canRunAsynchronuously = newCanRunAsynchronuously;
@@ -290,6 +296,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getMaxOutputDerivativeOrder() {
 		return maxOutputDerivativeOrder;
 	}
@@ -299,6 +306,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setMaxOutputDerivativeOrder(int newMaxOutputDerivativeOrder) {
 		int oldMaxOutputDerivativeOrder = maxOutputDerivativeOrder;
 		maxOutputDerivativeOrder = newMaxOutputDerivativeOrder;
@@ -311,6 +319,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getStartTime() {
 		return startTime;
 	}
@@ -320,6 +329,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setStartTime(double newStartTime) {
 		double oldStartTime = startTime;
 		startTime = newStartTime;
@@ -332,6 +342,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getStopTime() {
 		return stopTime;
 	}
@@ -341,6 +352,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setStopTime(double newStopTime) {
 		double oldStopTime = stopTime;
 		stopTime = newStopTime;
@@ -353,6 +365,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getStepSize() {
 		return stepSize;
 	}
@@ -362,6 +375,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setStepSize(double newStepSize) {
 		double oldStepSize = stepSize;
 		stepSize = newStepSize;
@@ -374,6 +388,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getTolerance() {
 		return tolerance;
 	}
@@ -383,6 +398,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setTolerance(double newTolerance) {
 		double oldTolerance = tolerance;
 		tolerance = newTolerance;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/CS_GraphImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/CS_GraphImpl.java
index aa3167c..3963116 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/CS_GraphImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/CS_GraphImpl.java
@@ -219,6 +219,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getStartTime() {
 		return startTime;
 	}
@@ -228,6 +229,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setStartTime(double newStartTime) {
 		double oldStartTime = startTime;
 		startTime = newStartTime;
@@ -240,6 +242,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getStopTime() {
 		return stopTime;
 	}
@@ -249,6 +252,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setStopTime(double newStopTime) {
 		double oldStopTime = stopTime;
 		stopTime = newStopTime;
@@ -261,6 +265,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getStepSize() {
 		return stepSize;
 	}
@@ -270,6 +275,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setStepSize(double newStepSize) {
 		double oldStepSize = stepSize;
 		stepSize = newStepSize;
@@ -282,6 +288,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getTolerance() {
 		return tolerance;
 	}
@@ -291,6 +298,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setTolerance(double newTolerance) {
 		double oldTolerance = tolerance;
 		tolerance = newTolerance;
@@ -303,6 +311,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isToleranceDefined() {
 		return toleranceDefined;
 	}
@@ -312,6 +321,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setToleranceDefined(boolean newToleranceDefined) {
 		boolean oldToleranceDefined = toleranceDefined;
 		toleranceDefined = newToleranceDefined;
@@ -324,6 +334,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isStopTimeDefined() {
 		return stopTimeDefined;
 	}
@@ -333,6 +344,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setStopTimeDefined(boolean newStopTimeDefined) {
 		boolean oldStopTimeDefined = stopTimeDefined;
 		stopTimeDefined = newStopTimeDefined;
@@ -345,6 +357,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isComputeSetupExperimentsFromFmus() {
 		return computeSetupExperimentsFromFmus;
 	}
@@ -354,6 +367,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setComputeSetupExperimentsFromFmus(boolean newComputeSetupExperimentsFromFmus) {
 		boolean oldComputeSetupExperimentsFromFmus = computeSetupExperimentsFromFmus;
 		computeSetupExperimentsFromFmus = newComputeSetupExperimentsFromFmus;
@@ -366,6 +380,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public org.eclipse.uml2.uml.Class getBase_Class() {
 		if (base_Class != null && base_Class.eIsProxy()) {
 			InternalEObject oldBase_Class = (InternalEObject)base_Class;
@@ -392,6 +407,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
 		org.eclipse.uml2.uml.Class oldBase_Class = base_Class;
 		base_Class = newBase_Class;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/DerivativeDependencyImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/DerivativeDependencyImpl.java
index 97c89c5..22deb39 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/DerivativeDependencyImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/DerivativeDependencyImpl.java
@@ -96,6 +96,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Dependency getBase_Dependency() {
 		if (base_Dependency != null && base_Dependency.eIsProxy()) {
 			InternalEObject oldBase_Dependency = (InternalEObject)base_Dependency;
@@ -122,6 +123,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Dependency(Dependency newBase_Dependency) {
 		Dependency oldBase_Dependency = base_Dependency;
 		base_Dependency = newBase_Dependency;
@@ -134,6 +136,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public DependenciesKind getDependencyKind() {
 		return dependencyKind;
 	}
@@ -143,6 +146,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setDependencyKind(DependenciesKind newDependencyKind) {
 		DependenciesKind oldDependencyKind = dependencyKind;
 		dependencyKind = newDependencyKind == null ? DEPENDENCY_KIND_EDEFAULT : newDependencyKind;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIPortImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIPortImpl.java
index 2a21998..2f45f45 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIPortImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIPortImpl.java
@@ -115,6 +115,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Port getBase_Port() {
 		if (base_Port != null && base_Port.eIsProxy()) {
 			InternalEObject oldBase_Port = (InternalEObject)base_Port;
@@ -141,6 +142,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Port(Port newBase_Port) {
 		Port oldBase_Port = base_Port;
 		base_Port = newBase_Port;
@@ -153,6 +155,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public FlowDirection getDirection() {
 		return direction;
 	}
@@ -162,6 +165,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setDirection(FlowDirection newDirection) {
 		FlowDirection oldDirection = direction;
 		direction = newDirection == null ? DIRECTION_EDEFAULT : newDirection;
@@ -174,6 +178,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isAtomic() {
 		// TODO: implement this method to return the 'Is Atomic' attribute
 		// Ensure that you remove @generated or mark it @generated NOT
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIProfileFactoryImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIProfileFactoryImpl.java
index e70c3d7..33d006f 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIProfileFactoryImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIProfileFactoryImpl.java
@@ -68,12 +68,13 @@
 	@Override
 	public EObject create(EClass eClass) {
 		switch (eClass.getClassifierID()) {
+			case FMIProfilePackage.PORT: return createPort();
+			case FMIProfilePackage.FMI_PORT: return createFMIPort();
 			case FMIProfilePackage.FMU: return createFMU();
 			case FMIProfilePackage.PARAMETER: return createParameter();
 			case FMIProfilePackage.LOCAL: return createLocal();
 			case FMIProfilePackage.CS_FMU: return createCS_FMU();
 			case FMIProfilePackage.ME_FMU: return createME_FMU();
-			case FMIProfilePackage.FMI_PORT: return createFMIPort();
 			case FMIProfilePackage.INDEPENDENT: return createIndependent();
 			case FMIProfilePackage.UNKNOWN: return createUnknown();
 			case FMIProfilePackage.OUTPUT_UNKNOWN: return createOutputUnknown();
@@ -84,7 +85,6 @@
 			case FMIProfilePackage.OUTPUT_DEPENDENCY: return createOutputDependency();
 			case FMIProfilePackage.INITIAL_UNKNOWN_DEPENDENCY: return createInitialUnknownDependency();
 			case FMIProfilePackage.CALCULATED_PARAMETER: return createCalculatedParameter();
-			case FMIProfilePackage.PORT: return createPort();
 			default:
 				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
 		}
@@ -145,6 +145,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public FMU createFMU() {
 		FMUImpl fmu = new FMUImpl();
 		return fmu;
@@ -155,6 +156,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Parameter createParameter() {
 		ParameterImpl parameter = new ParameterImpl();
 		return parameter;
@@ -165,6 +167,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Local createLocal() {
 		LocalImpl local = new LocalImpl();
 		return local;
@@ -175,6 +178,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public CS_FMU createCS_FMU() {
 		CS_FMUImpl cS_FMU = new CS_FMUImpl();
 		return cS_FMU;
@@ -185,6 +189,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public ME_FMU createME_FMU() {
 		ME_FMUImpl mE_FMU = new ME_FMUImpl();
 		return mE_FMU;
@@ -195,6 +200,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public FMIPort createFMIPort() {
 		FMIPortImpl fmiPort = new FMIPortImpl();
 		return fmiPort;
@@ -205,6 +211,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Independent createIndependent() {
 		IndependentImpl independent = new IndependentImpl();
 		return independent;
@@ -215,6 +222,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Unknown createUnknown() {
 		UnknownImpl unknown = new UnknownImpl();
 		return unknown;
@@ -225,6 +233,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public OutputUnknown createOutputUnknown() {
 		OutputUnknownImpl outputUnknown = new OutputUnknownImpl();
 		return outputUnknown;
@@ -235,6 +244,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public InitialUnknown createInitialUnknown() {
 		InitialUnknownImpl initialUnknown = new InitialUnknownImpl();
 		return initialUnknown;
@@ -245,6 +255,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public DerivativeUnknown createDerivativeUnknown() {
 		DerivativeUnknownImpl derivativeUnknown = new DerivativeUnknownImpl();
 		return derivativeUnknown;
@@ -255,6 +266,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public CS_Graph createCS_Graph() {
 		CS_GraphImpl cS_Graph = new CS_GraphImpl();
 		return cS_Graph;
@@ -265,6 +277,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public DerivativeDependency createDerivativeDependency() {
 		DerivativeDependencyImpl derivativeDependency = new DerivativeDependencyImpl();
 		return derivativeDependency;
@@ -275,6 +288,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public OutputDependency createOutputDependency() {
 		OutputDependencyImpl outputDependency = new OutputDependencyImpl();
 		return outputDependency;
@@ -285,6 +299,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public InitialUnknownDependency createInitialUnknownDependency() {
 		InitialUnknownDependencyImpl initialUnknownDependency = new InitialUnknownDependencyImpl();
 		return initialUnknownDependency;
@@ -295,6 +310,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public CalculatedParameter createCalculatedParameter() {
 		CalculatedParameterImpl calculatedParameter = new CalculatedParameterImpl();
 		return calculatedParameter;
@@ -305,6 +321,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Port createPort() {
 		PortImpl port = new PortImpl();
 		return port;
@@ -435,6 +452,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public FMIProfilePackage getFMIProfilePackage() {
 		return (FMIProfilePackage)getEPackage();
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIProfilePackageImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIProfilePackageImpl.java
index eeba0bb..6ce0698 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIProfilePackageImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMIProfilePackageImpl.java
@@ -318,6 +318,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getFMU() {
 		return fmuEClass;
 	}
@@ -327,6 +328,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_FmiVersion() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(0);
 	}
@@ -336,6 +338,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_ModelName() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(1);
 	}
@@ -345,6 +348,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_Guid() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(2);
 	}
@@ -354,6 +358,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_Description() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(3);
 	}
@@ -363,6 +368,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_Author() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(4);
 	}
@@ -372,6 +378,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_Version() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(5);
 	}
@@ -381,6 +388,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_Copyright() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(6);
 	}
@@ -390,6 +398,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_License() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(7);
 	}
@@ -399,6 +408,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_GenerationTool() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(8);
 	}
@@ -408,6 +418,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_GenerationDateAndTime() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(9);
 	}
@@ -417,6 +428,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_VariableNamingConvention() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(10);
 	}
@@ -426,6 +438,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_NumberOfEventIndicators() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(11);
 	}
@@ -435,6 +448,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getFMU_Base_Class() {
 		return (EReference)fmuEClass.getEStructuralFeatures().get(12);
 	}
@@ -444,6 +458,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_SourceFiles() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(13);
 	}
@@ -453,6 +468,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_CanBeInstantiatedOnlyOncePerProcess() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(14);
 	}
@@ -462,6 +478,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_CanGetAndSetFMUstate() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(15);
 	}
@@ -471,6 +488,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_CanNotUseMemoryManagementFunctions() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(16);
 	}
@@ -480,6 +498,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_CanSerializeFMUstate() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(17);
 	}
@@ -489,6 +508,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_ProvidesDirectionalDerivative() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(18);
 	}
@@ -498,6 +518,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_NeedsExecutionTool() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(19);
 	}
@@ -507,6 +528,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getFMU_ModelIdentifier() {
 		return (EAttribute)fmuEClass.getEStructuralFeatures().get(20);
 	}
@@ -516,6 +538,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getFMU_ModelDescription() {
 		return (EReference)fmuEClass.getEStructuralFeatures().get(21);
 	}
@@ -525,6 +548,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getFMU_FmuBundle() {
 		return (EReference)fmuEClass.getEStructuralFeatures().get(22);
 	}
@@ -534,6 +558,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getParameter() {
 		return parameterEClass;
 	}
@@ -543,6 +568,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getAbstractVariable() {
 		return abstractVariableEClass;
 	}
@@ -552,6 +578,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getAbstractVariable_Base_Property() {
 		return (EReference)abstractVariableEClass.getEStructuralFeatures().get(0);
 	}
@@ -561,6 +588,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getScalarVariable() {
 		return scalarVariableEClass;
 	}
@@ -570,6 +598,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getScalarVariable_Description() {
 		return (EAttribute)scalarVariableEClass.getEStructuralFeatures().get(0);
 	}
@@ -579,6 +608,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getScalarVariable_Variability() {
 		return (EAttribute)scalarVariableEClass.getEStructuralFeatures().get(1);
 	}
@@ -588,6 +618,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getScalarVariable_Initial() {
 		return (EAttribute)scalarVariableEClass.getEStructuralFeatures().get(2);
 	}
@@ -597,6 +628,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getScalarVariable_ValueReference() {
 		return (EAttribute)scalarVariableEClass.getEStructuralFeatures().get(3);
 	}
@@ -606,6 +638,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getScalarVariable_FmiVariable() {
 		return (EReference)scalarVariableEClass.getEStructuralFeatures().get(4);
 	}
@@ -615,6 +648,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getScalarVariable_CausalityKind() {
 		return (EAttribute)scalarVariableEClass.getEStructuralFeatures().get(5);
 	}
@@ -624,6 +658,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getLocal() {
 		return localEClass;
 	}
@@ -633,6 +668,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getCS_FMU() {
 		return cS_FMUEClass;
 	}
@@ -642,6 +678,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_FMU_CanHandleVariableCommunicationStepSize() {
 		return (EAttribute)cS_FMUEClass.getEStructuralFeatures().get(0);
 	}
@@ -651,6 +688,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_FMU_CanInterpolateInputs() {
 		return (EAttribute)cS_FMUEClass.getEStructuralFeatures().get(1);
 	}
@@ -660,6 +698,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_FMU_CanRunAsynchronuously() {
 		return (EAttribute)cS_FMUEClass.getEStructuralFeatures().get(2);
 	}
@@ -669,6 +708,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_FMU_MaxOutputDerivativeOrder() {
 		return (EAttribute)cS_FMUEClass.getEStructuralFeatures().get(3);
 	}
@@ -678,6 +718,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_FMU_StartTime() {
 		return (EAttribute)cS_FMUEClass.getEStructuralFeatures().get(4);
 	}
@@ -687,6 +728,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_FMU_StopTime() {
 		return (EAttribute)cS_FMUEClass.getEStructuralFeatures().get(5);
 	}
@@ -696,6 +738,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_FMU_StepSize() {
 		return (EAttribute)cS_FMUEClass.getEStructuralFeatures().get(6);
 	}
@@ -705,6 +748,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_FMU_Tolerance() {
 		return (EAttribute)cS_FMUEClass.getEStructuralFeatures().get(7);
 	}
@@ -714,6 +758,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getME_FMU() {
 		return mE_FMUEClass;
 	}
@@ -723,6 +768,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getME_FMU_CompletedIntegratorStepNotNeeded() {
 		return (EAttribute)mE_FMUEClass.getEStructuralFeatures().get(0);
 	}
@@ -732,6 +778,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getFMIPort() {
 		return fmiPortEClass;
 	}
@@ -741,6 +788,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getIndependent() {
 		return independentEClass;
 	}
@@ -750,6 +798,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getUnknown() {
 		return unknownEClass;
 	}
@@ -759,6 +808,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getUnknown_Base_Property() {
 		return (EReference)unknownEClass.getEStructuralFeatures().get(0);
 	}
@@ -768,6 +818,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getUnknown_Dependencies() {
 		return (EAttribute)unknownEClass.getEStructuralFeatures().get(1);
 	}
@@ -777,6 +828,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getUnknown_DependenciesKind() {
 		return (EAttribute)unknownEClass.getEStructuralFeatures().get(2);
 	}
@@ -786,6 +838,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getOutputUnknown() {
 		return outputUnknownEClass;
 	}
@@ -795,6 +848,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getInitialUnknown() {
 		return initialUnknownEClass;
 	}
@@ -804,6 +858,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getDerivativeUnknown() {
 		return derivativeUnknownEClass;
 	}
@@ -813,6 +868,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getCS_Graph() {
 		return cS_GraphEClass;
 	}
@@ -822,6 +878,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_Graph_StartTime() {
 		return (EAttribute)cS_GraphEClass.getEStructuralFeatures().get(0);
 	}
@@ -831,6 +888,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_Graph_StopTime() {
 		return (EAttribute)cS_GraphEClass.getEStructuralFeatures().get(1);
 	}
@@ -840,6 +898,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_Graph_StepSize() {
 		return (EAttribute)cS_GraphEClass.getEStructuralFeatures().get(2);
 	}
@@ -849,6 +908,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_Graph_Tolerance() {
 		return (EAttribute)cS_GraphEClass.getEStructuralFeatures().get(3);
 	}
@@ -858,6 +918,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_Graph_ToleranceDefined() {
 		return (EAttribute)cS_GraphEClass.getEStructuralFeatures().get(4);
 	}
@@ -867,6 +928,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_Graph_StopTimeDefined() {
 		return (EAttribute)cS_GraphEClass.getEStructuralFeatures().get(5);
 	}
@@ -876,6 +938,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getCS_Graph_ComputeSetupExperimentsFromFmus() {
 		return (EAttribute)cS_GraphEClass.getEStructuralFeatures().get(6);
 	}
@@ -885,6 +948,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getCS_Graph_Base_Class() {
 		return (EReference)cS_GraphEClass.getEStructuralFeatures().get(7);
 	}
@@ -894,6 +958,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getDerivativeDependency() {
 		return derivativeDependencyEClass;
 	}
@@ -903,6 +968,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getDerivativeDependency_Base_Dependency() {
 		return (EReference)derivativeDependencyEClass.getEStructuralFeatures().get(0);
 	}
@@ -912,6 +978,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getDerivativeDependency_DependencyKind() {
 		return (EAttribute)derivativeDependencyEClass.getEStructuralFeatures().get(1);
 	}
@@ -921,6 +988,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getOutputDependency() {
 		return outputDependencyEClass;
 	}
@@ -930,6 +998,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getOutputDependency_Base_Dependency() {
 		return (EReference)outputDependencyEClass.getEStructuralFeatures().get(0);
 	}
@@ -939,6 +1008,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getInitialUnknownDependency() {
 		return initialUnknownDependencyEClass;
 	}
@@ -948,6 +1018,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getInitialUnknownDependency_Base_Dependency() {
 		return (EReference)initialUnknownDependencyEClass.getEStructuralFeatures().get(0);
 	}
@@ -957,6 +1028,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getCalculatedParameter() {
 		return calculatedParameterEClass;
 	}
@@ -966,6 +1038,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getPort() {
 		return portEClass;
 	}
@@ -975,6 +1048,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EEnum getVariabilityKind() {
 		return variabilityKindEEnum;
 	}
@@ -984,6 +1058,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EEnum getInitialKind() {
 		return initialKindEEnum;
 	}
@@ -993,6 +1068,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EEnum getCausalityKind() {
 		return causalityKindEEnum;
 	}
@@ -1002,6 +1078,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EEnum getDependenciesKind() {
 		return dependenciesKindEEnum;
 	}
@@ -1011,6 +1088,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EEnum getVariabilityNamingConvention() {
 		return variabilityNamingConventionEEnum;
 	}
@@ -1020,6 +1098,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EEnum getBaseUnit() {
 		return baseUnitEEnum;
 	}
@@ -1029,6 +1108,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public FMIProfileFactory getFMIProfileFactory() {
 		return (FMIProfileFactory)getEFactoryInstance();
 	}
@@ -1052,6 +1132,18 @@
 		isCreated = true;
 
 		// Create classes and their features
+		portEClass = createEClass(PORT);
+
+		fmiPortEClass = createEClass(FMI_PORT);
+
+		scalarVariableEClass = createEClass(SCALAR_VARIABLE);
+		createEAttribute(scalarVariableEClass, SCALAR_VARIABLE__DESCRIPTION);
+		createEAttribute(scalarVariableEClass, SCALAR_VARIABLE__VARIABILITY);
+		createEAttribute(scalarVariableEClass, SCALAR_VARIABLE__INITIAL);
+		createEAttribute(scalarVariableEClass, SCALAR_VARIABLE__VALUE_REFERENCE);
+		createEReference(scalarVariableEClass, SCALAR_VARIABLE__FMI_VARIABLE);
+		createEAttribute(scalarVariableEClass, SCALAR_VARIABLE__CAUSALITY_KIND);
+
 		fmuEClass = createEClass(FMU);
 		createEAttribute(fmuEClass, FMU__FMI_VERSION);
 		createEAttribute(fmuEClass, FMU__MODEL_NAME);
@@ -1082,14 +1174,6 @@
 		abstractVariableEClass = createEClass(ABSTRACT_VARIABLE);
 		createEReference(abstractVariableEClass, ABSTRACT_VARIABLE__BASE_PROPERTY);
 
-		scalarVariableEClass = createEClass(SCALAR_VARIABLE);
-		createEAttribute(scalarVariableEClass, SCALAR_VARIABLE__DESCRIPTION);
-		createEAttribute(scalarVariableEClass, SCALAR_VARIABLE__VARIABILITY);
-		createEAttribute(scalarVariableEClass, SCALAR_VARIABLE__INITIAL);
-		createEAttribute(scalarVariableEClass, SCALAR_VARIABLE__VALUE_REFERENCE);
-		createEReference(scalarVariableEClass, SCALAR_VARIABLE__FMI_VARIABLE);
-		createEAttribute(scalarVariableEClass, SCALAR_VARIABLE__CAUSALITY_KIND);
-
 		localEClass = createEClass(LOCAL);
 
 		cS_FMUEClass = createEClass(CS_FMU);
@@ -1105,8 +1189,6 @@
 		mE_FMUEClass = createEClass(ME_FMU);
 		createEAttribute(mE_FMUEClass, ME_FMU__COMPLETED_INTEGRATOR_STEP_NOT_NEEDED);
 
-		fmiPortEClass = createEClass(FMI_PORT);
-
 		independentEClass = createEClass(INDEPENDENT);
 
 		unknownEClass = createEClass(UNKNOWN);
@@ -1142,8 +1224,6 @@
 
 		calculatedParameterEClass = createEClass(CALCULATED_PARAMETER);
 
-		portEClass = createEClass(PORT);
-
 		// Create enums
 		variabilityKindEEnum = createEEnum(VARIABILITY_KIND);
 		initialKindEEnum = createEEnum(INITIAL_KIND);
@@ -1177,54 +1257,66 @@
 		setNsURI(eNS_URI);
 
 		// Obtain other dependent packages
-		TypesPackage theTypesPackage = (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);
-		UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
-		FmiPackage theFmiPackage = (FmiPackage)EPackage.Registry.INSTANCE.getEPackage(FmiPackage.eNS_URI);
-		FmumetamodelPackage theFmumetamodelPackage = (FmumetamodelPackage)EPackage.Registry.INSTANCE.getEPackage(FmumetamodelPackage.eNS_URI);
 		DeprecatedelementsPackage theDeprecatedelementsPackage = (DeprecatedelementsPackage)EPackage.Registry.INSTANCE.getEPackage(DeprecatedelementsPackage.eNS_URI);
+		TypesPackage theTypesPackage = (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);
+		FmiPackage theFmiPackage = (FmiPackage)EPackage.Registry.INSTANCE.getEPackage(FmiPackage.eNS_URI);
+		UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
+		FmumetamodelPackage theFmumetamodelPackage = (FmumetamodelPackage)EPackage.Registry.INSTANCE.getEPackage(FmumetamodelPackage.eNS_URI);
 
 		// Create type parameters
 
 		// Set bounds for type parameters
 
 		// Add supertypes to classes
+		portEClass.getESuperTypes().add(this.getFMIPort());
+		fmiPortEClass.getESuperTypes().add(this.getScalarVariable());
+		fmiPortEClass.getESuperTypes().add(theDeprecatedelementsPackage.getFlowPort());
 		parameterEClass.getESuperTypes().add(this.getAbstractVariable());
 		abstractVariableEClass.getESuperTypes().add(this.getScalarVariable());
 		localEClass.getESuperTypes().add(this.getAbstractVariable());
 		cS_FMUEClass.getESuperTypes().add(this.getFMU());
 		mE_FMUEClass.getESuperTypes().add(this.getFMU());
-		fmiPortEClass.getESuperTypes().add(this.getScalarVariable());
-		fmiPortEClass.getESuperTypes().add(theDeprecatedelementsPackage.getFlowPort());
 		independentEClass.getESuperTypes().add(this.getAbstractVariable());
 		outputUnknownEClass.getESuperTypes().add(this.getUnknown());
 		initialUnknownEClass.getESuperTypes().add(this.getUnknown());
 		derivativeUnknownEClass.getESuperTypes().add(this.getUnknown());
 		calculatedParameterEClass.getESuperTypes().add(this.getAbstractVariable());
-		portEClass.getESuperTypes().add(this.getFMIPort());
 
 		// Initialize classes, features, and operations; add parameters
+		initEClass(portEClass, Port.class, "Port", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(fmiPortEClass, FMIPort.class, "FMIPort", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(scalarVariableEClass, ScalarVariable.class, "ScalarVariable", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getScalarVariable_Description(), theTypesPackage.getString(), "description", null, 0, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getScalarVariable_Variability(), this.getVariabilityKind(), "variability", null, 0, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getScalarVariable_Initial(), this.getInitialKind(), "initial", null, 0, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getScalarVariable_ValueReference(), ecorePackage.getELong(), "valueReference", "-1", 0, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getScalarVariable_FmiVariable(), theFmiPackage.getFmi2ScalarVariable(), null, "fmiVariable", null, 0, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getScalarVariable_CausalityKind(), this.getCausalityKind(), "causalityKind", null, 0, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
 		initEClass(fmuEClass, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, "FMU", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getFMU_FmiVersion(), theTypesPackage.getString(), "fmiVersion", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_ModelName(), theTypesPackage.getString(), "modelName", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_Guid(), theTypesPackage.getString(), "guid", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_Description(), theTypesPackage.getString(), "description", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_Author(), theTypesPackage.getString(), "author", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_Version(), theTypesPackage.getString(), "version", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_Copyright(), theTypesPackage.getString(), "copyright", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_License(), theTypesPackage.getString(), "license", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_GenerationTool(), theTypesPackage.getString(), "generationTool", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_GenerationDateAndTime(), theTypesPackage.getString(), "generationDateAndTime", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_VariableNamingConvention(), theTypesPackage.getString(), "variableNamingConvention", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_NumberOfEventIndicators(), theTypesPackage.getInteger(), "numberOfEventIndicators", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_FmiVersion(), theTypesPackage.getString(), "fmiVersion", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_ModelName(), theTypesPackage.getString(), "modelName", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_Guid(), theTypesPackage.getString(), "guid", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_Description(), theTypesPackage.getString(), "description", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_Author(), theTypesPackage.getString(), "author", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_Version(), theTypesPackage.getString(), "version", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_Copyright(), theTypesPackage.getString(), "copyright", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_License(), theTypesPackage.getString(), "license", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_GenerationTool(), theTypesPackage.getString(), "generationTool", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_GenerationDateAndTime(), theTypesPackage.getString(), "generationDateAndTime", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_VariableNamingConvention(), theTypesPackage.getString(), "variableNamingConvention", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_NumberOfEventIndicators(), theTypesPackage.getInteger(), "numberOfEventIndicators", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 		initEReference(getFMU_Base_Class(), theUMLPackage.getClass_(), null, "base_Class", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_SourceFiles(), theTypesPackage.getString(), "sourceFiles", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_CanBeInstantiatedOnlyOncePerProcess(), theTypesPackage.getBoolean(), "canBeInstantiatedOnlyOncePerProcess", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_CanGetAndSetFMUstate(), theTypesPackage.getBoolean(), "canGetAndSetFMUstate", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_CanNotUseMemoryManagementFunctions(), theTypesPackage.getBoolean(), "canNotUseMemoryManagementFunctions", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_CanSerializeFMUstate(), theTypesPackage.getBoolean(), "canSerializeFMUstate", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_ProvidesDirectionalDerivative(), theTypesPackage.getBoolean(), "providesDirectionalDerivative", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_NeedsExecutionTool(), theTypesPackage.getBoolean(), "needsExecutionTool", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getFMU_ModelIdentifier(), theTypesPackage.getString(), "modelIdentifier", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_SourceFiles(), theTypesPackage.getString(), "sourceFiles", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_CanBeInstantiatedOnlyOncePerProcess(), theTypesPackage.getBoolean(), "canBeInstantiatedOnlyOncePerProcess", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_CanGetAndSetFMUstate(), theTypesPackage.getBoolean(), "canGetAndSetFMUstate", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_CanNotUseMemoryManagementFunctions(), theTypesPackage.getBoolean(), "canNotUseMemoryManagementFunctions", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_CanSerializeFMUstate(), theTypesPackage.getBoolean(), "canSerializeFMUstate", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_ProvidesDirectionalDerivative(), theTypesPackage.getBoolean(), "providesDirectionalDerivative", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_NeedsExecutionTool(), theTypesPackage.getBoolean(), "needsExecutionTool", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getFMU_ModelIdentifier(), theTypesPackage.getString(), "modelIdentifier", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 		initEReference(getFMU_ModelDescription(), theFmiPackage.getFmiModelDescriptionType(), null, "modelDescription", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED);
 		initEReference(getFMU_FmuBundle(), theFmumetamodelPackage.getFMUBundle(), null, "fmuBundle", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
@@ -1233,31 +1325,21 @@
 		initEClass(abstractVariableEClass, AbstractVariable.class, "AbstractVariable", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getAbstractVariable_Base_Property(), theUMLPackage.getProperty(), null, "base_Property", null, 1, 1, AbstractVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
-		initEClass(scalarVariableEClass, ScalarVariable.class, "ScalarVariable", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getScalarVariable_Description(), theTypesPackage.getString(), "description", null, 1, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getScalarVariable_Variability(), this.getVariabilityKind(), "variability", null, 1, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getScalarVariable_Initial(), this.getInitialKind(), "initial", null, 1, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getScalarVariable_ValueReference(), ecorePackage.getELong(), "valueReference", "-1", 1, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEReference(getScalarVariable_FmiVariable(), theFmiPackage.getFmi2ScalarVariable(), null, "fmiVariable", null, 1, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getScalarVariable_CausalityKind(), this.getCausalityKind(), "causalityKind", null, 1, 1, ScalarVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-
 		initEClass(localEClass, Local.class, "Local", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
 		initEClass(cS_FMUEClass, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, "CS_FMU", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getCS_FMU_CanHandleVariableCommunicationStepSize(), theTypesPackage.getBoolean(), "canHandleVariableCommunicationStepSize", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getCS_FMU_CanInterpolateInputs(), theTypesPackage.getBoolean(), "canInterpolateInputs", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getCS_FMU_CanRunAsynchronuously(), theTypesPackage.getBoolean(), "canRunAsynchronuously", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getCS_FMU_MaxOutputDerivativeOrder(), theTypesPackage.getInteger(), "maxOutputDerivativeOrder", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getCS_FMU_StartTime(), theTypesPackage.getReal(), "startTime", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getCS_FMU_StopTime(), theTypesPackage.getReal(), "stopTime", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getCS_FMU_StepSize(), theTypesPackage.getReal(), "stepSize", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getCS_FMU_Tolerance(), theTypesPackage.getReal(), "tolerance", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getCS_FMU_CanHandleVariableCommunicationStepSize(), theTypesPackage.getBoolean(), "canHandleVariableCommunicationStepSize", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getCS_FMU_CanInterpolateInputs(), theTypesPackage.getBoolean(), "canInterpolateInputs", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getCS_FMU_CanRunAsynchronuously(), theTypesPackage.getBoolean(), "canRunAsynchronuously", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getCS_FMU_MaxOutputDerivativeOrder(), theTypesPackage.getInteger(), "maxOutputDerivativeOrder", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getCS_FMU_StartTime(), theTypesPackage.getReal(), "startTime", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getCS_FMU_StopTime(), theTypesPackage.getReal(), "stopTime", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getCS_FMU_StepSize(), theTypesPackage.getReal(), "stepSize", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getCS_FMU_Tolerance(), theTypesPackage.getReal(), "tolerance", null, 0, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
 		initEClass(mE_FMUEClass, org.eclipse.papyrus.moka.fmi.fmiprofile.ME_FMU.class, "ME_FMU", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getME_FMU_CompletedIntegratorStepNotNeeded(), theTypesPackage.getBoolean(), "completedIntegratorStepNotNeeded", null, 1, 1, org.eclipse.papyrus.moka.fmi.fmiprofile.ME_FMU.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
-		initEClass(fmiPortEClass, FMIPort.class, "FMIPort", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-
 		initEClass(independentEClass, Independent.class, "Independent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
 		initEClass(unknownEClass, Unknown.class, "Unknown", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -1293,8 +1375,6 @@
 
 		initEClass(calculatedParameterEClass, CalculatedParameter.class, "CalculatedParameter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
-		initEClass(portEClass, Port.class, "Port", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-
 		// Initialize enums and add enum literals
 		initEEnum(variabilityKindEEnum, VariabilityKind.class, "VariabilityKind");
 		addEEnumLiteral(variabilityKindEEnum, VariabilityKind.CONSTANT);
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMUImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMUImpl.java
index 3c33bab..67e29cf 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMUImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/FMUImpl.java
@@ -508,6 +508,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getFmiVersion() {
 		return fmiVersion;
 	}
@@ -517,6 +518,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setFmiVersion(String newFmiVersion) {
 		String oldFmiVersion = fmiVersion;
 		fmiVersion = newFmiVersion;
@@ -529,6 +531,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getModelName() {
 		return modelName;
 	}
@@ -538,6 +541,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setModelName(String newModelName) {
 		String oldModelName = modelName;
 		modelName = newModelName;
@@ -550,6 +554,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getGuid() {
 		return guid;
 	}
@@ -559,6 +564,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setGuid(String newGuid) {
 		String oldGuid = guid;
 		guid = newGuid;
@@ -571,6 +577,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getDescription() {
 		return description;
 	}
@@ -580,6 +587,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setDescription(String newDescription) {
 		String oldDescription = description;
 		description = newDescription;
@@ -592,6 +600,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getAuthor() {
 		return author;
 	}
@@ -601,6 +610,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setAuthor(String newAuthor) {
 		String oldAuthor = author;
 		author = newAuthor;
@@ -613,6 +623,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getVersion() {
 		return version;
 	}
@@ -622,6 +633,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setVersion(String newVersion) {
 		String oldVersion = version;
 		version = newVersion;
@@ -634,6 +646,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getCopyright() {
 		return copyright;
 	}
@@ -643,6 +656,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setCopyright(String newCopyright) {
 		String oldCopyright = copyright;
 		copyright = newCopyright;
@@ -655,6 +669,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getLicense() {
 		return license;
 	}
@@ -664,6 +679,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setLicense(String newLicense) {
 		String oldLicense = license;
 		license = newLicense;
@@ -676,6 +692,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getGenerationTool() {
 		return generationTool;
 	}
@@ -685,6 +702,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setGenerationTool(String newGenerationTool) {
 		String oldGenerationTool = generationTool;
 		generationTool = newGenerationTool;
@@ -697,6 +715,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getGenerationDateAndTime() {
 		return generationDateAndTime;
 	}
@@ -706,6 +725,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setGenerationDateAndTime(String newGenerationDateAndTime) {
 		String oldGenerationDateAndTime = generationDateAndTime;
 		generationDateAndTime = newGenerationDateAndTime;
@@ -718,6 +738,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getVariableNamingConvention() {
 		return variableNamingConvention;
 	}
@@ -727,6 +748,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setVariableNamingConvention(String newVariableNamingConvention) {
 		String oldVariableNamingConvention = variableNamingConvention;
 		variableNamingConvention = newVariableNamingConvention;
@@ -739,6 +761,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getNumberOfEventIndicators() {
 		return numberOfEventIndicators;
 	}
@@ -748,6 +771,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setNumberOfEventIndicators(int newNumberOfEventIndicators) {
 		int oldNumberOfEventIndicators = numberOfEventIndicators;
 		numberOfEventIndicators = newNumberOfEventIndicators;
@@ -760,6 +784,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public org.eclipse.uml2.uml.Class getBase_Class() {
 		if (base_Class != null && base_Class.eIsProxy()) {
 			InternalEObject oldBase_Class = (InternalEObject)base_Class;
@@ -786,6 +811,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
 		org.eclipse.uml2.uml.Class oldBase_Class = base_Class;
 		base_Class = newBase_Class;
@@ -798,6 +824,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getSourceFiles() {
 		return sourceFiles;
 	}
@@ -807,6 +834,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setSourceFiles(String newSourceFiles) {
 		String oldSourceFiles = sourceFiles;
 		sourceFiles = newSourceFiles;
@@ -819,6 +847,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isCanBeInstantiatedOnlyOncePerProcess() {
 		return canBeInstantiatedOnlyOncePerProcess;
 	}
@@ -828,6 +857,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setCanBeInstantiatedOnlyOncePerProcess(boolean newCanBeInstantiatedOnlyOncePerProcess) {
 		boolean oldCanBeInstantiatedOnlyOncePerProcess = canBeInstantiatedOnlyOncePerProcess;
 		canBeInstantiatedOnlyOncePerProcess = newCanBeInstantiatedOnlyOncePerProcess;
@@ -840,6 +870,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isCanGetAndSetFMUstate() {
 		return canGetAndSetFMUstate;
 	}
@@ -849,6 +880,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setCanGetAndSetFMUstate(boolean newCanGetAndSetFMUstate) {
 		boolean oldCanGetAndSetFMUstate = canGetAndSetFMUstate;
 		canGetAndSetFMUstate = newCanGetAndSetFMUstate;
@@ -861,6 +893,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isCanNotUseMemoryManagementFunctions() {
 		return canNotUseMemoryManagementFunctions;
 	}
@@ -870,6 +903,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setCanNotUseMemoryManagementFunctions(boolean newCanNotUseMemoryManagementFunctions) {
 		boolean oldCanNotUseMemoryManagementFunctions = canNotUseMemoryManagementFunctions;
 		canNotUseMemoryManagementFunctions = newCanNotUseMemoryManagementFunctions;
@@ -882,6 +916,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isCanSerializeFMUstate() {
 		return canSerializeFMUstate;
 	}
@@ -891,6 +926,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setCanSerializeFMUstate(boolean newCanSerializeFMUstate) {
 		boolean oldCanSerializeFMUstate = canSerializeFMUstate;
 		canSerializeFMUstate = newCanSerializeFMUstate;
@@ -903,6 +939,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isProvidesDirectionalDerivative() {
 		return providesDirectionalDerivative;
 	}
@@ -912,6 +949,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setProvidesDirectionalDerivative(boolean newProvidesDirectionalDerivative) {
 		boolean oldProvidesDirectionalDerivative = providesDirectionalDerivative;
 		providesDirectionalDerivative = newProvidesDirectionalDerivative;
@@ -924,6 +962,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isNeedsExecutionTool() {
 		return needsExecutionTool;
 	}
@@ -933,6 +972,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setNeedsExecutionTool(boolean newNeedsExecutionTool) {
 		boolean oldNeedsExecutionTool = needsExecutionTool;
 		needsExecutionTool = newNeedsExecutionTool;
@@ -945,6 +985,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getModelIdentifier() {
 		return modelIdentifier;
 	}
@@ -954,6 +995,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setModelIdentifier(String newModelIdentifier) {
 		String oldModelIdentifier = modelIdentifier;
 		modelIdentifier = newModelIdentifier;
@@ -966,6 +1008,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public FmiModelDescriptionType getModelDescription() {
 		FmiModelDescriptionType modelDescription = basicGetModelDescription();
 		return modelDescription != null && modelDescription.eIsProxy() ? (FmiModelDescriptionType)eResolveProxy((InternalEObject)modelDescription) : modelDescription;
@@ -988,6 +1031,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public FMUBundle getFmuBundle() {
 		if (fmuBundle != null && fmuBundle.eIsProxy()) {
 			InternalEObject oldFmuBundle = (InternalEObject)fmuBundle;
@@ -1014,6 +1058,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setFmuBundle(FMUBundle newFmuBundle) {
 		FMUBundle oldFmuBundle = fmuBundle;
 		fmuBundle = newFmuBundle;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/InitialUnknownDependencyImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/InitialUnknownDependencyImpl.java
index ea09109..88d3b7b 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/InitialUnknownDependencyImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/InitialUnknownDependencyImpl.java
@@ -74,6 +74,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Dependency getBase_Dependency() {
 		if (base_Dependency != null && base_Dependency.eIsProxy()) {
 			InternalEObject oldBase_Dependency = (InternalEObject)base_Dependency;
@@ -100,6 +101,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Dependency(Dependency newBase_Dependency) {
 		Dependency oldBase_Dependency = base_Dependency;
 		base_Dependency = newBase_Dependency;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/ME_FMUImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/ME_FMUImpl.java
index f6f174c..2062e27 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/ME_FMUImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/ME_FMUImpl.java
@@ -80,6 +80,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public boolean isCompletedIntegratorStepNotNeeded() {
 		return completedIntegratorStepNotNeeded;
 	}
@@ -89,6 +90,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setCompletedIntegratorStepNotNeeded(boolean newCompletedIntegratorStepNotNeeded) {
 		boolean oldCompletedIntegratorStepNotNeeded = completedIntegratorStepNotNeeded;
 		completedIntegratorStepNotNeeded = newCompletedIntegratorStepNotNeeded;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/OutputDependencyImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/OutputDependencyImpl.java
index b7f74bd..66c8d35 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/OutputDependencyImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/OutputDependencyImpl.java
@@ -74,6 +74,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Dependency getBase_Dependency() {
 		if (base_Dependency != null && base_Dependency.eIsProxy()) {
 			InternalEObject oldBase_Dependency = (InternalEObject)base_Dependency;
@@ -100,6 +101,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Dependency(Dependency newBase_Dependency) {
 		Dependency oldBase_Dependency = base_Dependency;
 		base_Dependency = newBase_Dependency;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/ScalarVariableImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/ScalarVariableImpl.java
index 1d57476..ad0f12a 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/ScalarVariableImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/ScalarVariableImpl.java
@@ -182,6 +182,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getDescription() {
 		return description;
 	}
@@ -191,6 +192,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setDescription(String newDescription) {
 		String oldDescription = description;
 		description = newDescription;
@@ -203,6 +205,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public VariabilityKind getVariability() {
 		return variability;
 	}
@@ -212,6 +215,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setVariability(VariabilityKind newVariability) {
 		VariabilityKind oldVariability = variability;
 		variability = newVariability == null ? VARIABILITY_EDEFAULT : newVariability;
@@ -224,6 +228,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public InitialKind getInitial() {
 		return initial;
 	}
@@ -233,6 +238,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setInitial(InitialKind newInitial) {
 		InitialKind oldInitial = initial;
 		initial = newInitial == null ? INITIAL_EDEFAULT : newInitial;
@@ -245,6 +251,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public long getValueReference() {
 		return valueReference;
 	}
@@ -254,6 +261,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setValueReference(long newValueReference) {
 		long oldValueReference = valueReference;
 		valueReference = newValueReference;
@@ -266,6 +274,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Fmi2ScalarVariable getFmiVariable() {
 		if (fmiVariable != null && fmiVariable.eIsProxy()) {
 			InternalEObject oldFmiVariable = (InternalEObject)fmiVariable;
@@ -292,6 +301,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setFmiVariable(Fmi2ScalarVariable newFmiVariable) {
 		Fmi2ScalarVariable oldFmiVariable = fmiVariable;
 		fmiVariable = newFmiVariable;
@@ -304,6 +314,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public CausalityKind getCausalityKind() {
 		return causalityKind;
 	}
@@ -313,6 +324,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setCausalityKind(CausalityKind newCausalityKind) {
 		CausalityKind oldCausalityKind = causalityKind;
 		causalityKind = newCausalityKind == null ? CAUSALITY_KIND_EDEFAULT : newCausalityKind;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/UnknownImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/UnknownImpl.java
index a4ab462..93d59cf 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/UnknownImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/impl/UnknownImpl.java
@@ -116,6 +116,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Property getBase_Property() {
 		if (base_Property != null && base_Property.eIsProxy()) {
 			InternalEObject oldBase_Property = (InternalEObject)base_Property;
@@ -142,6 +143,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Property(Property newBase_Property) {
 		Property oldBase_Property = base_Property;
 		base_Property = newBase_Property;
@@ -154,6 +156,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getDependencies() {
 		return dependencies;
 	}
@@ -163,6 +166,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setDependencies(String newDependencies) {
 		String oldDependencies = dependencies;
 		dependencies = newDependencies;
@@ -175,6 +179,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getDependenciesKind() {
 		return dependenciesKind;
 	}
@@ -184,6 +189,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setDependenciesKind(String newDependenciesKind) {
 		String oldDependenciesKind = dependenciesKind;
 		dependenciesKind = newDependenciesKind;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/util/FMIProfileAdapterFactory.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/util/FMIProfileAdapterFactory.java
index bc10705..e7897b3 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/util/FMIProfileAdapterFactory.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/util/FMIProfileAdapterFactory.java
@@ -81,6 +81,18 @@
 	protected FMIProfileSwitch<Adapter> modelSwitch =
 		new FMIProfileSwitch<Adapter>() {
 			@Override
+			public Adapter casePort(Port object) {
+				return createPortAdapter();
+			}
+			@Override
+			public Adapter caseFMIPort(FMIPort object) {
+				return createFMIPortAdapter();
+			}
+			@Override
+			public Adapter caseScalarVariable(ScalarVariable object) {
+				return createScalarVariableAdapter();
+			}
+			@Override
 			public Adapter caseFMU(FMU object) {
 				return createFMUAdapter();
 			}
@@ -93,10 +105,6 @@
 				return createAbstractVariableAdapter();
 			}
 			@Override
-			public Adapter caseScalarVariable(ScalarVariable object) {
-				return createScalarVariableAdapter();
-			}
-			@Override
 			public Adapter caseLocal(Local object) {
 				return createLocalAdapter();
 			}
@@ -109,10 +117,6 @@
 				return createME_FMUAdapter();
 			}
 			@Override
-			public Adapter caseFMIPort(FMIPort object) {
-				return createFMIPortAdapter();
-			}
-			@Override
 			public Adapter caseIndependent(Independent object) {
 				return createIndependentAdapter();
 			}
@@ -153,10 +157,6 @@
 				return createCalculatedParameterAdapter();
 			}
 			@Override
-			public Adapter casePort(Port object) {
-				return createPortAdapter();
-			}
-			@Override
 			public Adapter caseFlowPort(FlowPort object) {
 				return createFlowPortAdapter();
 			}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/util/FMIProfileSwitch.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/util/FMIProfileSwitch.java
index 2d4577f..55d270f 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/util/FMIProfileSwitch.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src-gen/org/eclipse/papyrus/moka/fmi/fmiprofile/util/FMIProfileSwitch.java
@@ -79,6 +79,29 @@
 	@Override
 	protected T doSwitch(int classifierID, EObject theEObject) {
 		switch (classifierID) {
+			case FMIProfilePackage.PORT: {
+				Port port = (Port)theEObject;
+				T result = casePort(port);
+				if (result == null) result = caseFMIPort(port);
+				if (result == null) result = caseScalarVariable(port);
+				if (result == null) result = caseFlowPort(port);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case FMIProfilePackage.FMI_PORT: {
+				FMIPort fmiPort = (FMIPort)theEObject;
+				T result = caseFMIPort(fmiPort);
+				if (result == null) result = caseScalarVariable(fmiPort);
+				if (result == null) result = caseFlowPort(fmiPort);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case FMIProfilePackage.SCALAR_VARIABLE: {
+				ScalarVariable scalarVariable = (ScalarVariable)theEObject;
+				T result = caseScalarVariable(scalarVariable);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case FMIProfilePackage.FMU: {
 				FMU fmu = (FMU)theEObject;
 				T result = caseFMU(fmu);
@@ -100,12 +123,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case FMIProfilePackage.SCALAR_VARIABLE: {
-				ScalarVariable scalarVariable = (ScalarVariable)theEObject;
-				T result = caseScalarVariable(scalarVariable);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case FMIProfilePackage.LOCAL: {
 				Local local = (Local)theEObject;
 				T result = caseLocal(local);
@@ -128,14 +145,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case FMIProfilePackage.FMI_PORT: {
-				FMIPort fmiPort = (FMIPort)theEObject;
-				T result = caseFMIPort(fmiPort);
-				if (result == null) result = caseScalarVariable(fmiPort);
-				if (result == null) result = caseFlowPort(fmiPort);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case FMIProfilePackage.INDEPENDENT: {
 				Independent independent = (Independent)theEObject;
 				T result = caseIndependent(independent);
@@ -203,15 +212,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case FMIProfilePackage.PORT: {
-				Port port = (Port)theEObject;
-				T result = casePort(port);
-				if (result == null) result = caseFMIPort(port);
-				if (result == null) result = caseScalarVariable(port);
-				if (result == null) result = caseFlowPort(port);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			default: return defaultCase(theEObject);
 		}
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src/org/eclipse/papyrus/moka/fmi/profile/util/FMIProfileUtil.java b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src/org/eclipse/papyrus/moka/fmi/profile/util/FMIProfileUtil.java
index 9e9a70b..68b55eb 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src/org/eclipse/papyrus/moka/fmi/profile/util/FMIProfileUtil.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.fmi.profile/src/org/eclipse/papyrus/moka/fmi/profile/util/FMIProfileUtil.java
@@ -205,4 +205,6 @@
 		return result;
 	}
 
+	
+
 }
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/META-INF/MANIFEST.MF b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/META-INF/MANIFEST.MF
index 3fc13f4..dd4ff95 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/META-INF/MANIFEST.MF
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/META-INF/MANIFEST.MF
@@ -9,9 +9,11 @@
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.papyrus.moka.ssp.omsimulatorprofile,
+ org.eclipse.papyrus.moka.ssp.omsimulatorprofile.edit,
  org.eclipse.papyrus.moka.ssp.omsimulatorprofile.impl,
  org.eclipse.papyrus.moka.ssp.omsimulatorprofile.operations,
  org.eclipse.papyrus.moka.ssp.omsimulatorprofile.util,
+ org.eclipse.papyrus.moka.ssp.omsimulatorprofile.validation,
  org.eclipse.papyrus.moka.ssp.profile,
  org.eclipse.papyrus.moka.ssp.profile.custom,
  org.eclipse.papyrus.moka.ssp.profile.custom.imp,
@@ -26,6 +28,12 @@
  org.eclipse.uml2.uml;visibility:=reexport,
  org.eclipse.papyrus.moka.fmi;visibility:=reexport,
  org.eclipse.papyrus.uml.extensionpoints,
- org.eclipse.papyrus.infra.gmfdiag.common
+ org.eclipse.papyrus.infra.gmfdiag.common,
+ org.eclipse.papyrus.sysml14.service.types;bundle-version="1.3.0",
+ org.eclipse.papyrus.uml.service.types;bundle-version="4.1.0",
+ org.eclipse.papyrus.infra.architecture;bundle-version="2.0.0",
+ org.eclipse.papyrus.sysml14.architecture;bundle-version="1.3.0",
+ org.eclipse.papyrus.infra.types;bundle-version="4.0.0",
+ org.eclipse.papyrus.infra.types.core;bundle-version="4.0.0"
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/css/ssptheme.css b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/css/ssptheme.css
new file mode 100644
index 0000000..de18567
--- /dev/null
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/css/ssptheme.css
@@ -0,0 +1,118 @@
+*{
+	fillColor:#C3D1D5;	
+	gradient: white vertical;	
+	elementIcon: false;
+}
+
+/* hide <<Component>> tag */
+Component {    
+     displayTags:false;
+}
+
+/* turn on auto sync 
+Class, Property, Port, Component {
+	canonical: true;
+}*/
+
+/* hide SsdTComponent's ports as packagedElement */
+/*Component[appliedStereotypes~="SSPProfile::SsdTComponent"] > * > Port {
+	visible: false;
+}*/
+
+/* hide component's ports as packagedElement */
+Component > * > Port {
+	visible: false;
+}
+
+Port{
+	maskLabel: name;
+	isPortResizable:false;	
+}
+
+Label[kind=StereotypeLabel]{
+	visible: true;
+}
+
+Label[type="Connector_StereotypeLabel"] {
+	visible: false;	
+}
+
+Label[type="Connector_NameLabel"] {
+	visible: false;	
+}
+
+Label[type="Port_StereotypeLabel"] {
+	visible: false;	
+}
+
+*[stereotype~="SSPProfile::SsdTComponent"]{
+	visible: true;
+}
+
+Compartment [type=StereotypeCompartment]{
+	visible: false;
+}
+
+Compartment [type=StereotypeBrace] > [property="type"]{
+	visible: false;
+}
+
+/*If port do not have SsdConnectorType stereotype, then it will be red */
+Port {
+	fillColor:#FF2222;
+}
+
+/*If component do not have any stereotype, then it will be red */
+Component {
+	fillColor:#FF2222;
+}
+
+/*If connector do not have SsdConnection stereotype, then it will be red */
+Connector {
+	/*lineColor:#FF2222;*/
+	lineWidth: 2;
+	routing: Rectilinear;
+	roundedBendpointsRadius : 12;
+}
+
+*[appliedStereotypes~="SSPProfile::SsdConnectorType"]{
+	fillColor:#A6C198;
+}
+
+*[appliedStereotypes~="SSPProfile::SsdSystem"]{
+    fillColor: #8fc8d8;
+}
+
+*[appliedStereotypes~="SSPProfile::SsdComponent"]{
+    fillColor: #254ece;   
+}
+
+*[appliedStereotypes~="SSPProfile::Ssd"]{
+    fillColor: #9ece25;   
+}
+
+*[appliedStereotypes~="SSPProfile::SsdConnection"]{
+    lineColor: #222222;   
+}
+
+Port[direction="out"][appliedStereotypes~="SSPProfile::SsdConnectorAndFmiPort"]{
+	isOval : true;
+}
+
+Port[type="Boolean"][appliedStereotypes~="SSPProfile::SsdConnectorAndFmiPort"] {
+	fillColor: #ff00ff; 
+}
+
+Port[type="Integer"][appliedStereotypes~="SSPProfile::SsdConnectorAndFmiPort"] {
+	fillColor: #00007f; 
+}
+
+Port[type="Real"][appliedStereotypes~="SSPProfile::SsdConnectorAndFmiPort"] {
+	fillColor: #ff7f00; 
+}
+
+Port[type="String"][appliedStereotypes~="SSPProfile::SsdConnectorAndFmiPort"] {
+	fillColor: #9ece25; 
+}
+
+
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.elementtypesconfigurations b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.elementtypesconfigurations
new file mode 100644
index 0000000..8fef913
--- /dev/null
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.elementtypesconfigurations
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<elementtypesconfigurations:ElementTypeSetConfiguration xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:elementtypesconfigurations="http://www.eclipse.org/papyrus/infra/elementtypesconfigurations/1.2" xmi:id="_J4sNYKlGEemCrLbuDPk7Vg" identifier="org.eclipse.papyrus.moka.ssp.profile.OMSimulator" name="OMSimulator Bus ElementTypeSet" metamodelNsURI="http://www.eclipse.org/uml2/5.0.0/UML">
+  <adviceBindingsConfigurations xmi:type="elementtypesconfigurations:AdviceBindingConfiguration" xmi:id="_dNpP4KlGEemCrLbuDPk7Vg" identifier="org.eclipse.papyrus.moka.spp.profile.OMSimulatorBusStereo" inheritance="all" editHelperAdviceClassName="org.eclipse.papyrus.moka.ssp.omsimulatorprofile.edit.OMSimulatorBusEditHelper">
+    <target xmi:type="elementtypesconfigurations:MetamodelTypeConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.service.types/model/uml.elementtypesconfigurations#org.eclipse.papyrus.uml.Connector"/>
+  </adviceBindingsConfigurations>
+</elementtypesconfigurations:ElementTypeSetConfiguration>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.genmodel b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.genmodel
index 23543b6..aa58173 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.genmodel
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.genmodel
@@ -4,7 +4,7 @@
     copyrightText="Copyright (c) 2018 CEA LIST.&#xA;&#xA; All rights reserved. This program and the accompanying materials&#xA; are made available under the terms of the Eclipse Public License 2.0&#xA; which accompanies this distribution, and is available at&#xA; https://www.eclipse.org/legal/epl-2.0 &#xD;&#xA;&#xD;&#xA;SPDX-License-Identifier: EPL-2.0&#xA;&#xA; Contributors:&#xA;  CEA LIST - Initial API and implementation"
     modelDirectory="/org.eclipse.papyrus.moka.ssp.profile/src-gen" modelPluginID="org.eclipse.papyrus.moka.ssp.profile"
     modelName="OMSimulator" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
-    importerID="org.eclipse.uml2.uml.ecore.importer" complianceLevel="8.0" usedGenPackages="../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.uml2.types/model/Types.genmodel#//types ../../org.eclipse.uml2.uml/model/UML.genmodel#//uml"
+    importerID="org.eclipse.uml2.uml.ecore.importer" complianceLevel="8.0" usedGenPackages="../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.uml2.uml.profile.standard/model/Standard.genmodel#//standard ../../org.eclipse.papyrus.sysml14/resources/profile/SysML.profile.genmodel#//sysml14 ../../org.eclipse.uml2.types/model/Types.genmodel#//types ../../org.eclipse.uml2.uml/model/UML.genmodel#//uml"
     operationReflection="true" importOrganizing="true" eclipsePlatformVersion="Oxygen"
     operationsFolder="src">
   <genAnnotations source="http://www.eclipse.org/emf/2002/GenModel/importer/org.eclipse.uml2.uml.ecore.importer">
@@ -74,6 +74,8 @@
       <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
           propertySortChoices="true" ecoreFeature="ecore:EReference OMSimulatorProfile.ecore#//OMSimulatorBus/signals"/>
       <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute OMSimulatorProfile.ecore#//OMSimulatorBus/domain"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute OMSimulatorProfile.ecore#//OMSimulatorBus/direction"/>
+      <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="OMSimulatorProfile.ecore#//OMSimulatorBus/getDirection"/>
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="OMSimulatorProfile.ecore#//BusConnectionEnd">
       <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.notation b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.notation
index a7f3378..fdc7d66 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.notation
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.notation
@@ -148,12 +148,20 @@
         <element xmi:type="uml:Property" href="OMSimulator.profile.uml#_n0uf4LguEeizUOX0GlzCzg"/>
         <layoutConstraint xmi:type="notation:Location" xmi:id="_n01NkbguEeizUOX0GlzCzg"/>
       </children>
+      <children xmi:type="notation:Shape" xmi:id="_h9bWoMW_Eemyqo9qIVy2SA" type="Property_ClassAttributeLabel">
+        <element xmi:type="uml:Property" href="OMSimulator.profile.uml#_h7LT4MW_Eemyqo9qIVy2SA"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_h9bWocW_Eemyqo9qIVy2SA"/>
+      </children>
       <styles xmi:type="notation:TitleStyle" xmi:id="_DwWKdMVaEeiLVbFVoMGQrQ"/>
       <styles xmi:type="notation:SortingStyle" xmi:id="_DwWKdcVaEeiLVbFVoMGQrQ"/>
       <styles xmi:type="notation:FilteringStyle" xmi:id="_DwWKdsVaEeiLVbFVoMGQrQ"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DwWKd8VaEeiLVbFVoMGQrQ"/>
     </children>
     <children xmi:type="notation:BasicCompartment" xmi:id="_DwWKeMVaEeiLVbFVoMGQrQ" type="Stereotype_OperationCompartment">
+      <children xmi:type="notation:Shape" xmi:id="_ykaXAMW_Eemyqo9qIVy2SA" type="Operation_ClassOperationLabel">
+        <element xmi:type="uml:Operation" href="OMSimulator.profile.uml#_yjGIYMW_Eemyqo9qIVy2SA"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_ykaXAcW_Eemyqo9qIVy2SA"/>
+      </children>
       <styles xmi:type="notation:TitleStyle" xmi:id="_DwWKecVaEeiLVbFVoMGQrQ"/>
       <styles xmi:type="notation:SortingStyle" xmi:id="_DwWKesVaEeiLVbFVoMGQrQ"/>
       <styles xmi:type="notation:FilteringStyle" xmi:id="_DwWKe8VaEeiLVbFVoMGQrQ"/>
@@ -310,38 +318,6 @@
     <element xmi:type="uml:Stereotype" href="OMSimulator.profile.uml#_XeSSkCYvEemDsJKy8GtZKA"/>
     <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XecDkSYvEemDsJKy8GtZKA" x="100" y="340" width="241" height="201"/>
   </children>
-  <children xmi:type="notation:Shape" xmi:id="_2SHzMCYvEemp-f1Vl6pDLw" type="StereotypeComment">
-    <styles xmi:type="notation:TitleStyle" xmi:id="_2SHzMSYvEemp-f1Vl6pDLw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_2SHzMyYvEemp-f1Vl6pDLw" name="BASE_ELEMENT">
-      <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Connector"/>
-    </styles>
-    <element xsi:nil="true"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2SHzMiYvEemp-f1Vl6pDLw" x="700" y="320"/>
-  </children>
-  <children xmi:type="notation:Shape" xmi:id="_2SauICYvEemp-f1Vl6pDLw" type="StereotypeComment">
-    <styles xmi:type="notation:TitleStyle" xmi:id="_2SauISYvEemp-f1Vl6pDLw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_2SauIyYvEemp-f1Vl6pDLw" 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="_2SauIiYvEemp-f1Vl6pDLw" x="1020" y="60"/>
-  </children>
-  <children xmi:type="notation:Shape" xmi:id="_2StpFyYvEemp-f1Vl6pDLw" type="StereotypeComment">
-    <styles xmi:type="notation:TitleStyle" xmi:id="_2StpGCYvEemp-f1Vl6pDLw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_2StpGiYvEemp-f1Vl6pDLw" name="BASE_ELEMENT">
-      <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#ConnectorEnd"/>
-    </styles>
-    <element xsi:nil="true"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2StpGSYvEemp-f1Vl6pDLw" x="1020" y="380"/>
-  </children>
-  <children xmi:type="notation:Shape" xmi:id="_2TKVAyYvEemp-f1Vl6pDLw" type="StereotypeComment">
-    <styles xmi:type="notation:TitleStyle" xmi:id="_2TKVBCYvEemp-f1Vl6pDLw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_2TKVBiYvEemp-f1Vl6pDLw" 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="_2TKVBSYvEemp-f1Vl6pDLw" x="1700" y="80"/>
-  </children>
   <children xmi:type="notation:Shape" xmi:id="_BxD7sCYwEemp-f1Vl6pDLw" type="Class_MetaclassShape">
     <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BxHmECYwEemp-f1Vl6pDLw" source="Stereotype_Annotation">
       <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_BxINICYwEemp-f1Vl6pDLw" key="StereotypeWithQualifiedNameList" value=""/>
@@ -354,13 +330,45 @@
     <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
     <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BxGX8SYwEemp-f1Vl6pDLw" x="280" y="140"/>
   </children>
-  <children xmi:type="notation:Shape" xmi:id="_BxhOsCYwEemp-f1Vl6pDLw" type="StereotypeComment">
-    <styles xmi:type="notation:TitleStyle" xmi:id="_BxhOsSYwEemp-f1Vl6pDLw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_BxhOsyYwEemp-f1Vl6pDLw" name="BASE_ELEMENT">
+  <children xmi:type="notation:Shape" xmi:id="_Mv3zwMW_Eemyqo9qIVy2SA" type="StereotypeComment">
+    <styles xmi:type="notation:TitleStyle" xmi:id="_Mv3zwcW_Eemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mv4a0MW_Eemyqo9qIVy2SA" name="BASE_ELEMENT">
+      <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Connector"/>
+    </styles>
+    <element xsi:nil="true"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mv3zwsW_Eemyqo9qIVy2SA" x="700" y="320"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_MwI5gMW_Eemyqo9qIVy2SA" type="StereotypeComment">
+    <styles xmi:type="notation:TitleStyle" xmi:id="_MwI5gcW_Eemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MwJgkMW_Eemyqo9qIVy2SA" 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="_MwI5gsW_Eemyqo9qIVy2SA" x="1020" y="60"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_Mw7jsMW_Eemyqo9qIVy2SA" type="StereotypeComment">
+    <styles xmi:type="notation:TitleStyle" xmi:id="_Mw7jscW_Eemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mw8KwMW_Eemyqo9qIVy2SA" name="BASE_ELEMENT">
+      <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#ConnectorEnd"/>
+    </styles>
+    <element xsi:nil="true"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mw7jssW_Eemyqo9qIVy2SA" x="1020" y="380"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_MxinsMW_Eemyqo9qIVy2SA" type="StereotypeComment">
+    <styles xmi:type="notation:TitleStyle" xmi:id="_MxinscW_Eemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mxins8W_Eemyqo9qIVy2SA" 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="_MxinssW_Eemyqo9qIVy2SA" x="1700" y="80"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_Myd0wMW_Eemyqo9qIVy2SA" type="StereotypeComment">
+    <styles xmi:type="notation:TitleStyle" xmi:id="_Myd0wcW_Eemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Myd0w8W_Eemyqo9qIVy2SA" 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="_BxhOsiYwEemp-f1Vl6pDLw" x="480" y="140"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Myd0wsW_Eemyqo9qIVy2SA" x="480" y="140"/>
   </children>
   <styles xmi:type="notation:StringValueStyle" xmi:id="_zJLsIbgtEeizUOX0GlzCzg" name="diagram_compatibility_version" stringValue="1.4.0"/>
   <styles xmi:type="notation:DiagramStyle" xmi:id="_zJLsIrgtEeizUOX0GlzCzg"/>
@@ -495,54 +503,54 @@
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hHlvICYvEemDsJKy8GtZKA" id="(1.0,0.19900497512437812)"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hHlvISYvEemDsJKy8GtZKA" id="(0.0,0.8)"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_2SHzNCYvEemp-f1Vl6pDLw" type="StereotypeCommentLink" source="_07wyJbgvEeizUOX0GlzCzg" target="_2SHzMCYvEemp-f1Vl6pDLw">
-    <styles xmi:type="notation:FontStyle" xmi:id="_2SHzNSYvEemp-f1Vl6pDLw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_2SHzOSYvEemp-f1Vl6pDLw" name="BASE_ELEMENT">
+  <edges xmi:type="notation:Connector" xmi:id="_Mv5B4MW_Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="_07wyJbgvEeizUOX0GlzCzg" target="_Mv3zwMW_Eemyqo9qIVy2SA">
+    <styles xmi:type="notation:FontStyle" xmi:id="_Mv5B4cW_Eemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mv5B5cW_Eemyqo9qIVy2SA" name="BASE_ELEMENT">
       <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Connector"/>
     </styles>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2SHzNiYvEemp-f1Vl6pDLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2SHzNyYvEemp-f1Vl6pDLw"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2SHzOCYvEemp-f1Vl6pDLw"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mv5B4sW_Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mv5B48W_Eemyqo9qIVy2SA"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mv5B5MW_Eemyqo9qIVy2SA"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_2SauJCYvEemp-f1Vl6pDLw" type="StereotypeCommentLink" source="__qWlcMVZEeiLVbFVoMGQrQ" target="_2SauICYvEemp-f1Vl6pDLw">
-    <styles xmi:type="notation:FontStyle" xmi:id="_2SauJSYvEemp-f1Vl6pDLw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_2SauKSYvEemp-f1Vl6pDLw" name="BASE_ELEMENT">
+  <edges xmi:type="notation:Connector" xmi:id="_MwJgkcW_Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="__qWlcMVZEeiLVbFVoMGQrQ" target="_MwI5gMW_Eemyqo9qIVy2SA">
+    <styles xmi:type="notation:FontStyle" xmi:id="_MwJgksW_Eemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MwJglsW_Eemyqo9qIVy2SA" 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="_2SauJiYvEemp-f1Vl6pDLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2SauJyYvEemp-f1Vl6pDLw"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2SauKCYvEemp-f1Vl6pDLw"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MwJgk8W_Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MwJglMW_Eemyqo9qIVy2SA"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MwJglcW_Eemyqo9qIVy2SA"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_2StpGyYvEemp-f1Vl6pDLw" type="StereotypeCommentLink" source="__3fNEMVaEeiLVbFVoMGQrQ" target="_2StpFyYvEemp-f1Vl6pDLw">
-    <styles xmi:type="notation:FontStyle" xmi:id="_2StpHCYvEemp-f1Vl6pDLw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_2StpICYvEemp-f1Vl6pDLw" name="BASE_ELEMENT">
+  <edges xmi:type="notation:Connector" xmi:id="_Mw8KwcW_Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="__3fNEMVaEeiLVbFVoMGQrQ" target="_Mw7jsMW_Eemyqo9qIVy2SA">
+    <styles xmi:type="notation:FontStyle" xmi:id="_Mw8KwsW_Eemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Mw8KxsW_Eemyqo9qIVy2SA" name="BASE_ELEMENT">
       <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#ConnectorEnd"/>
     </styles>
     <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2StpHSYvEemp-f1Vl6pDLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2StpHiYvEemp-f1Vl6pDLw"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2StpHyYvEemp-f1Vl6pDLw"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mw8Kw8W_Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mw8KxMW_Eemyqo9qIVy2SA"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mw8KxcW_Eemyqo9qIVy2SA"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_2TKVByYvEemp-f1Vl6pDLw" type="StereotypeCommentLink" source="_6JxJ0OmMEeiRcfn1Mejhlg" target="_2TKVAyYvEemp-f1Vl6pDLw">
-    <styles xmi:type="notation:FontStyle" xmi:id="_2TKVCCYvEemp-f1Vl6pDLw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_2TKVDCYvEemp-f1Vl6pDLw" name="BASE_ELEMENT">
+  <edges xmi:type="notation:Connector" xmi:id="_MxintMW_Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="_6JxJ0OmMEeiRcfn1Mejhlg" target="_MxinsMW_Eemyqo9qIVy2SA">
+    <styles xmi:type="notation:FontStyle" xmi:id="_MxintcW_Eemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_MxjOwMW_Eemyqo9qIVy2SA" 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="_2TKVCSYvEemp-f1Vl6pDLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2TKVCiYvEemp-f1Vl6pDLw"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2TKVCyYvEemp-f1Vl6pDLw"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MxintsW_Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mxint8W_Eemyqo9qIVy2SA"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MxinuMW_Eemyqo9qIVy2SA"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_BxhOtCYwEemp-f1Vl6pDLw" type="StereotypeCommentLink" source="_BxD7sCYwEemp-f1Vl6pDLw" target="_BxhOsCYwEemp-f1Vl6pDLw">
-    <styles xmi:type="notation:FontStyle" xmi:id="_BxhOtSYwEemp-f1Vl6pDLw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Bxh1wiYwEemp-f1Vl6pDLw" name="BASE_ELEMENT">
+  <edges xmi:type="notation:Connector" xmi:id="_Myd0xMW_Eemyqo9qIVy2SA" type="StereotypeCommentLink" source="_BxD7sCYwEemp-f1Vl6pDLw" target="_Myd0wMW_Eemyqo9qIVy2SA">
+    <styles xmi:type="notation:FontStyle" xmi:id="_Myd0xcW_Eemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Myd0ycW_Eemyqo9qIVy2SA" 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="_BxhOtiYwEemp-f1Vl6pDLw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Bxh1wCYwEemp-f1Vl6pDLw"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Bxh1wSYwEemp-f1Vl6pDLw"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Myd0xsW_Eemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Myd0x8W_Eemyqo9qIVy2SA"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Myd0yMW_Eemyqo9qIVy2SA"/>
   </edges>
 </notation:Diagram>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.uml b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.uml
index 440168e..3b7dc2d 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.uml
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulator.profile.uml
@@ -51,6 +51,12 @@
     <packageImport xmi:type="uml:PackageImport" xmi:id="_zSjqkLgtEeizUOX0GlzCzg">
       <importedPackage xmi:type="uml:Model" href="pathmap://UML_METAMODELS/UML.metamodel.uml#_0"/>
     </packageImport>
+    <packageImport xmi:type="uml:PackageImport" xmi:id="_blu0wMW_Eemyqo9qIVy2SA">
+      <importedPackage xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Ports_u0026Flows"/>
+    </packageImport>
+    <packageImport xmi:type="uml:PackageImport" xmi:id="_bl6a8MW_Eemyqo9qIVy2SA">
+      <importedPackage xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_DeprecatedElements"/>
+    </packageImport>
     <packagedElement xmi:type="uml:Stereotype" xmi:id="_8A6h0LgtEeizUOX0GlzCzg" name="TLMConnection">
       <ownedAttribute xmi:type="uml:Property" xmi:id="_99Su8LgtEeizUOX0GlzCzg" name="time delay">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Real"/>
@@ -128,6 +134,14 @@
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_9EUmsOmdEeiRcfn1Mejhlg"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_9E2yMOmdEeiRcfn1Mejhlg" value="*"/>
       </ownedAttribute>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_h7LT4MW_Eemyqo9qIVy2SA" name="direction" isDerived="true">
+        <type xmi:type="uml:Enumeration" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Ports_u0026Flows.enumeration_packagedElement_FlowDirection"/>
+      </ownedAttribute>
+      <ownedOperation xmi:type="uml:Operation" xmi:id="_yjGIYMW_Eemyqo9qIVy2SA" name="getDirection">
+        <ownedParameter xmi:type="uml:Parameter" xmi:id="_4K4QQMW_Eemyqo9qIVy2SA" name="result" direction="return">
+          <type xmi:type="uml:Enumeration" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Ports_u0026Flows.enumeration_packagedElement_FlowDirection"/>
+        </ownedParameter>
+      </ownedOperation>
     </packagedElement>
     <packagedElement xmi:type="uml:Extension" xmi:id="_lusfQMVaEeiLVbFVoMGQrQ" name="E_OMSimulatorBus_Port15" memberEnd="_lu1pMMVaEeiLVbFVoMGQrQ _lu1pMcVaEeiLVbFVoMGQrQ">
       <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_lu1pMMVaEeiLVbFVoMGQrQ" name="extension_OMSimulatorBus" type="_DwNAgMVaEeiLVbFVoMGQrQ" aggregation="composite" association="_lusfQMVaEeiLVbFVoMGQrQ"/>
@@ -247,4 +261,6 @@
   <Ecore:EOperation xmi:id="_zWEcUCYwEemp-f1Vl6pDLw" base_Operation="_zV-8wCYwEemp-f1Vl6pDLw" visibility="None"/>
   <Ecore:EReference xmi:id="_danNcCY3Eemp-f1Vl6pDLw" isTransient="true" isVolatile="true" base_Property="_o4gGsCYvEemDsJKy8GtZKA"/>
   <Ecore:EReference xmi:id="_eNHL8CY4Eemp-f1Vl6pDLw" isTransient="true" isVolatile="true" base_Property="_FCvH0CYwEemp-f1Vl6pDLw"/>
+  <Ecore:EAttribute xmi:id="_pk6scMW_Eemyqo9qIVy2SA" isTransient="true" isVolatile="true" base_Property="_h7LT4MW_Eemyqo9qIVy2SA"/>
+  <Ecore:EOperation xmi:id="_6H59oMW_Eemyqo9qIVy2SA" base_Operation="_yjGIYMW_Eemyqo9qIVy2SA" visibility="None"/>
 </xmi:XMI>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulatorProfile.ecore b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulatorProfile.ecore
index d00ba0c..71e6d4a 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulatorProfile.ecore
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/OMSimulatorProfile.ecore
@@ -48,12 +48,20 @@
     <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
       <details key="documentation" value="OMSimulatorBus is a new kind of Port which can be added to FMU Blocks. Those ports can reference other Flowports belonging to the owning FMU."/>
     </eAnnotations>
+    <eOperations name="getDirection" ordered="false" lowerBound="1" eType="ecore:EEnum ../../org.eclipse.papyrus.sysml14/resources/profile/sysml.ecore#//portsandflows/FlowDirection">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="suppressedVisibility" value="true"/>
+      </eAnnotations>
+    </eOperations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="base_Port" ordered="false"
         lowerBound="1" eType="ecore:EClass ../../org.eclipse.uml2.uml/model/UML.ecore#//Port"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="signals" upperBound="-1"
         eType="ecore:EClass ../../org.eclipse.uml2.uml/model/UML.ecore#//Port"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="domain" ordered="false"
         upperBound="-1" eType="#//TLMDomain"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="direction" ordered="false"
+        lowerBound="1" eType="ecore:EEnum ../../org.eclipse.papyrus.sysml14/resources/profile/sysml.ecore#//portsandflows/FlowDirection"
+        volatile="true" transient="true" derived="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="TLMDomain">
     <eLiterals name="Hydraulic"/>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/model.profile.notation b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/model.profile.notation
index b7fbd73..ff3776b 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/model.profile.notation
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/model.profile.notation
@@ -41,14 +41,6 @@
     <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Connector"/>
     <layoutConstraint xmi:type="notation:Bounds" xmi:id="_imc5RFEAEeenPsCrM3OyTw" x="320" y="640" width="100" height="50"/>
   </children>
-  <children xmi:type="notation:Shape" xmi:id="_imwbSlEAEeenPsCrM3OyTw" type="StereotypeComment">
-    <styles xmi:type="notation:TitleStyle" xmi:id="_imwbS1EAEeenPsCrM3OyTw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_imwbTVEAEeenPsCrM3OyTw" name="BASE_ELEMENT">
-      <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Connector"/>
-    </styles>
-    <element xsi:nil="true"/>
-    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_imwbTFEAEeenPsCrM3OyTw" x="650" y="138"/>
-  </children>
   <children xmi:type="notation:Shape" xmi:id="_E951IFECEeenPsCrM3OyTw" type="Stereotype_Shape">
     <children xmi:type="notation:DecorationNode" xmi:id="_E951IlECEeenPsCrM3OyTw" type="Stereotype_NameLabel"/>
     <children xmi:type="notation:BasicCompartment" xmi:id="_E951I1ECEeenPsCrM3OyTw" type="Stereotype_AttributeCompartment">
@@ -133,14 +125,6 @@
     <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
     <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7szl8Ym9EeixnsCmB1SW-Q" x="661" y="435" width="121" height="161"/>
   </children>
-  <children xmi:type="notation:Shape" xmi:id="_7tLZYIm9EeixnsCmB1SW-Q" type="StereotypeComment">
-    <styles xmi:type="notation:TitleStyle" xmi:id="_7tLZYYm9EeixnsCmB1SW-Q"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_7tMAcIm9EeixnsCmB1SW-Q" 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="_7tLZYom9EeixnsCmB1SW-Q" x="760" y="360"/>
-  </children>
   <children xmi:type="notation:Shape" xmi:id="_MdxJIItoEeiWf9BPHXi2qg" type="Stereotype_Shape">
     <children xmi:type="notation:DecorationNode" xmi:id="_Mdy-UItoEeiWf9BPHXi2qg" type="Stereotype_NameLabel"/>
     <children xmi:type="notation:BasicCompartment" xmi:id="_MdzlYItoEeiWf9BPHXi2qg" type="Stereotype_AttributeCompartment">
@@ -182,14 +166,6 @@
     <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
     <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NGunYJAaEeibTpPP74HsGA" x="920" y="460"/>
   </children>
-  <children xmi:type="notation:Shape" xmi:id="_NHyXUJAaEeibTpPP74HsGA" type="StereotypeComment">
-    <styles xmi:type="notation:TitleStyle" xmi:id="_NHyXUZAaEeibTpPP74HsGA"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_NHy-YJAaEeibTpPP74HsGA" 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="_NHyXUpAaEeibTpPP74HsGA" x="1040" y="520"/>
-  </children>
   <children xmi:type="notation:Shape" xmi:id="_fsIvgJrfEeiosLc1kU8j4g" type="Class_MetaclassShape">
     <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fsJ9oJrfEeiosLc1kU8j4g" source="Stereotype_Annotation">
       <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fsJ9oZrfEeiosLc1kU8j4g" key="StereotypeWithQualifiedNameList" value=""/>
@@ -202,14 +178,6 @@
     <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Package"/>
     <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fsJWkJrfEeiosLc1kU8j4g" x="340" y="140"/>
   </children>
-  <children xmi:type="notation:Shape" xmi:id="_fsetwJrfEeiosLc1kU8j4g" type="StereotypeComment">
-    <styles xmi:type="notation:TitleStyle" xmi:id="_fsetwZrfEeiosLc1kU8j4g"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_fsetw5rfEeiosLc1kU8j4g" 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="_fsetwprfEeiosLc1kU8j4g" x="1576" y="228"/>
-  </children>
   <children xmi:type="notation:Shape" xmi:id="_hKeVwJrfEeiosLc1kU8j4g" type="Stereotype_Shape">
     <children xmi:type="notation:DecorationNode" xmi:id="_hKe80JrfEeiosLc1kU8j4g" type="Stereotype_NameLabel"/>
     <children xmi:type="notation:BasicCompartment" xmi:id="_hKe80ZrfEeiosLc1kU8j4g" type="Stereotype_AttributeCompartment">
@@ -329,6 +297,38 @@
     <element xmi:type="uml:Enumeration" href="model.profile.uml#_eg2qYLUFEeiSGMgJYpbk4Q"/>
     <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ehFT4bUFEeiSGMgJYpbk4Q" x="320" y="760" width="161" height="121"/>
   </children>
+  <children xmi:type="notation:Shape" xmi:id="_Wza9EMjEEemyqo9qIVy2SA" type="StereotypeComment">
+    <styles xmi:type="notation:TitleStyle" xmi:id="_Wza9EcjEEemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Wza9E8jEEemyqo9qIVy2SA" name="BASE_ELEMENT">
+      <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Connector"/>
+    </styles>
+    <element xsi:nil="true"/>
+    <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wza9EsjEEemyqo9qIVy2SA" x="520" y="640"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_WzsC0MjEEemyqo9qIVy2SA" type="StereotypeComment">
+    <styles xmi:type="notation:TitleStyle" xmi:id="_WzsC0cjEEemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_WzsC08jEEemyqo9qIVy2SA" 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="_WzsC0sjEEemyqo9qIVy2SA" x="861" y="435"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_Wz6sUMjEEemyqo9qIVy2SA" type="StereotypeComment">
+    <styles xmi:type="notation:TitleStyle" xmi:id="_Wz6sUcjEEemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Wz6sU8jEEemyqo9qIVy2SA" 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="_Wz6sUsjEEemyqo9qIVy2SA" x="1120" y="460"/>
+  </children>
+  <children xmi:type="notation:Shape" xmi:id="_W0FEYMjEEemyqo9qIVy2SA" type="StereotypeComment">
+    <styles xmi:type="notation:TitleStyle" xmi:id="_W0FEYcjEEemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_W0FEY8jEEemyqo9qIVy2SA" 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="_W0FEYsjEEemyqo9qIVy2SA" x="540" y="140"/>
+  </children>
   <styles xmi:type="notation:StringValueStyle" xmi:id="_T90D4R-HEeegP6aMHpCV8A" name="diagram_compatibility_version" stringValue="1.4.0"/>
   <styles xmi:type="notation:DiagramStyle" xmi:id="_T90D4h-HEeegP6aMHpCV8A"/>
   <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_gXIYQMrhEee_Pr-QbAAyWw" diagramKindId="org.eclipse.papyrus.uml.diagram.profile">
@@ -336,16 +336,6 @@
   </styles>
   <styles xmi:type="notation:CanonicalStyle" xmi:id="_jGmfUO-5EeelhbYPWVvDqQ" canonical="false"/>
   <element xmi:type="uml:Profile" href="model.profile.uml#_T9IHYB-HEeegP6aMHpCV8A"/>
-  <edges xmi:type="notation:Connector" xmi:id="_imwbTlEAEeenPsCrM3OyTw" type="StereotypeCommentLink" source="_imc5QVEAEeenPsCrM3OyTw" target="_imwbSlEAEeenPsCrM3OyTw">
-    <styles xmi:type="notation:FontStyle" xmi:id="_imwbT1EAEeenPsCrM3OyTw"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_imwbU1EAEeenPsCrM3OyTw" name="BASE_ELEMENT">
-      <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Connector"/>
-    </styles>
-    <element xsi:nil="true"/>
-    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_imwbUFEAEeenPsCrM3OyTw" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_imwbUVEAEeenPsCrM3OyTw"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_imwbUlEAEeenPsCrM3OyTw"/>
-  </edges>
   <edges xmi:type="notation:Connector" xmi:id="_js8nQFEAEeenPsCrM3OyTw" type="Extension_Edge" source="_VHTB8FD_EeenPsCrM3OyTw" target="_imc5QVEAEeenPsCrM3OyTw">
     <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yBHbAFEBEeenPsCrM3OyTw" source="PapyrusCSSForceValue">
       <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yBHbAVEBEeenPsCrM3OyTw" key="routing" value="true"/>
@@ -430,16 +420,6 @@
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sDpvUHhwEeihra2GkjZNtQ" id="(1.0,0.3314917127071823)"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sDpvUXhwEeihra2GkjZNtQ" id="(0.0,0.3191489361702128)"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_7tMngIm9EeixnsCmB1SW-Q" type="StereotypeCommentLink" source="_7sy-4Im9EeixnsCmB1SW-Q" target="_7tLZYIm9EeixnsCmB1SW-Q">
-    <styles xmi:type="notation:FontStyle" xmi:id="_7tMngYm9EeixnsCmB1SW-Q"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_7tNOkom9EeixnsCmB1SW-Q" 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="_7tMngom9EeixnsCmB1SW-Q" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7tNOkIm9EeixnsCmB1SW-Q"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7tNOkYm9EeixnsCmB1SW-Q"/>
-  </edges>
   <edges xmi:type="notation:Connector" xmi:id="_-39TUIm9EeixnsCmB1SW-Q" type="Extension_Edge" source="_MdxJIItoEeiWf9BPHXi2qg" target="_7sy-4Im9EeixnsCmB1SW-Q">
     <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUs5gYqDEei-TZYfwt78ow" source="PapyrusCSSForceValue">
       <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_XUs5goqDEei-TZYfwt78ow" key="routing" value="true"/>
@@ -560,16 +540,6 @@
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_U4vKUItoEeiWf9BPHXi2qg" id="(0.2,0.0)"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_U4vKUYtoEeiWf9BPHXi2qg" id="(0.5263157894736842,1.0)"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_NHzlcJAaEeibTpPP74HsGA" type="StereotypeCommentLink" source="_NGtZQJAaEeibTpPP74HsGA" target="_NHyXUJAaEeibTpPP74HsGA">
-    <styles xmi:type="notation:FontStyle" xmi:id="_NHzlcZAaEeibTpPP74HsGA"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_NH0zkZAaEeibTpPP74HsGA" 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="_NHzlcpAaEeibTpPP74HsGA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_NHzlc5AaEeibTpPP74HsGA"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_NH0zkJAaEeibTpPP74HsGA"/>
-  </edges>
   <edges xmi:type="notation:Connector" xmi:id="_NuWBAJAaEeibTpPP74HsGA" type="Extension_Edge" source="_FZyf4VECEeenPsCrM3OyTw" target="_NGtZQJAaEeibTpPP74HsGA">
     <styles xmi:type="notation:FontStyle" xmi:id="_NuWBAZAaEeibTpPP74HsGA"/>
     <element xmi:type="uml:Extension" href="model.profile.uml#_Nt1DoJAaEeibTpPP74HsGA"/>
@@ -584,16 +554,6 @@
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OIiCoJAaEeibTpPP74HsGA" id="(0.4166666666666667,1.0)"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OIiCoZAaEeibTpPP74HsGA" id="(0.6,0.0)"/>
   </edges>
-  <edges xmi:type="notation:Connector" xmi:id="_fsfU0JrfEeiosLc1kU8j4g" type="StereotypeCommentLink" source="_fsIvgJrfEeiosLc1kU8j4g" target="_fsetwJrfEeiosLc1kU8j4g">
-    <styles xmi:type="notation:FontStyle" xmi:id="_fsfU0ZrfEeiosLc1kU8j4g"/>
-    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_fsf74prfEeiosLc1kU8j4g" 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="_fsfU0prfEeiosLc1kU8j4g" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
-    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fsf74JrfEeiosLc1kU8j4g"/>
-    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fsf74ZrfEeiosLc1kU8j4g"/>
-  </edges>
   <edges xmi:type="notation:Connector" xmi:id="_nqa0sJrfEeiosLc1kU8j4g" type="Extension_Edge" source="_hKeVwJrfEeiosLc1kU8j4g" target="_fsIvgJrfEeiosLc1kU8j4g">
     <styles xmi:type="notation:FontStyle" xmi:id="_nqa0sZrfEeiosLc1kU8j4g"/>
     <element xmi:type="uml:Extension" href="model.profile.uml#_np_W4JrfEeiosLc1kU8j4g"/>
@@ -631,4 +591,44 @@
     <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OWwp0J-aEeiGp_7CKidkRA" id="(0.5128205128205128,0.0)"/>
     <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OWwp0Z-aEeiGp_7CKidkRA" id="(0.38953488372093026,1.0)"/>
   </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_Wza9FMjEEemyqo9qIVy2SA" type="StereotypeCommentLink" source="_imc5QVEAEeenPsCrM3OyTw" target="_Wza9EMjEEemyqo9qIVy2SA">
+    <styles xmi:type="notation:FontStyle" xmi:id="_Wza9FcjEEemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_WzbkIMjEEemyqo9qIVy2SA" name="BASE_ELEMENT">
+      <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Connector"/>
+    </styles>
+    <element xsi:nil="true"/>
+    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Wza9FsjEEemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wza9F8jEEemyqo9qIVy2SA"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wza9GMjEEemyqo9qIVy2SA"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_WzsC1MjEEemyqo9qIVy2SA" type="StereotypeCommentLink" source="_7sy-4Im9EeixnsCmB1SW-Q" target="_WzsC0MjEEemyqo9qIVy2SA">
+    <styles xmi:type="notation:FontStyle" xmi:id="_WzsC1cjEEemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Wzsp4MjEEemyqo9qIVy2SA" 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="_WzsC1sjEEemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WzsC18jEEemyqo9qIVy2SA"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_WzsC2MjEEemyqo9qIVy2SA"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_Wz6sVMjEEemyqo9qIVy2SA" type="StereotypeCommentLink" source="_NGtZQJAaEeibTpPP74HsGA" target="_Wz6sUMjEEemyqo9qIVy2SA">
+    <styles xmi:type="notation:FontStyle" xmi:id="_Wz6sVcjEEemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Wz7TYMjEEemyqo9qIVy2SA" 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="_Wz6sVsjEEemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wz6sV8jEEemyqo9qIVy2SA"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Wz6sWMjEEemyqo9qIVy2SA"/>
+  </edges>
+  <edges xmi:type="notation:Connector" xmi:id="_W0FEZMjEEemyqo9qIVy2SA" type="StereotypeCommentLink" source="_fsIvgJrfEeiosLc1kU8j4g" target="_W0FEYMjEEemyqo9qIVy2SA">
+    <styles xmi:type="notation:FontStyle" xmi:id="_W0FEZcjEEemyqo9qIVy2SA"/>
+    <styles xmi:type="notation:EObjectValueStyle" xmi:id="_W0FEacjEEemyqo9qIVy2SA" 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="_W0FEZsjEEemyqo9qIVy2SA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_W0FEZ8jEEemyqo9qIVy2SA"/>
+    <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_W0FEaMjEEemyqo9qIVy2SA"/>
+  </edges>
 </notation:Diagram>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/model.profile.uml b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/model.profile.uml
index db77fca..b1e0b84 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/model.profile.uml
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/model.profile.uml
@@ -2,6 +2,13 @@
 <xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA">
   <uml:Profile xmi:id="_T9IHYB-HEeegP6aMHpCV8A" name="SSPProfile" URI="" metaclassReference="_UDR9QB-IEeegP6aMHpCV8A _imc5QFEAEeenPsCrM3OyTw _qiu94FEBEeenPsCrM3OyTw _Int0cFECEeenPsCrM3OyTw _Go0rsDKXEeiU5oVU_O76aA _fsHhYJrfEeiosLc1kU8j4g">
     <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HMgpsB-JEeegP6aMHpCV8A" source="http://www.eclipse.org/uml2/2.0.0/UML">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aFX2AMjEEemyqo9qIVy2SA" source="PapyrusVersion">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_aFX2AcjEEemyqo9qIVy2SA" key="Version" value="0.0.0"/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_aFX2AsjEEemyqo9qIVy2SA" key="Comment" value="&lt;undefined>"/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_aFX2A8jEEemyqo9qIVy2SA" key="Copyright" value=""/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_aFX2BMjEEemyqo9qIVy2SA" key="Date" value=""/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_aFX2BcjEEemyqo9qIVy2SA" key="Author" value="&lt;undefined>"/>
+      </eAnnotations>
       <contents xmi:type="ecore:EPackage" xmi:id="_8m0PQKq7EeiaROE_eJkS6A" name="profile" nsURI="http://org.eclipse.papyrus.moka.ssp.profile/SSPProfile" nsPrefix="SSPProfile">
         <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_8m0PQaq7EeiaROE_eJkS6A" source="http://www.eclipse.org/uml2/4.1.0/UML">
           <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//deprecatedelements"/>
@@ -320,9 +327,11 @@
       <generalization xmi:type="uml:Generalization" xmi:id="_URwC0ItoEeiWf9BPHXi2qg" general="_E9wrMFECEeenPsCrM3OyTw"/>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_xdycoNtHEee8fLUc1N33uA" name="source">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_i3lSgMjEEemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_xFltINtJEee8fLUc1N33uA" name="type">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_k4mvEMjEEemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_x__uoI_tEeisd_fYEaLh1w" name="fmu">
         <type xmi:type="uml:Stereotype" href="../../org.eclipse.papyrus.moka.fmi.profile/model/FMI.profile.uml#_6Z7fcK0REeSXqKqlHzx1gA"/>
@@ -345,11 +354,15 @@
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_2IV20JrfEeiosLc1kU8j4g" name="name">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ggv-AMjEEemyqo9qIVy2SA"/>
       </ownedAttribute>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_LBdawJrgEeiosLc1kU8j4g" name="version">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_hO_kEMjEEemyqo9qIVy2SA"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_zPIOILHBEeib6JR9yOlNVg" name="mainSystem" type="_FZyf4FECEeenPsCrM3OyTw"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_zPIOILHBEeib6JR9yOlNVg" name="mainSystem" type="_FZyf4FECEeenPsCrM3OyTw">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_iEdMcMjEEemyqo9qIVy2SA"/>
+      </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Extension" xmi:id="_np_W4JrfEeiosLc1kU8j4g" name="E_Ssd_Package25" memberEnd="_nqBzIJrfEeiosLc1kU8j4g _nqCaMJrfEeiosLc1kU8j4g">
       <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_nqBzIJrfEeiosLc1kU8j4g" name="extension_Ssd" type="_hKcgkJrfEeiosLc1kU8j4g" aggregation="composite" association="_np_W4JrfEeiosLc1kU8j4g"/>
@@ -360,8 +373,11 @@
       </generalization>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_FQfTwJ-YEeiGp_7CKidkRA" name="SSDDescription">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EString"/>
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_aFXO8MjEEemyqo9qIVy2SA"/>
       </ownedAttribute>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_C4cHcLUGEeiSGMgJYpbk4Q" name="typeKind" type="_eg2qYLUFEeiSGMgJYpbk4Q"/>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_C4cHcLUGEeiSGMgJYpbk4Q" name="typeKind" type="_eg2qYLUFEeiSGMgJYpbk4Q">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_cyN2wMjEEemyqo9qIVy2SA"/>
+      </ownedAttribute>
       <icon xmi:type="uml:Image" xmi:id="_L6_OoKqVEeiaROE_eJkS6A" format="GIF" location="platform:/plugin/org.eclipse.papyrus.sysml14.edit/icons/full/obj16/FlowPort_IN.gif">
         <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_L6_OoaqVEeiaROE_eJkS6A" source="image_papyrus">
           <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_L6_OoqqVEeiaROE_eJkS6A" key="image_kind_key" value="icon"/>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/profile.ecore b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/profile.ecore
index d7a6fc3..c942733 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/profile.ecore
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/model/profile.ecore
@@ -23,9 +23,9 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="SsdConnector" eSuperTypes="../../org.eclipse.papyrus.sysml14/resources/profile/sysml.ecore#//deprecatedelements/FlowPort">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="SSDDescription" ordered="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeKind" ordered="false"
-        lowerBound="1" eType="#//TypeKind"/>
+        eType="#//TypeKind"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="TypeKind">
     <eLiterals name="input"/>
@@ -47,9 +47,8 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="SsdComponent" eSuperTypes="#//SsdElement">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="source" ordered="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" ordered="false" lowerBound="1"
         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" ordered="false" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="fmu" ordered="false" eType="ecore:EClass ../../org.eclipse.papyrus.moka.fmi.profile/model/fmiprofile.ecore#//FMU"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="base_Property" ordered="false"
         lowerBound="1" eType="ecore:EClass ../../org.eclipse.uml2.uml/model/UML.ecore#//Property"/>
@@ -57,12 +56,11 @@
   <eClassifiers xsi:type="ecore:EClass" name="Ssd">
     <eStructuralFeatures xsi:type="ecore:EReference" name="base_Package" ordered="false"
         lowerBound="1" eType="ecore:EClass ../../org.eclipse.uml2.uml/model/UML.ecore#//Package"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" ordered="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="mainSystem" ordered="false"
-        lowerBound="1" eType="#//SsdSystem"/>
+        eType="#//SsdSystem"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="SsdConnectorAndFmiPort" eSuperTypes="../../org.eclipse.papyrus.moka.fmi.profile/model/fmiprofile.ecore#//FMIPort #//SsdConnector"/>
 </ecore:EPackage>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/plugin.xml b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/plugin.xml
index 7c9a75a..6ea46e0 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/plugin.xml
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/plugin.xml
@@ -98,4 +98,118 @@
           path="pathmap://PAPYRUS_SSP_PROFILE/TLMLibrary.uml">
     </library>
  </extension>
+    <extension
+         point="org.eclipse.papyrus.infra.gmfdiag.css.theme">
+      <themeDefinition
+            id="org.eclipse.papyrus.moka.ssp2uml.ui.ssp_theme"
+            label="SSP theme">
+      </themeDefinition>
+      <themeContribution
+            id="org.eclipse.papyrus.moka.ssp2uml.ui.ssp_theme">
+         <stylesheet
+               stylesheetPath="css/ssptheme.css">
+         </stylesheet>
+      </themeContribution>
+   </extension>
+   
+      <!--extension
+            point="org.eclipse.papyrus.infra.architecture.models">
+         <model
+               path="model/sysml14.architecture">
+         </model>
+      </extension-->
+      <extension
+            point="org.eclipse.papyrus.infra.types.core.elementTypeSetConfiguration">
+         <elementTypeSet
+               clientContextID="org.eclipse.papyrus.sysml.architecture.SysML14"
+               path="model/OMSimulator.elementtypesconfigurations">
+         </elementTypeSet>
+      </extension>
+      <extension
+            point="org.eclipse.papyrus.infra.types.core.elementTypeSetConfiguration">
+         <elementTypeSet
+               clientContextID="org.eclipse.papyrus.infra.services.edit.TypeContext"
+               path="model/OMSimulator.elementtypesconfigurations">
+         </elementTypeSet>
+      </extension>
+      
+          <extension
+         point="org.eclipse.emf.validation.constraintProviders">
+      <category
+            id="org.eclipse.papyrus.moka.ssp.profile.validation.category"
+            name="Moka FMI/SSP Profile validation">
+      </category>
+      <constraintProvider
+            cache="true"
+            mode="Live">
+         <package
+               namespaceUri="http://www.eclipse.org/uml2/5.0.0/UML">
+         </package>
+         <constraints
+               categories="org.eclipse.papyrus.moka.ssp.profile.validation.category">
+            <constraint
+                  class="org.eclipse.papyrus.moka.ssp.omsimulatorprofile.validation.ConnectorConstraint"
+                  id="org.eclipse.papyrus.moka.fmi.profile.validation.constraint.connector_validation.live"
+                  lang="Java"
+                  mode="Live"
+                  name="FMI connector live validation"
+                  severity="ERROR"
+                  statusCode="1">
+               <message>
+                  [FMI] {0}
+               </message>
+               <description>
+                  FMI connectors should match types and direction
+               </description>
+               <target
+                     class="Connector">
+               </target>
+            </constraint>
+         </constraints>
+      </constraintProvider>
+      <constraintProvider
+            cache="true"
+            mode="Batch">
+         <package
+               namespaceUri="http://www.eclipse.org/uml2/5.0.0/UML">
+         </package>
+         <constraints
+               categories="org.eclipse.papyrus.moka.ssp.profile.validation.category">
+            <constraint
+                  class="org.eclipse.papyrus.moka.ssp.omsimulatorprofile.validation.ConnectorConstraint"
+                  id="org.eclipse.papyrus.moka.fmi.profile.validation.constraint.connector_validation.batch"
+                  lang="Java"
+                  mode="Batch"
+                  name="FMI connector batch validation"
+                  severity="ERROR"
+                  statusCode="1">
+               <message>
+                  [FMI] {0}
+               </message>
+               <description>
+                  FMI connectors should match types and direction
+               </description>
+               <target
+                     class="Connector">
+               </target>
+            </constraint>
+         </constraints>
+      </constraintProvider>
+   </extension>
+   <extension
+         point="org.eclipse.emf.validation.constraintBindings">
+      <clientContext
+            id="org.eclipse.papyrus.moka.ssp.profile.validation.context">
+         <selector
+               class="org.eclipse.papyrus.moka.ssp.omsimulatorprofile.validation.ClientSelector">
+         </selector>
+      </clientContext>
+      <binding
+            context="org.eclipse.papyrus.moka.ssp.profile.validation.context">
+         <category
+               ref="org.eclipse.papyrus.moka.ssp.profile.validation.category">
+         </category>
+      </binding>
+   </extension>
+ 
 </plugin>
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/Interpolation.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/Interpolation.java
index b75cb67..775062d 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/Interpolation.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/Interpolation.java
@@ -223,6 +223,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getValue() {
 	  return value;
 	}
@@ -232,6 +233,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getName() {
 	  return name;
 	}
@@ -241,6 +243,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getLiteral() {
 	  return literal;
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/OMSimulatorBus.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/OMSimulatorBus.java
index 436f9fb..bc44de7 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/OMSimulatorBus.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/OMSimulatorBus.java
@@ -17,6 +17,7 @@
 
 import org.eclipse.emf.ecore.EObject;
 
+import org.eclipse.papyrus.sysml14.portsandflows.FlowDirection;
 import org.eclipse.uml2.uml.Port;
 import org.eclipse.uml2.uml.Type;
 
@@ -36,6 +37,7 @@
  *   <li>{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus#getBase_Port <em>Base Port</em>}</li>
  *   <li>{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus#getSignals <em>Signals</em>}</li>
  *   <li>{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus#getDomain <em>Domain</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus#getDirection <em>Direction</em>}</li>
  * </ul>
  *
  * @see org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorPackage#getOMSimulatorBus()
@@ -135,4 +137,33 @@
 	 */
 	EList<TLMDomain> getDomain();
 
+	/**
+	 * Returns the value of the '<em><b>Direction</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.papyrus.sysml14.portsandflows.FlowDirection}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Direction</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Direction</em>' attribute.
+	 * @see org.eclipse.papyrus.sysml14.portsandflows.FlowDirection
+	 * @see #setDirection(FlowDirection)
+	 * @see org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorPackage#getOMSimulatorBus_Direction()
+	 * @model required="true" transient="true" volatile="true" derived="true" ordered="false"
+	 * @generated
+	 */
+	FlowDirection getDirection();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus#getDirection <em>Direction</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Direction</em>' attribute.
+	 * @see org.eclipse.papyrus.sysml14.portsandflows.FlowDirection
+	 * @see #getDirection()
+	 * @generated
+	 */
+	void setDirection(FlowDirection value);
+
 } // OMSimulatorBus
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/OMSimulatorPackage.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/OMSimulatorPackage.java
index d54e9cd..d3bbcd2 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/OMSimulatorPackage.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/OMSimulatorPackage.java
@@ -280,13 +280,31 @@
 	int OM_SIMULATOR_BUS__DOMAIN = 2;
 
 	/**
+	 * The feature id for the '<em><b>Direction</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OM_SIMULATOR_BUS__DIRECTION = 3;
+
+	/**
 	 * The number of structural features of the '<em>Bus</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int OM_SIMULATOR_BUS_FEATURE_COUNT = 3;
+	int OM_SIMULATOR_BUS_FEATURE_COUNT = 4;
+
+	/**
+	 * The operation id for the '<em>Get Direction</em>' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int OM_SIMULATOR_BUS___GET_DIRECTION = 0;
 
 	/**
 	 * The number of operations of the '<em>Bus</em>' class.
@@ -295,7 +313,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int OM_SIMULATOR_BUS_OPERATION_COUNT = 0;
+	int OM_SIMULATOR_BUS_OPERATION_COUNT = 1;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.impl.BusConnectionEndImpl <em>Bus Connection End</em>}' class.
@@ -718,6 +736,27 @@
 	EAttribute getOMSimulatorBus_Domain();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus#getDirection <em>Direction</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Direction</em>'.
+	 * @see org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus#getDirection()
+	 * @see #getOMSimulatorBus()
+	 * @generated
+	 */
+	EAttribute getOMSimulatorBus_Direction();
+
+	/**
+	 * Returns the meta object for the '{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus#getDirection() <em>Get Direction</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the '<em>Get Direction</em>' operation.
+	 * @see org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus#getDirection()
+	 * @generated
+	 */
+	EOperation getOMSimulatorBus__GetDirection();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.BusConnectionEnd <em>Bus Connection End</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1099,6 +1138,22 @@
 		EAttribute OM_SIMULATOR_BUS__DOMAIN = eINSTANCE.getOMSimulatorBus_Domain();
 
 		/**
+		 * The meta object literal for the '<em><b>Direction</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute OM_SIMULATOR_BUS__DIRECTION = eINSTANCE.getOMSimulatorBus_Direction();
+
+		/**
+		 * The meta object literal for the '<em><b>Get Direction</b></em>' operation.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EOperation OM_SIMULATOR_BUS___GET_DIRECTION = eINSTANCE.getOMSimulatorBus__GetDirection();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.impl.BusConnectionEndImpl <em>Bus Connection End</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/TLMDomain.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/TLMDomain.java
index 1a38c5b..a8a7c1d 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/TLMDomain.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/TLMDomain.java
@@ -304,6 +304,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getValue() {
 	  return value;
 	}
@@ -313,6 +314,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getName() {
 	  return name;
 	}
@@ -322,6 +324,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public String getLiteral() {
 	  return literal;
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/BusConnectionEndImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/BusConnectionEndImpl.java
index 31df001..b7c68fa 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/BusConnectionEndImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/BusConnectionEndImpl.java
@@ -100,6 +100,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public ConnectorEnd getBase_ConnectorEnd() {
 		if (base_ConnectorEnd != null && base_ConnectorEnd.eIsProxy()) {
 			InternalEObject oldBase_ConnectorEnd = (InternalEObject)base_ConnectorEnd;
@@ -126,6 +127,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_ConnectorEnd(ConnectorEnd newBase_ConnectorEnd) {
 		ConnectorEnd oldBase_ConnectorEnd = base_ConnectorEnd;
 		base_ConnectorEnd = newBase_ConnectorEnd;
@@ -138,6 +140,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EList<Port> getReferencedSignal() {
 		if (referencedSignal == null) {
 			referencedSignal = new EObjectResolvingEList<Port>(Port.class, this, OMSimulatorPackage.BUS_CONNECTION_END__REFERENCED_SIGNAL);
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/BusConnectorImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/BusConnectorImpl.java
index 2c1bb5d..a3c5b51 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/BusConnectorImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/BusConnectorImpl.java
@@ -94,6 +94,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Connector getBase_Connector() {
 		if (base_Connector != null && base_Connector.eIsProxy()) {
 			InternalEObject oldBase_Connector = (InternalEObject)base_Connector;
@@ -120,6 +121,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Connector(Connector newBase_Connector) {
 		Connector oldBase_Connector = base_Connector;
 		base_Connector = newBase_Connector;
@@ -132,6 +134,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Property getEnd1Component() {
 		Property end1Component = basicGetEnd1Component();
 		return end1Component != null && end1Component.eIsProxy() ? (Property)eResolveProxy((InternalEObject)end1Component) : end1Component;
@@ -151,6 +154,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setEnd1Component(Property newEnd1Component) {
 		// TODO: implement this method to set the 'End1 Component' reference
 		// Ensure that you remove @generated or mark it @generated NOT
@@ -162,6 +166,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EList<Port> getEnd1Signals() {
 		return BusConnectorOperations.getEnd1Signals(this);
 	}
@@ -196,6 +201,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EList<Port> getEnd2Signals() {
 		return BusConnectorOperations.getEnd2Signals(this);
 	}
@@ -230,6 +236,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Property getEnd2Component() {
 		Property end2Component = basicGetEnd2Component();
 		return end2Component != null && end2Component.eIsProxy() ? (Property)eResolveProxy((InternalEObject)end2Component) : end2Component;
@@ -249,6 +256,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setEnd2Component(Property newEnd2Component) {
 		// TODO: implement this method to set the 'End2 Component' reference
 		// Ensure that you remove @generated or mark it @generated NOT
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorBusImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorBusImpl.java
index f35ccf4..f7eab84 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorBusImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorBusImpl.java
@@ -32,6 +32,8 @@
 import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorPackage;
 import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.TLMDomain;
 
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.operations.OMSimulatorBusOperations;
+import org.eclipse.papyrus.sysml14.portsandflows.FlowDirection;
 import org.eclipse.uml2.uml.Port;
 import org.eclipse.uml2.uml.Type;
 
@@ -46,6 +48,7 @@
  *   <li>{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.impl.OMSimulatorBusImpl#getBase_Port <em>Base Port</em>}</li>
  *   <li>{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.impl.OMSimulatorBusImpl#getSignals <em>Signals</em>}</li>
  *   <li>{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.impl.OMSimulatorBusImpl#getDomain <em>Domain</em>}</li>
+ *   <li>{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.impl.OMSimulatorBusImpl#getDirection <em>Direction</em>}</li>
  * </ul>
  *
  * @generated
@@ -89,6 +92,16 @@
 	protected EList<TLMDomain> domain;
 
 	/**
+	 * The default value of the '{@link #getDirection() <em>Direction</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDirection()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final FlowDirection DIRECTION_EDEFAULT = FlowDirection.IN;
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
@@ -112,6 +125,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Port getBase_Port() {
 		if (base_Port != null && base_Port.eIsProxy()) {
 			InternalEObject oldBase_Port = (InternalEObject)base_Port;
@@ -138,6 +152,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Port(Port newBase_Port) {
 		Port oldBase_Port = base_Port;
 		base_Port = newBase_Port;
@@ -150,6 +165,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EList<Port> getSignals() {
 		if (signals == null) {
 			signals = new EObjectResolvingEList<Port>(Port.class, this, OMSimulatorPackage.OM_SIMULATOR_BUS__SIGNALS);
@@ -187,6 +203,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EList<TLMDomain> getDomain() {
 		if (domain == null) {
 			domain = new EDataTypeUniqueEList<TLMDomain>(TLMDomain.class, this, OMSimulatorPackage.OM_SIMULATOR_BUS__DOMAIN);
@@ -200,6 +217,28 @@
 	 * @generated
 	 */
 	@Override
+	public FlowDirection getDirection() {
+		return OMSimulatorBusOperations.getDirection(this);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void setDirection(FlowDirection newDirection) {
+		// TODO: implement this method to set the 'Direction' attribute
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
 			case OMSimulatorPackage.OM_SIMULATOR_BUS__BASE_PORT:
@@ -209,6 +248,8 @@
 				return getSignals();
 			case OMSimulatorPackage.OM_SIMULATOR_BUS__DOMAIN:
 				return getDomain();
+			case OMSimulatorPackage.OM_SIMULATOR_BUS__DIRECTION:
+				return getDirection();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -233,6 +274,9 @@
 				getDomain().clear();
 				getDomain().addAll((Collection<? extends TLMDomain>)newValue);
 				return;
+			case OMSimulatorPackage.OM_SIMULATOR_BUS__DIRECTION:
+				setDirection((FlowDirection)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -254,6 +298,9 @@
 			case OMSimulatorPackage.OM_SIMULATOR_BUS__DOMAIN:
 				getDomain().clear();
 				return;
+			case OMSimulatorPackage.OM_SIMULATOR_BUS__DIRECTION:
+				setDirection(DIRECTION_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -272,6 +319,8 @@
 				return signals != null && !signals.isEmpty();
 			case OMSimulatorPackage.OM_SIMULATOR_BUS__DOMAIN:
 				return domain != null && !domain.isEmpty();
+			case OMSimulatorPackage.OM_SIMULATOR_BUS__DIRECTION:
+				return getDirection() != DIRECTION_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorFactoryImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorFactoryImpl.java
index 03bf09a..1a4092d 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorFactoryImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorFactoryImpl.java
@@ -126,6 +126,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public TLMInterfaceDefinition createTLMInterfaceDefinition() {
 		TLMInterfaceDefinitionImpl tlmInterfaceDefinition = new TLMInterfaceDefinitionImpl();
 		return tlmInterfaceDefinition;
@@ -136,6 +137,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public TLMSignalDefinition createTLMSignalDefinition() {
 		TLMSignalDefinitionImpl tlmSignalDefinition = new TLMSignalDefinitionImpl();
 		return tlmSignalDefinition;
@@ -146,6 +148,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public TLMSignal createTLMSignal() {
 		TLMSignalImpl tlmSignal = new TLMSignalImpl();
 		return tlmSignal;
@@ -156,6 +159,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public OMSimulatorBus createOMSimulatorBus() {
 		OMSimulatorBusImpl omSimulatorBus = new OMSimulatorBusImpl();
 		return omSimulatorBus;
@@ -166,6 +170,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public BusConnectionEnd createBusConnectionEnd() {
 		BusConnectionEndImpl busConnectionEnd = new BusConnectionEndImpl();
 		return busConnectionEnd;
@@ -176,6 +181,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public TLMConnection createTLMConnection() {
 		TLMConnectionImpl tlmConnection = new TLMConnectionImpl();
 		return tlmConnection;
@@ -186,6 +192,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public BusConnector createBusConnector() {
 		BusConnectorImpl busConnector = new BusConnectorImpl();
 		return busConnector;
@@ -236,6 +243,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public OMSimulatorPackage getOMSimulatorPackage() {
 		return (OMSimulatorPackage)getEPackage();
 	}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorPackageImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorPackageImpl.java
index b105c26..dbb0275 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorPackageImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/OMSimulatorPackageImpl.java
@@ -35,9 +35,12 @@
 import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.TLMSignal;
 import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.TLMSignalDefinition;
 
+import org.eclipse.papyrus.sysml14.portsandflows.PortsandflowsPackage;
+import org.eclipse.papyrus.sysml14.sysmlPackage;
 import org.eclipse.uml2.types.TypesPackage;
 
 import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.profile.standard.StandardPackage;
 
 /**
  * <!-- begin-user-doc -->
@@ -165,6 +168,8 @@
 
 		// Initialize simple dependencies
 		EcorePackage.eINSTANCE.eClass();
+		StandardPackage.eINSTANCE.eClass();
+		sysmlPackage.eINSTANCE.eClass();
 		TypesPackage.eINSTANCE.eClass();
 		UMLPackage.eINSTANCE.eClass();
 
@@ -187,6 +192,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getTLMInterfaceDefinition() {
 		return tlmInterfaceDefinitionEClass;
 	}
@@ -196,6 +202,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getTLMInterfaceDefinition_Interpolation() {
 		return (EAttribute)tlmInterfaceDefinitionEClass.getEStructuralFeatures().get(0);
 	}
@@ -205,6 +212,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getTLMInterfaceDefinition_Base_Interface() {
 		return (EReference)tlmInterfaceDefinitionEClass.getEStructuralFeatures().get(1);
 	}
@@ -214,6 +222,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getTLMInterfaceDefinition_Base_Class() {
 		return (EReference)tlmInterfaceDefinitionEClass.getEStructuralFeatures().get(2);
 	}
@@ -223,6 +232,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getTLMInterfaceDefinition_SignalDefinitions() {
 		return (EReference)tlmInterfaceDefinitionEClass.getEStructuralFeatures().get(3);
 	}
@@ -232,6 +242,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getTLMInterfaceDefinition_Dimensions() {
 		return (EAttribute)tlmInterfaceDefinitionEClass.getEStructuralFeatures().get(4);
 	}
@@ -241,6 +252,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EOperation getTLMInterfaceDefinition__GetSignalDefinitions() {
 		return tlmInterfaceDefinitionEClass.getEOperations().get(0);
 	}
@@ -250,6 +262,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getTLMSignalDefinition() {
 		return tlmSignalDefinitionEClass;
 	}
@@ -259,6 +272,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getTLMSignalDefinition_Base_Port() {
 		return (EReference)tlmSignalDefinitionEClass.getEStructuralFeatures().get(0);
 	}
@@ -268,6 +282,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getTLMSignal() {
 		return tlmSignalEClass;
 	}
@@ -277,6 +292,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getTLMSignal_Base_Port() {
 		return (EReference)tlmSignalEClass.getEStructuralFeatures().get(0);
 	}
@@ -286,6 +302,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getTLMSignal_Definition() {
 		return (EReference)tlmSignalEClass.getEStructuralFeatures().get(1);
 	}
@@ -295,6 +312,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getOMSimulatorBus() {
 		return omSimulatorBusEClass;
 	}
@@ -304,6 +322,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getOMSimulatorBus_Base_Port() {
 		return (EReference)omSimulatorBusEClass.getEStructuralFeatures().get(0);
 	}
@@ -313,6 +332,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getOMSimulatorBus_Signals() {
 		return (EReference)omSimulatorBusEClass.getEStructuralFeatures().get(1);
 	}
@@ -322,6 +342,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getOMSimulatorBus_Domain() {
 		return (EAttribute)omSimulatorBusEClass.getEStructuralFeatures().get(2);
 	}
@@ -331,6 +352,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
+	public EAttribute getOMSimulatorBus_Direction() {
+		return (EAttribute)omSimulatorBusEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EOperation getOMSimulatorBus__GetDirection() {
+		return omSimulatorBusEClass.getEOperations().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public EClass getBusConnectionEnd() {
 		return busConnectionEndEClass;
 	}
@@ -340,6 +382,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getBusConnectionEnd_Base_ConnectorEnd() {
 		return (EReference)busConnectionEndEClass.getEStructuralFeatures().get(0);
 	}
@@ -349,6 +392,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getBusConnectionEnd_ReferencedSignal() {
 		return (EReference)busConnectionEndEClass.getEStructuralFeatures().get(1);
 	}
@@ -358,6 +402,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getTLMConnection() {
 		return tlmConnectionEClass;
 	}
@@ -367,6 +412,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getTLMConnection_Timedelay() {
 		return (EAttribute)tlmConnectionEClass.getEStructuralFeatures().get(0);
 	}
@@ -376,6 +422,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getTLMConnection_Impedance() {
 		return (EAttribute)tlmConnectionEClass.getEStructuralFeatures().get(1);
 	}
@@ -385,6 +432,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getTLMConnection_Rotationalimpedance() {
 		return (EAttribute)tlmConnectionEClass.getEStructuralFeatures().get(2);
 	}
@@ -394,6 +442,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EAttribute getTLMConnection_Alpha() {
 		return (EAttribute)tlmConnectionEClass.getEStructuralFeatures().get(3);
 	}
@@ -403,6 +452,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getTLMConnection_Base_Connector() {
 		return (EReference)tlmConnectionEClass.getEStructuralFeatures().get(4);
 	}
@@ -412,6 +462,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EClass getBusConnector() {
 		return busConnectorEClass;
 	}
@@ -421,6 +472,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getBusConnector_Base_Connector() {
 		return (EReference)busConnectorEClass.getEStructuralFeatures().get(0);
 	}
@@ -430,6 +482,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getBusConnector_End1Component() {
 		return (EReference)busConnectorEClass.getEStructuralFeatures().get(1);
 	}
@@ -439,6 +492,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getBusConnector_End1Signals() {
 		return (EReference)busConnectorEClass.getEStructuralFeatures().get(2);
 	}
@@ -448,6 +502,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getBusConnector_End2Signals() {
 		return (EReference)busConnectorEClass.getEStructuralFeatures().get(3);
 	}
@@ -457,6 +512,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EReference getBusConnector_End2Component() {
 		return (EReference)busConnectorEClass.getEStructuralFeatures().get(4);
 	}
@@ -466,6 +522,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EOperation getBusConnector__GetEnd1Component() {
 		return busConnectorEClass.getEOperations().get(0);
 	}
@@ -475,6 +532,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EOperation getBusConnector__GetEnd2Component() {
 		return busConnectorEClass.getEOperations().get(1);
 	}
@@ -484,6 +542,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EOperation getBusConnector__GetEnd1Signals() {
 		return busConnectorEClass.getEOperations().get(2);
 	}
@@ -493,6 +552,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EOperation getBusConnector__GetEnd2Signals() {
 		return busConnectorEClass.getEOperations().get(3);
 	}
@@ -502,6 +562,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EEnum getInterpolation() {
 		return interpolationEEnum;
 	}
@@ -511,6 +572,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EEnum getTLMDomain() {
 		return tlmDomainEEnum;
 	}
@@ -520,6 +582,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public OMSimulatorFactory getOMSimulatorFactory() {
 		return (OMSimulatorFactory)getEFactoryInstance();
 	}
@@ -562,6 +625,8 @@
 		createEReference(omSimulatorBusEClass, OM_SIMULATOR_BUS__BASE_PORT);
 		createEReference(omSimulatorBusEClass, OM_SIMULATOR_BUS__SIGNALS);
 		createEAttribute(omSimulatorBusEClass, OM_SIMULATOR_BUS__DOMAIN);
+		createEAttribute(omSimulatorBusEClass, OM_SIMULATOR_BUS__DIRECTION);
+		createEOperation(omSimulatorBusEClass, OM_SIMULATOR_BUS___GET_DIRECTION);
 
 		busConnectionEndEClass = createEClass(BUS_CONNECTION_END);
 		createEReference(busConnectionEndEClass, BUS_CONNECTION_END__BASE_CONNECTOR_END);
@@ -616,6 +681,7 @@
 		// Obtain other dependent packages
 		UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
 		TypesPackage theTypesPackage = (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);
+		PortsandflowsPackage thePortsandflowsPackage = (PortsandflowsPackage)EPackage.Registry.INSTANCE.getEPackage(PortsandflowsPackage.eNS_URI);
 
 		// Create type parameters
 
@@ -644,6 +710,9 @@
 		initEReference(getOMSimulatorBus_Base_Port(), theUMLPackage.getPort(), null, "base_Port", null, 1, 1, OMSimulatorBus.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 		initEReference(getOMSimulatorBus_Signals(), theUMLPackage.getPort(), null, "signals", null, 0, -1, OMSimulatorBus.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getOMSimulatorBus_Domain(), this.getTLMDomain(), "domain", null, 0, -1, OMSimulatorBus.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getOMSimulatorBus_Direction(), thePortsandflowsPackage.getFlowDirection(), "direction", null, 1, 1, OMSimulatorBus.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, !IS_ORDERED);
+
+		initEOperation(getOMSimulatorBus__GetDirection(), thePortsandflowsPackage.getFlowDirection(), "getDirection", 1, 1, IS_UNIQUE, !IS_ORDERED);
 
 		initEClass(busConnectionEndEClass, BusConnectionEnd.class, "BusConnectionEnd", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getBusConnectionEnd_Base_ConnectorEnd(), theUMLPackage.getConnectorEnd(), null, "base_ConnectorEnd", null, 1, 1, BusConnectionEnd.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMConnectionImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMConnectionImpl.java
index 29df3a5..3bcd2c0 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMConnectionImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMConnectionImpl.java
@@ -165,6 +165,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getTimedelay() {
 		return timedelay;
 	}
@@ -174,6 +175,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setTimedelay(double newTimedelay) {
 		double oldTimedelay = timedelay;
 		timedelay = newTimedelay;
@@ -186,6 +188,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getImpedance() {
 		return impedance;
 	}
@@ -195,6 +198,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setImpedance(double newImpedance) {
 		double oldImpedance = impedance;
 		impedance = newImpedance;
@@ -207,6 +211,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getRotationalimpedance() {
 		return rotationalimpedance;
 	}
@@ -216,6 +221,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setRotationalimpedance(double newRotationalimpedance) {
 		double oldRotationalimpedance = rotationalimpedance;
 		rotationalimpedance = newRotationalimpedance;
@@ -228,6 +234,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public double getAlpha() {
 		return alpha;
 	}
@@ -237,6 +244,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setAlpha(double newAlpha) {
 		double oldAlpha = alpha;
 		alpha = newAlpha;
@@ -249,6 +257,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Connector getBase_Connector() {
 		if (base_Connector != null && base_Connector.eIsProxy()) {
 			InternalEObject oldBase_Connector = (InternalEObject)base_Connector;
@@ -275,6 +284,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Connector(Connector newBase_Connector) {
 		Connector oldBase_Connector = base_Connector;
 		base_Connector = newBase_Connector;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMInterfaceDefinitionImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMInterfaceDefinitionImpl.java
index 1fdca68..6514295 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMInterfaceDefinitionImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMInterfaceDefinitionImpl.java
@@ -143,6 +143,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Interpolation getInterpolation() {
 		return interpolation;
 	}
@@ -152,6 +153,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setInterpolation(Interpolation newInterpolation) {
 		Interpolation oldInterpolation = interpolation;
 		interpolation = newInterpolation == null ? INTERPOLATION_EDEFAULT : newInterpolation;
@@ -164,6 +166,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Interface getBase_Interface() {
 		if (base_Interface != null && base_Interface.eIsProxy()) {
 			InternalEObject oldBase_Interface = (InternalEObject)base_Interface;
@@ -190,6 +193,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Interface(Interface newBase_Interface) {
 		Interface oldBase_Interface = base_Interface;
 		base_Interface = newBase_Interface;
@@ -202,6 +206,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public org.eclipse.uml2.uml.Class getBase_Class() {
 		if (base_Class != null && base_Class.eIsProxy()) {
 			InternalEObject oldBase_Class = (InternalEObject)base_Class;
@@ -228,6 +233,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
 		org.eclipse.uml2.uml.Class oldBase_Class = base_Class;
 		base_Class = newBase_Class;
@@ -240,6 +246,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public EList<TLMSignalDefinition> getSignalDefinitions() {
 		return TLMInterfaceDefinitionOperations.getSignalDefinitions(this);
 	}
@@ -249,6 +256,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public int getDimensions() {
 		return dimensions;
 	}
@@ -258,6 +266,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setDimensions(int newDimensions) {
 		int oldDimensions = dimensions;
 		dimensions = newDimensions;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMSignalDefinitionImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMSignalDefinitionImpl.java
index 8281bab..5160e15 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMSignalDefinitionImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMSignalDefinitionImpl.java
@@ -81,6 +81,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Port getBase_Port() {
 		if (base_Port != null && base_Port.eIsProxy()) {
 			InternalEObject oldBase_Port = (InternalEObject)base_Port;
@@ -107,6 +108,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Port(Port newBase_Port) {
 		Port oldBase_Port = base_Port;
 		base_Port = newBase_Port;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMSignalImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMSignalImpl.java
index c0aaa99..d0fd080 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMSignalImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/impl/TLMSignalImpl.java
@@ -93,6 +93,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public Port getBase_Port() {
 		if (base_Port != null && base_Port.eIsProxy()) {
 			InternalEObject oldBase_Port = (InternalEObject)base_Port;
@@ -119,6 +120,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setBase_Port(Port newBase_Port) {
 		Port oldBase_Port = base_Port;
 		base_Port = newBase_Port;
@@ -131,6 +133,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public TLMSignalDefinition getDefinition() {
 		if (definition != null && definition.eIsProxy()) {
 			InternalEObject oldDefinition = (InternalEObject)definition;
@@ -157,6 +160,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@Override
 	public void setDefinition(TLMSignalDefinition newDefinition) {
 		TLMSignalDefinition oldDefinition = definition;
 		definition = newDefinition;
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/Ssd.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/Ssd.java
index 2e75757..6d8c2aa 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/Ssd.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/Ssd.java
@@ -79,7 +79,7 @@
 	 * @return the value of the '<em>Name</em>' attribute.
 	 * @see #setName(String)
 	 * @see org.eclipse.papyrus.moka.ssp.profile.SSPProfilePackage#getSsd_Name()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	String getName();
@@ -105,7 +105,7 @@
 	 * @return the value of the '<em>Version</em>' attribute.
 	 * @see #setVersion(String)
 	 * @see org.eclipse.papyrus.moka.ssp.profile.SSPProfilePackage#getSsd_Version()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	String getVersion();
@@ -131,7 +131,7 @@
 	 * @return the value of the '<em>Main System</em>' reference.
 	 * @see #setMainSystem(SsdSystem)
 	 * @see org.eclipse.papyrus.moka.ssp.profile.SSPProfilePackage#getSsd_MainSystem()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	SsdSystem getMainSystem();
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/SsdComponent.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/SsdComponent.java
index 9de8931..ae14109 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/SsdComponent.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/SsdComponent.java
@@ -55,7 +55,7 @@
 	 * @return the value of the '<em>Source</em>' attribute.
 	 * @see #setSource(String)
 	 * @see org.eclipse.papyrus.moka.ssp.profile.SSPProfilePackage#getSsdComponent_Source()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	String getSource();
@@ -81,7 +81,7 @@
 	 * @return the value of the '<em>Type</em>' attribute.
 	 * @see #setType(String)
 	 * @see org.eclipse.papyrus.moka.ssp.profile.SSPProfilePackage#getSsdComponent_Type()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	String getType();
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/SsdConnector.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/SsdConnector.java
index eb8df7a..72bc3d2 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/SsdConnector.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/SsdConnector.java
@@ -51,7 +51,7 @@
 	 * @return the value of the '<em>SSD Description</em>' attribute.
 	 * @see #setSSDDescription(String)
 	 * @see org.eclipse.papyrus.moka.ssp.profile.SSPProfilePackage#getSsdConnector_SSDDescription()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	String getSSDDescription();
@@ -79,7 +79,7 @@
 	 * @see org.eclipse.papyrus.moka.ssp.profile.TypeKind
 	 * @see #setTypeKind(TypeKind)
 	 * @see org.eclipse.papyrus.moka.ssp.profile.SSPProfilePackage#getSsdConnector_TypeKind()
-	 * @model required="true" ordered="false"
+	 * @model ordered="false"
 	 * @generated
 	 */
 	TypeKind getTypeKind();
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/impl/SSPProfilePackageImpl.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/impl/SSPProfilePackageImpl.java
index 33cd390..183dc4a 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/impl/SSPProfilePackageImpl.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src-gen/org/eclipse/papyrus/moka/ssp/profile/impl/SSPProfilePackageImpl.java
@@ -552,8 +552,8 @@
 		initEReference(getSsdConnection_EndSsdProperty(), theUMLPackage.getProperty(), null, "endSsdProperty", null, 0, 1, SsdConnection.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED);
 
 		initEClass(ssdConnectorEClass, SsdConnector.class, "SsdConnector", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getSsdConnector_SSDDescription(), ecorePackage.getEString(), "SSDDescription", null, 1, 1, SsdConnector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getSsdConnector_TypeKind(), this.getTypeKind(), "typeKind", null, 1, 1, SsdConnector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getSsdConnector_SSDDescription(), ecorePackage.getEString(), "SSDDescription", null, 0, 1, SsdConnector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getSsdConnector_TypeKind(), this.getTypeKind(), "typeKind", null, 0, 1, SsdConnector.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
 		initEClass(ssdElementEClass, SsdElement.class, "SsdElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getSsdElement_ID(), ecorePackage.getEString(), "ID", null, 0, 1, SsdElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
@@ -565,16 +565,16 @@
 		initEReference(getSsdSignalDictionaryReference_Base_Class(), theUMLPackage.getClass_(), null, "base_Class", null, 1, 1, SsdSignalDictionaryReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
 		initEClass(ssdComponentEClass, SsdComponent.class, "SsdComponent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getSsdComponent_Source(), ecorePackage.getEString(), "source", null, 1, 1, SsdComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getSsdComponent_Type(), ecorePackage.getEString(), "type", null, 1, 1, SsdComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getSsdComponent_Source(), ecorePackage.getEString(), "source", null, 0, 1, SsdComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getSsdComponent_Type(), ecorePackage.getEString(), "type", null, 0, 1, SsdComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 		initEReference(getSsdComponent_Fmu(), theFMIProfilePackage.getFMU(), null, "fmu", null, 0, 1, SsdComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 		initEReference(getSsdComponent_Base_Property(), theUMLPackage.getProperty(), null, "base_Property", null, 1, 1, SsdComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
 		initEClass(ssdEClass, Ssd.class, "Ssd", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getSsd_Base_Package(), theUMLPackage.getPackage(), null, "base_Package", null, 1, 1, Ssd.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getSsd_Name(), ecorePackage.getEString(), "name", null, 1, 1, Ssd.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEAttribute(getSsd_Version(), ecorePackage.getEString(), "version", null, 1, 1, Ssd.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
-		initEReference(getSsd_MainSystem(), this.getSsdSystem(), null, "mainSystem", null, 1, 1, Ssd.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getSsd_Name(), ecorePackage.getEString(), "name", null, 0, 1, Ssd.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getSsd_Version(), ecorePackage.getEString(), "version", null, 0, 1, Ssd.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getSsd_MainSystem(), this.getSsdSystem(), null, "mainSystem", null, 0, 1, Ssd.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
 
 		initEClass(ssdConnectorAndFmiPortEClass, SsdConnectorAndFmiPort.class, "SsdConnectorAndFmiPort", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/edit/OMSimulatorBusEditHelper.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/edit/OMSimulatorBusEditHelper.java
new file mode 100644
index 0000000..c3c85d6
--- /dev/null
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/edit/OMSimulatorBusEditHelper.java
@@ -0,0 +1,102 @@
+/*****************************************************************************
+ * Copyright (c) 2019 CEA LIST and others.
+ * 
+ * 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:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.ssp.omsimulatorprofile.edit;
+
+import java.util.Collections;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.edithelper.AbstractEditHelperAdvice;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.IEditCommandRequest;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.util.OMSimulatorProfileUtil;
+import org.eclipse.uml2.uml.ConnectableElement;
+import org.eclipse.uml2.uml.Connector;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+public class OMSimulatorBusEditHelper extends AbstractEditHelperAdvice{
+	
+@Override
+protected ICommand getAfterConfigureCommand(ConfigureRequest request) {
+	EObject createdElement = request.getElementToConfigure();
+	if (createdElement instanceof Connector) {
+	
+		Connector connector = (Connector) createdElement;
+		ConnectableElement sourceRole = getSourceRole(request);
+		ConnectableElement targetRole = getTargetRole(request);
+		
+		if ( sourceRole instanceof Port && targetRole instanceof Port) {
+			Port port1 = (Port) sourceRole;
+			Port port2 = (Port)targetRole;
+			if (UMLUtil.getStereotypeApplication(port1, OMSimulatorBus.class ) != null && UMLUtil.getStereotypeApplication(port2, OMSimulatorBus.class) != null) {
+				return new AbstractTransactionalCommand(request.getEditingDomain(), "applyOMSimulatorBusStereo ",  Collections.emptyList()) {
+					
+					@Override
+					protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+						UMLUtil.safeApplyStereotype(connector, (Stereotype) UMLUtil.getResourceSet(connector).getEObject(OMSimulatorProfileUtil.OMSIMULATOR_BUS_CONNECTOR_URI, true));
+						return CommandResult.newOKCommandResult();
+					}
+				};
+			}
+		}
+	}
+	return null;
+}
+	
+
+
+
+/**
+ * This method provides the source role provided as {@link ConfigureRequest} parameter.
+ * 
+ * @return the target role
+ */
+private ConnectableElement getSourceRole(IEditCommandRequest req) {
+	ConnectableElement result = null;
+	Object paramObject = req.getParameter(CreateRelationshipRequest.SOURCE);
+	if(paramObject instanceof ConnectableElement) {
+		result = (ConnectableElement)paramObject;
+	}
+
+	return result;
+}
+
+/**
+ * This method provides the target role provided as {@link ConfigureRequest} parameter.
+ * 
+ * @return the target role
+ */
+private ConnectableElement getTargetRole(IEditCommandRequest req) {
+	ConnectableElement result = null;
+	Object paramObject = req.getParameter(CreateRelationshipRequest.TARGET);
+	if(paramObject instanceof ConnectableElement) {
+		result = (ConnectableElement)paramObject;
+	}
+
+	return result;
+}
+	
+}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/BusConnectorOperations.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/BusConnectorOperations.java
index 54874ac..54cee23 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/BusConnectorOperations.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/BusConnectorOperations.java
@@ -49,7 +49,7 @@
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @generated
 	 */
-	String copyright = "Copyright (c) 2018 CEA LIST.\n\n All rights reserved. This program and the accompanying materials\n are made available under the terms of the Eclipse Public License 2.0\n which accompanies this distribution, and is available at\n https://www.eclipse.org/legal/epl-2.0 \r\n\r\nSPDX-License-Identifier: EPL-2.0\n\n Contributors:\n  CEA LIST - Initial API and implementation";
+	public static final String copyright = "Copyright (c) 2018 CEA LIST.\n\n All rights reserved. This program and the accompanying materials\n are made available under the terms of the Eclipse Public License 2.0\n which accompanies this distribution, and is available at\n https://www.eclipse.org/legal/epl-2.0 \r\n\r\nSPDX-License-Identifier: EPL-2.0\n\n Contributors:\n  CEA LIST - Initial API and implementation";
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/OMSimulatorBusOperations.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/OMSimulatorBusOperations.java
new file mode 100644
index 0000000..7e463ab
--- /dev/null
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/OMSimulatorBusOperations.java
@@ -0,0 +1,88 @@
+/**
+ * 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 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:
+ *   CEA LIST - Initial API and implementation
+ */
+package org.eclipse.papyrus.moka.ssp.omsimulatorprofile.operations;
+
+import java.util.List;
+
+import org.eclipse.papyrus.moka.fmi.fmiprofile.FMIPort;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus;
+
+import org.eclipse.papyrus.sysml14.portsandflows.FlowDirection;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * A static utility class that provides operations related to '<em><b>Bus</b></em>' model objects.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following operations are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus#getDirection() <em>Get Direction</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class OMSimulatorBusOperations {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2018 CEA LIST.\n\n All rights reserved. This program and the accompanying materials\n are made available under the terms of the Eclipse Public License 2.0\n which accompanies this distribution, and is available at\n https://www.eclipse.org/legal/epl-2.0 \r\n\r\nSPDX-License-Identifier: EPL-2.0\n\n Contributors:\n  CEA LIST - Initial API and implementation";
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OMSimulatorBusOperations() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public static  FlowDirection getDirection(OMSimulatorBus omSimulatorBus) {
+		List<Port> ports = omSimulatorBus.getSignals();
+		if (ports.isEmpty()) {
+			return FlowDirection.INOUT;
+		}
+		boolean allInputs = true;
+		boolean allOutputs = true;
+		for (Port port: ports) {
+			FMIPort fmiPort = UMLUtil.getStereotypeApplication(port, FMIPort.class);
+			if (fmiPort!=null) {
+				FlowDirection direction = fmiPort.getDirection();
+				allInputs &= direction== FlowDirection.IN;
+				allOutputs &= direction == FlowDirection.OUT;
+			}
+		}
+		
+		if (allInputs) {
+			return FlowDirection.IN;
+		}else if (allOutputs) {
+			return FlowDirection.OUT;
+		}else {
+			return FlowDirection.INOUT;
+		}
+		
+		
+	}
+
+} // OMSimulatorBusOperations
\ No newline at end of file
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/TLMInterfaceDefinitionOperations.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/TLMInterfaceDefinitionOperations.java
index 909b500..508be08 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/TLMInterfaceDefinitionOperations.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/operations/TLMInterfaceDefinitionOperations.java
@@ -42,7 +42,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	String copyright = "Copyright (c) 2018 CEA LIST.\n\n All rights reserved. This program and the accompanying materials\n are made available under the terms of the Eclipse Public License 2.0\n which accompanies this distribution, and is available at\n https://www.eclipse.org/legal/epl-2.0 \r\n\r\nSPDX-License-Identifier: EPL-2.0\n\n Contributors:\n  CEA LIST - Initial API and implementation";
+	public static final String copyright = "Copyright (c) 2018 CEA LIST.\n\n All rights reserved. This program and the accompanying materials\n are made available under the terms of the Eclipse Public License 2.0\n which accompanies this distribution, and is available at\n https://www.eclipse.org/legal/epl-2.0 \r\n\r\nSPDX-License-Identifier: EPL-2.0\n\n Contributors:\n  CEA LIST - Initial API and implementation";
 
 	/**
 	 * <!-- begin-user-doc -->
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/util/OMSimulatorProfileUtil.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/util/OMSimulatorProfileUtil.java
index ce36895..853dd39 100644
--- a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/util/OMSimulatorProfileUtil.java
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/util/OMSimulatorProfileUtil.java
@@ -14,6 +14,9 @@
 package org.eclipse.papyrus.moka.ssp.omsimulatorprofile.util;
 
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.util.UMLUtil;
 
 public class OMSimulatorProfileUtil {
 
@@ -21,5 +24,12 @@
 	
 	public static URI OMSIMULATOR_BUS_URI = OMSIMULATOR_PROFILE_UML_URI.appendFragment("_DwNAgMVaEeiLVbFVoMGQrQ");
 	
+	public static URI OMSIMULATOR_BUS_CONNECTOR_URI = OMSIMULATOR_PROFILE_UML_URI.appendFragment("_XeSSkCYvEemDsJKy8GtZKA");
+
+	public static boolean isBus(Port port) {
+		
+		return UMLUtil.getStereotypeApplication(port, OMSimulatorBus.class) != null;
+	}
+	
 	
 }
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/validation/ClientSelector.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/validation/ClientSelector.java
new file mode 100644
index 0000000..c46260d
--- /dev/null
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/validation/ClientSelector.java
@@ -0,0 +1,30 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.ssp.omsimulatorprofile.validation;
+
+import org.eclipse.emf.validation.model.IClientSelector;
+import org.eclipse.uml2.uml.Element;
+
+/**
+ * THe client selector for constraints contributed by Moka
+ *
+ */
+public class ClientSelector implements IClientSelector {
+
+	@Override
+	public boolean selects(Object object) {
+		return (object instanceof Element);
+	}
+
+}
diff --git a/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/validation/ConnectorConstraint.java b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/validation/ConnectorConstraint.java
new file mode 100644
index 0000000..0e1b924
--- /dev/null
+++ b/bundles/fmi/language/org.eclipse.papyrus.moka.ssp.profile/src/org/eclipse/papyrus/moka/ssp/omsimulatorprofile/validation/ConnectorConstraint.java
@@ -0,0 +1,209 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.ssp.omsimulatorprofile.validation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.validation.AbstractModelConstraint;
+import org.eclipse.emf.validation.EMFEventType;
+import org.eclipse.emf.validation.IValidationContext;
+import org.eclipse.emf.validation.model.ConstraintStatus;
+import org.eclipse.papyrus.moka.fmi.fmiprofile.FMIPort;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.BusConnector;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus;
+import org.eclipse.uml2.uml.ConnectableElement;
+import org.eclipse.uml2.uml.Connector;
+import org.eclipse.uml2.uml.ConnectorEnd;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+public class ConnectorConstraint extends AbstractModelConstraint {
+
+	Set<Connector> firstRun = new HashSet<>();
+	
+	@Override
+	public IStatus validate(IValidationContext ctx) {
+
+		EMFEventType event = ctx.getEventType();
+		EStructuralFeature feature = ctx.getFeature();
+		Connector connector = (Connector) ctx.getTarget();
+
+		if ( ( feature == UMLPackage.eINSTANCE.getConnector_End() && firstRun.contains(connector))||event ==EMFEventType.NULL  ){
+			firstRun.remove(connector);
+			BusConnector busConnector = UMLUtil.getStereotypeApplication(connector, BusConnector.class);
+			if (busConnector != null) {
+				return checkBusConnector(busConnector, ctx);
+			} else {
+				return checkSimpleConnector(connector, ctx);
+			}
+		}else {
+			firstRun.add(connector);
+			return ctx.createSuccessStatus();
+		}
+		
+
+	}
+
+	private IStatus checkSimpleConnector(Connector connector, IValidationContext ctx) {
+		
+		if (connector.getEnds().size()==2) {
+			
+			ConnectorEnd end1 =  connector.getEnds().get(0);
+			ConnectorEnd end2 =  connector.getEnds().get(1);
+			
+			
+			ConnectableElement role1 =end1.getRole();
+			ConnectableElement role2 = end2.getRole();
+			
+			ConnectableElement part1 = end1.getPartWithPort();
+			ConnectableElement part2 = end2.getPartWithPort();
+			
+			FMIPort fmiPort1 = UMLUtil.getStereotypeApplication(role1, FMIPort.class);
+			FMIPort fmiPort2 = UMLUtil.getStereotypeApplication(role2, FMIPort.class);
+			
+			
+			if (role1 instanceof Port && role2 instanceof Port && part1 instanceof Property && part2 instanceof Property
+					&& fmiPort1 != null && fmiPort2 != null) {
+				
+				Port port1 = (Port) role1;
+				Port port2 = (Port) role2;
+			
+				
+				List<IStatus> problems = new ArrayList<>();
+				
+				IStatus problem = checkPortTypes(ctx, connector, part1, port1, part2, port2);
+				if (problem != null) {
+					problems.add(problem);
+				}
+				
+				problem = checkPortDirections(ctx, connector, part1, port1,fmiPort1 ,part2, port2, fmiPort2);
+				if (problem != null) {
+					problems.add(problem);
+				}
+				
+				
+				return problems.isEmpty()? ctx.createSuccessStatus() :
+		            ConstraintStatus.createMultiStatus(ctx, problems);
+			}
+			
+		}
+		
+		
+		return ctx.createSuccessStatus();
+	}
+
+	String getPortName(ConnectableElement part, Port port) {
+		return part.getName()+"." + port.getName();
+	}
+	
+	
+	private IStatus checkPortTypes(IValidationContext ctx, Connector connector, ConnectableElement part1, Port port1, ConnectableElement part2, Port port2) {
+		if (port1.getType() != port2.getType()) {			String message =   "{0} and {1} should have same types";
+			return ConstraintStatus.createStatus(ctx, Arrays.asList(part1, port1, part1, port2),message, getPortName(part1, port1), getPortName(part2, port2));
+		}
+		return null;
+	}
+	
+	private IStatus checkPortDirections(IValidationContext ctx, Connector connector, ConnectableElement part1, Port port1, FMIPort fmiPort1, ConnectableElement part2, Port port2, FMIPort fmiPort2) {
+		if (fmiPort1.getDirection() == fmiPort2.getDirection()) {			
+			String message =   "{0} and {1} should have opposite directions";
+			return ConstraintStatus.createStatus(ctx, Arrays.asList(part1, port1, part1, port2),message, getPortName(part1, port1), getPortName(part2, port2));
+		}
+		return null;
+	}
+	
+
+	private IStatus checkBusConnector(BusConnector busConnector, IValidationContext ctx) {
+		Connector connector = busConnector.getBase_Connector();
+		
+		if (connector.getEnds().size()==2) {
+			
+			ConnectorEnd end1 =  connector.getEnds().get(0);
+			ConnectorEnd end2 =  connector.getEnds().get(1);
+			
+			ConnectableElement role1 =end1.getRole();
+			ConnectableElement role2 = end2.getRole();
+			
+			ConnectableElement part1 = end1.getPartWithPort();
+			ConnectableElement part2 = end2.getPartWithPort();
+			
+
+			
+			if (role1 instanceof Port && role2 instanceof Port && part1 instanceof Property && part2 instanceof Property) {
+				
+				Port busPort1 = (Port) role1;
+				Port busPort2 = (Port) role2;
+			
+				IStatus problem = checkBusSize(ctx, connector, busConnector, part1, busPort1, part2, busPort2);
+				
+				if (problem != null) {
+					return problem;
+				}
+				List<IStatus> problems = new ArrayList<>();
+				
+				for (int i = 0 ; i< busConnector.getEnd1Signals().size(); i++) {
+					Port port1 = busConnector.getEnd1Signals().get(i);
+					Port port2 = busConnector.getEnd2Signals().get(i);
+					
+					FMIPort fmiPort1 = UMLUtil.getStereotypeApplication(port1, FMIPort.class);
+					FMIPort fmiPort2 = UMLUtil.getStereotypeApplication(port2, FMIPort.class);
+					
+					problem = checkPortTypes(ctx, connector, part1, port1, part2, port2);
+					if (problem != null) {
+						problems.add(problem);
+					}
+					
+					if (fmiPort1 != null && fmiPort2!= null) {
+						problem = checkPortDirections(ctx, connector, part1, port1,fmiPort1 ,part2, port2, fmiPort2);
+						if (problem != null) {
+							problems.add(problem);
+						}
+					}
+					
+					
+				}
+				
+				
+				
+				return problems.isEmpty()? ctx.createSuccessStatus() :
+		            ConstraintStatus.createMultiStatus(ctx, problems);
+			}
+			
+		}
+		
+		
+		return ctx.createSuccessStatus();
+	}
+
+	private IStatus checkBusSize(IValidationContext ctx, Connector connector, BusConnector busConnector,
+			ConnectableElement part1, Port busPort1, ConnectableElement part2, Port busPort2) {
+		if (busConnector.getEnd1Signals().size() != busConnector.getEnd2Signals().size()) {			
+			String message =   "{0} and {1} busses should have same size";
+			return ConstraintStatus.createStatus(ctx, Arrays.asList(part1, busPort1, part1, busPort2),message, getPortName(part1, busPort1), getPortName(part2, busPort2));
+		}
+		return null;
+	}
+
+
+
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/META-INF/MANIFEST.MF b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/META-INF/MANIFEST.MF
index 7e6b70d..7b40572 100644
--- a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/META-INF/MANIFEST.MF
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/META-INF/MANIFEST.MF
@@ -15,5 +15,18 @@
  org.eclipse.core.expressions;bundle-version="3.6.0",
  org.eclipse.ui.workbench,
  org.eclipse.ease.ui;bundle-version="0.7.0",
- org.eclipse.papyrus.moka.fmi.profile
-Export-Package: org.eclipse.papyrus.ease.test
+ org.eclipse.papyrus.moka.fmi.profile,
+ org.eclipse.core.resources,
+ org.eclipse.papyrus.moka.fmi.fmi2uml,
+ org.eclipse.papyrus.ease;bundle-version="0.7.0",
+ org.eclipse.papyrus.infra.core;bundle-version="3.0.100",
+ org.eclipse.papyrus.moka.ssp.profile;bundle-version="0.7.0",
+ org.eclipse.gmf.runtime.common.core;bundle-version="1.7.0",
+ org.eclipse.gmf.runtime.diagram.ui,
+ org.eclipse.papyrus.editor,
+ org.eclipse.papyrus.uml.diagram.common,
+ org.eclipse.papyrus.moka.fmi.ui;bundle-version="0.7.0",
+ org.eclipse.papyrus.uml.diagram.composite,
+ org.eclipse.ease.modules.platform
+Export-Package: org.eclipse.papyrus.ease
+Import-Package: org.eclipse.papyrus.uml.diagram.composite.part
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/build.properties b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/build.properties
index 41d3975..e9863e2 100644
--- a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/build.properties
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/build.properties
@@ -2,5 +2,4 @@
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
-               plugin.xml,\
-               script/
+               plugin.xml
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/plugin.xml b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/plugin.xml
index 194a1c8..33a137a 100644
--- a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/plugin.xml
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/plugin.xml
@@ -5,7 +5,7 @@
          point="org.eclipse.ease.modules">
       <module
             category="org.eclipse.ease.modules.category.modeling"
-            class="org.eclipse.papyrus.ease.test.FMIModule"
+            class="org.eclipse.papyrus.ease.FMIModule"
             id="org.eclipse.papyrus.moka.fmi.ease.module"
             name="FMI Module"
             visible="true">
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/script/fmiutil.py b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/script/fmiutil.py
deleted file mode 100644
index 6ec3272..0000000
--- a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/script/fmiutil.py
+++ /dev/null
@@ -1,82 +0,0 @@
-
-import os
-import sys
-import OMSimulator
-import pandas as pd
-import numpy as np
-from ipywidgets import interact, interactive, fixed, interact_manual
-import ipywidgets as widgets
-from IPython.display import display
-
-
-loadModule("FMI Module")
-loadModule("/System/Resources")
-
-include("platform:/plugin/org.eclipse.papyrus.ease/scripts/python/papyrusutils.py")
-
-
-def _instantiateArchitecture(omSimulator, papyrusSimulatorArchi):
-    modelIdentifier =  papyrusSimulatorArchi.getName()
-    omSimulator.newFMIModel(modelIdentifier)
-    for instance in papyrusSimulatorArchi.getInstances():
-        omSimulator.addFMU(modelIdentifier,instance.getFMUPath(), instance.getName() )
-     
-    for connector in papyrusSimulatorArchi.getConnectors() :
-        print(connector.getSourcePort().getFullName(), connector.getTargetPort().getFullName())
-        omSimulator.addConnection(modelIdentifier, connector.getSourcePort().getFullName(), connector.getTargetPort().getFullName())
-
-
-def instantiateArchitecture(omSimulator, papyrusSimulatorArchi) :
-   
-    papyrun(_instantiateArchitecture,  omSimulator, papyrusSimulatorArchi)
-     
-    
-    
-    
-def initOMSimulator(papyrusModelPath, simulatorQualifiedName) :
-    
-    papyrusFile  = getFile(papyrusModelPath)
-    
-    owningFolder =    papyrusFile.getParent().getLocation().makeAbsolute().toOSString()
-    defaultResultFile =  os.path.join(owningFolder,"simResult.csv")
-
-    context = getPapyrusNamedElement(papyrusModelPath,  simulatorQualifiedName) 
-    papyrusSimulatorArchi = getSimulatorHandler(context)  
-    identifier = papyrusSimulatorArchi.getName()
-    omSimulator = OMSimulator.OMSimulator()
-    instantiateArchitecture(omSimulator, papyrusSimulatorArchi)
-    
-    return omSimulator,  identifier, defaultResultFile
-
-
-
-def runOMSimulator(omSimulator, identifier,  dt, tEnd, resultFile):
-    omSimulator.setCommunicationInterval(identifier, dt)
-    omSimulator.setResultFile(identifier, resultFile)
-    omSimulator.setStopTime(identifier, tEnd)
-    
-    omSimulator.initialize(identifier)
-    omSimulator.simulate(identifier)
-    omSimulator.unloadModel(identifier)
-    
-    result = pd.read_csv(resultFile, skiprows=1, memory_map=True, skipinitialspace=True )
-    return result
-
-
-
-def initAndRunOMSimulator(papyrusModelPath,simulatorQualifiedName,dt, tEnd,   resultFileName="simResult.csv"):
-    simulator,identifier,  resultFile = initOMSimulator(papyrusFile, simulatorQualifiedName)
-    resultFile = os.path.join(os.path.dirname(resultFile), resultFileName)
-    result = runOMSimulator(simulator, identifier,  dt, tEnd, resultFile)
-    return result
-
-
-def interactiveRunSimulator(papyrusModelPath, simulatorQualifiedName,dt, tEnd, resultFileName="simResult.csv" ):
-    dtSlider =interactive.widget_from_abbrev(dt) 
-    dtSlider.readout_format='.3f'
-
-    widget = interactive(initAndRunOMSimulator,{"manual":True, "auto_display":False}, papyrusModelPath=fixed(papyrusFile), simulatorQualifiedName=fixed(simulatorQualifiedName),dt=dtSlider, tEnd=tEnd, resultFileName=resultFileName)
-    display(widget)
-    return widget
-
-    
\ No newline at end of file
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/FMIModule.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/FMIModule.java
new file mode 100644
index 0000000..515bc5e
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/FMIModule.java
@@ -0,0 +1,199 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.NotEnabledException;
+import org.eclipse.core.commands.NotHandledException;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.ease.modules.AbstractScriptModule;
+import org.eclipse.ease.modules.WrapToScript;
+import org.eclipse.ease.modules.platform.PlatformModule;
+import org.eclipse.ease.tools.ResourceTools;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+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.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.papyrus.ease.fmi.FMISimulatorHandler;
+import org.eclipse.papyrus.ease.fmi.FMUHandler;
+import org.eclipse.papyrus.ease.module.PapyrusUtilsModule;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.moka.fmi.fmi2uml.FMI2UML;
+import org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU;
+import org.eclipse.papyrus.moka.fmi.fmu.FMUResource;
+import org.eclipse.papyrus.moka.fmi.fmumetamodel.FMUBundle;
+import org.eclipse.papyrus.moka.fmi.modeldescription.DocumentRoot;
+import org.eclipse.papyrus.moka.fmi.modeldescription.FmiFactory;
+import org.eclipse.papyrus.moka.fmi.modeldescription.FmiModelDescriptionType;
+import org.eclipse.papyrus.moka.fmi.modeldescription.util.FmiResourceFactoryImpl;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+public class FMIModule extends AbstractScriptModule {
+
+	private static final String ELK_ROUTING_COMMAND_ID = "org.eclipse.elk.core.ui.command.layout";
+
+	@WrapToScript
+	public FMUHandler importFMU(Package targetPackage, String fmuPath) {
+
+		Object resolved = ResourceTools.resolve(fmuPath);
+		URI sourceURI = null;
+		if (resolved instanceof IFile && "fmu".equals(((IFile) resolved).getFileExtension())) {
+			sourceURI = URI.createPlatformResourceURI(((IFile) resolved).getFullPath().toPortableString(), true);
+		} else if (resolved instanceof File) {
+			sourceURI = URI.createFileURI(((File) resolved).getAbsolutePath());
+		}
+		if (sourceURI != null) {
+			ResourceSet resSet = null;
+			if (targetPackage.eResource() != null) {
+				if (targetPackage.eResource() != null && targetPackage.eResource().getResourceSet() != null) {
+					resSet = targetPackage.eResource().getResourceSet();
+				} else {
+					resSet = new ResourceSetImpl();
+				}
+			}
+
+			Resource inputResource = resSet.getResource(sourceURI, true);
+			if (inputResource instanceof FMUResource && !inputResource.getContents().isEmpty()) {
+				EObject rootResource = inputResource.getContents().get(0);
+				if (rootResource instanceof FMUBundle) {
+					Class fmuClass = FMI2UML.getFMUClass((FMUBundle) rootResource, targetPackage);
+					return new FMUHandler(fmuClass);
+				}
+			}
+		}
+
+		return null;
+
+	}
+
+	@WrapToScript
+	public void generateModelDescription(Class fmuClass) {
+
+		FmiModelDescriptionType desc = ModelDescriptionGenerator.getModelDescription(fmuClass, fmuClass.getName());
+		if (desc != null) {
+
+			Display.getDefault().syncExec(new Runnable() {
+
+				@Override
+				public void run() {
+					// TODO Auto-generated method stub
+					DirectoryDialog fd = new DirectoryDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(),
+							SWT.SAVE);
+					fd.setText("Save model description");
+
+					String selected = fd.open();
+					if (selected != null) {
+						FmiResourceFactoryImpl resFact = new FmiResourceFactoryImpl();
+						URI uri = URI.createFileURI(selected);
+						uri = uri.appendSegment(fmuClass.getName()).appendSegment("modelDescription.xml");
+
+						Resource outputRes = resFact.createResource(uri);
+						// Resource outputRes = resSet.createResource(URI.createFileURI(selected));
+						DocumentRoot root = FmiFactory.eINSTANCE.createDocumentRoot();
+						root.setFmiModelDescription(desc);
+						outputRes.getContents().add(root);
+						Map<Object, Object> options = new HashMap<>();
+						options.put(XMLResource.OPTION_ENCODING, "utf-8");
+						try {
+							outputRes.save(options);
+						} catch (IOException e) {
+							// TODO Auto-generated catch block
+							e.printStackTrace();
+						}
+					}
+
+				}
+
+			});
+
+		}
+	}
+
+	@WrapToScript
+	public FMISimulatorHandler getSimulatorHandler(Class simulatorClass) {
+		EcoreUtil.resolveAll(simulatorClass);
+		return new FMISimulatorHandler(simulatorClass);
+	}
+
+
+	@WrapToScript
+	public FMISimulatorHandler getSimulatorHandler(String qualifiedName)
+			throws RuntimeException, CoreException, URISyntaxException, IOException, ServiceException {
+		
+		Package rootPackage = PapyrusUtilsModule.getActivePapyrusModel();
+		if (rootPackage != null) {
+			EObject namedElement = PapyrusUtilsModule.getPapyrusNamedElement(rootPackage, qualifiedName);
+			if (namedElement instanceof Class) {
+				return getSimulatorHandler((Class) namedElement);
+			}
+		}
+		
+		return null;
+	}
+
+	
+
+	@WrapToScript
+	public HashMap<String, FMUHandler> getFMUHandlers() {
+		HashMap<String, FMUHandler> result = new HashMap<>();
+		Package  rootPackage = PapyrusUtilsModule.getActivePapyrusModel();
+		if (rootPackage != null) {
+			for (Iterator<EObject> iterator = rootPackage.eAllContents(); iterator.hasNext();) {
+				EObject obj = (EObject) iterator.next();
+				if (obj instanceof Class && UMLUtil.getStereotypeApplication((Class) obj, CS_FMU.class) != null) {
+					FMUHandler handler = new FMUHandler(obj);
+					result.put(handler.getQualifiedName(), handler);
+
+				}
+			}
+		} else {
+			throw (new RuntimeException("Root package not found. Papyrus should be opened and have focus."));
+		}
+		return result;
+	}
+
+	@WrapToScript
+	public void createInstanceView(int X, int Y) {
+
+	}
+
+	@WrapToScript
+	public void autoRoute() throws ExecutionException, NotDefinedException, NotEnabledException, NotHandledException {
+		
+		PlatformModule.executeCommand(ELK_ROUTING_COMMAND_ID, Collections.<String, String>emptyMap());
+
+	}
+
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/ModelDescriptionGenerator.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/ModelDescriptionGenerator.java
similarity index 98%
rename from bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/ModelDescriptionGenerator.java
rename to bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/ModelDescriptionGenerator.java
index 6614a9c..e66153b 100644
--- a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/ModelDescriptionGenerator.java
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/ModelDescriptionGenerator.java
@@ -1,31 +1,19 @@
-package org.eclipse.papyrus.ease.test;
 /*****************************************************************************
-
- * 
-
- * Copyright (c) 2016 CEA LIST.
-
- * 
-
+ * 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 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:
-
- *  CEA LIST Initial API and implementation
-
- * 
-
+ *  CEA LIST - Initial API and implementation
+ *
  *****************************************************************************/
+package org.eclipse.papyrus.ease;
 
 
 
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/AbstractConnectorHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/AbstractConnectorHandler.java
new file mode 100644
index 0000000..682b9b5
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/AbstractConnectorHandler.java
@@ -0,0 +1,167 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease.fmi;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewRequest;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.gmfdiag.common.commands.CommonDeferredCreateConnectionViewCommand;
+import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart;
+import org.eclipse.papyrus.uml.diagram.composite.providers.UMLElementTypes;
+import org.eclipse.uml2.uml.ConnectableElement;
+import org.eclipse.uml2.uml.Connector;
+import org.eclipse.uml2.uml.ConnectorEnd;
+import org.eclipse.uml2.uml.Port;
+
+public abstract class AbstractConnectorHandler extends GraphicalElement implements IConnectorHandler {
+	protected Connector connector;
+	protected FMISimulatorHandler parent;
+	protected List<FMUInstanceHandler> connectedFMUs = new ArrayList<>();
+
+	protected Map<ConnectorEnd, AbstractPortHandler> portMap = new HashMap<>();
+
+	public AbstractConnectorHandler(FMISimulatorHandler parent, Connector connector) {
+		super(connector);
+		this.parent = parent;
+		this.connector = connector;
+
+		for (ConnectorEnd end : connector.getEnds()) {
+			ConnectableElement partWithPort = end.getPartWithPort();
+			if (partWithPort != null) {
+				FMUInstanceHandler instance = parent.getInstance(partWithPort.getName());
+				if (instance != null) {
+					connectedFMUs.add(instance);
+					portMap.put(end, instance.getPortHandler((Port) end.getRole()));
+				}
+
+			}
+		}
+
+	}
+
+	public Connector getConnector() {
+		return connector;
+	}
+
+	public FMISimulatorHandler getParent() {
+		return parent;
+	}
+
+	public View createView() {
+		if (parent.getDefaultEditPart() == null) {
+			throw (new RuntimeException("Failed to find an view for the simulator, you should first create a diagram"));
+		}
+
+		List<GraphicalEditPart> portEditParts = new ArrayList<>();
+		for (AbstractPortHandler handler : portMap.values()) {
+			GraphicalEditPart portEditPart = handler.getGraphicalEditPart();
+			if (portEditPart == null) {
+				throw (new RuntimeException(
+						"The view of the port " + handler.getFullName() + " should be created first"));
+			}
+			portEditParts.add(handler.getGraphicalEditPart());
+		}
+
+		CreateConnectionViewRequest.ConnectionViewDescriptor linkdescriptor = new CreateConnectionViewRequest.ConnectionViewDescriptor(
+				UMLElementTypes.Connector_Edge, ((IHintedType) UMLElementTypes.Connector_Edge).getSemanticHint(),
+				parent.getDefaultEditPart().getDiagramPreferencesHint());
+//		ConnectionViewDescriptor descriptor = new ConnectionViewDescriptor(new SemanticHintElementAdapter(connector,  UMLElementTypes.Connector_Edge) ,
+//				 UMLElementTypes.Connector_Edge.getId(),
+//				parent.getDefaultEditPart().getDiagramPreferencesHint());
+//		CreateConnectionViewRequest createRequest = new CreateConnectionViewRequest(descriptor);
+//		Command createConnectionCmd = CreateConnectionViewRequest.getCreateCommand(createRequest, port1.getGraphicalEditPart(),
+//				port2.getGraphicalEditPart());
+		TransactionalEditingDomain domain;
+		try {
+			domain = ServiceUtilsForEditPart.getInstance().getTransactionalEditingDomain(portEditParts.get(0));
+			CommonDeferredCreateConnectionViewCommand aLinkCommand = new CommonDeferredCreateConnectionViewCommand(
+					domain, ((IHintedType) UMLElementTypes.Connector_Edge).getSemanticHint(),
+					new SimpleViewAdapter(portEditParts.get(0).getNotationView()),
+					new SimpleViewAdapter(portEditParts.get(1).getNotationView()), portEditParts.get(0).getViewer(),
+					portEditParts.get(0).getDiagramPreferencesHint(), linkdescriptor, null);
+			aLinkCommand.setElement(connector);
+			if (aLinkCommand.canExecute()) {
+				aLinkCommand.execute(null, null);
+				return (View) (((IAdaptable) aLinkCommand.getCommandResult().getReturnValue()).getAdapter(View.class));
+			}
+
+		} catch (ServiceException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (org.eclipse.core.commands.ExecutionException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		return null;
+
+	}
+
+	protected static final class SemanticHintElementAdapter extends EObjectAdapter {
+		private IElementType type;
+
+		/**
+		 * constructor
+		 * 
+		 * @param element
+		 * @param hint
+		 */
+		public SemanticHintElementAdapter(EObject element, IElementType type) {
+			super(element);
+			this.type = type;
+		}
+
+		public Object getAdapter(Class adapter) {
+			if (adapter.equals(IElementType.class)) {
+				return type;
+			}
+			return super.getAdapter(adapter);
+		}
+	}
+
+	protected static final class SimpleViewAdapter implements IAdaptable {
+		private View view;
+
+		public SimpleViewAdapter(View element) {
+
+			this.view = element;
+		}
+
+		public Object getAdapter(Class adapter) {
+			if (adapter.isAssignableFrom(View.class)) {
+				return view;
+			}
+			return null;
+		}
+	}
+
+	public List<FMUInstanceHandler> getConnectedFMUs() {
+		return connectedFMUs;
+	}
+
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/AbstractPortHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/AbstractPortHandler.java
new file mode 100644
index 0000000..ce8a07d
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/AbstractPortHandler.java
@@ -0,0 +1,103 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease.fmi;
+
+import java.util.Map;
+
+import org.eclipse.gmf.runtime.notation.Node;
+
+import org.eclipse.papyrus.ease.module.PapyrusUtilsModule;
+import org.eclipse.papyrus.moka.fmi.ui.util.FMUViewUtil;
+import org.eclipse.papyrus.uml.diagram.composite.edit.parts.PortEditPart;
+import org.eclipse.papyrus.uml.diagram.composite.providers.UMLElementTypes;
+import org.eclipse.uml2.uml.ConnectableElement;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+
+public class AbstractPortHandler {
+	protected Property part;
+	protected Port umlPort;
+
+	protected PortEditPart editPart = null;
+	protected FMUInstanceHandler parent;
+
+	private Node nodeView = null;
+
+	public AbstractPortHandler(FMUInstanceHandler instance, Port port) {
+		parent = instance;
+
+		if (instance != null) {
+			this.part = instance.getUMLPart();
+		}
+		
+		umlPort = port;
+
+	}
+
+	public String getName() {
+		return umlPort.getName();
+
+	}
+
+	public Node getNodeView() {
+		return nodeView;
+	}
+
+	public String getFullName() {
+		return part.getName() + ":" + umlPort.getName();
+	}
+
+	public Property getUMLPart() {
+		return part;
+	}
+
+	public ConnectableElement getUMLPort() {
+		return umlPort;
+	}
+
+	public void setGraphicalEditPart(PortEditPart editPart) {
+		this.editPart = editPart;
+	}
+
+	public PortEditPart getGraphicalEditPart() {
+		if (editPart != null) {
+			return editPart;
+		} else if (parent.getDefaultEditPart() != null) {
+			Map<Port, PortEditPart> editPartMap = FMUViewUtil.getPortEditPartsMap(parent.getDefaultEditPart());
+			editPart = editPartMap.get(umlPort);
+		}
+		return editPart;
+	}
+
+	public Node createView(double x, double y) {
+		Node parentNode = parent.getNodeView();
+		if (parentNode == null) {
+			parent.createView(50, 50);
+			parentNode = parent.getNodeView();
+
+		}
+		nodeView = (Node) PapyrusUtilsModule.createRelativeView(umlPort, UMLElementTypes.Port_Shape.getId(), parentNode,
+				x, y, FMUViewUtil.PORT_DEFAULT_HEIGHT, FMUViewUtil.PORT_DEFAULT_HEIGHT);
+		return nodeView;
+
+	}
+	
+	
+	public FMUInstanceHandler getParent() {
+		return parent;
+	}
+
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/BusConnectorHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/BusConnectorHandler.java
new file mode 100644
index 0000000..651c9c6
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/BusConnectorHandler.java
@@ -0,0 +1,84 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease.fmi;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.util.OMSimulatorProfileUtil;
+import org.eclipse.uml2.uml.Connector;
+import org.eclipse.uml2.uml.ConnectorEnd;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+
+public class BusConnectorHandler extends AbstractConnectorHandler{
+
+	List<FMIBusHandler> busses = new ArrayList<>();
+	
+	
+
+	public BusConnectorHandler(FMISimulatorHandler parent, Connector connector) {
+		super(parent, connector);
+		
+		for (ConnectorEnd end : connector.getEnds()) {
+			Port endPort = (Port) end.getRole();
+			Property endPart = end.getPartWithPort();
+			if (endPort != null && endPart != null && OMSimulatorProfileUtil.isBus(endPort)) {
+				FMUInstanceHandler instance = parent.getInstance(endPart.getName());
+				if (instance != null) {
+					FMIBusHandler busHandler = (FMIBusHandler) instance.getPortHandler(endPort);
+					busses.add(busHandler);
+				}
+				
+				
+			}
+			
+		}
+	}
+
+	
+	public List<FMIBusHandler> getBusses() {
+		return busses;
+	}
+	
+	@Override
+	public FMIBusHandler getSourcePort() {
+		return busses.get(0);
+	}
+	
+	@Override
+	public FMIBusHandler getTargetPort() {
+		return busses.get(1);
+	}
+	
+	
+	public  List<IConnectorHandler> getSubConnections(){
+		List<IConnectorHandler> subConnections = new ArrayList<>();
+		
+		FMIBusHandler sourceBus = getSourcePort();
+		int busSize = sourceBus.getPorts().size();
+		
+		for (int i =0; i< busSize; i++){
+			subConnections.add(new SubConnectorHandler(this, i));
+		}
+		return subConnections;
+	}
+
+
+	
+	
+	
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/ConnectorHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/ConnectorHandler.java
new file mode 100644
index 0000000..1e677ac
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/ConnectorHandler.java
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease.fmi;
+
+import org.eclipse.papyrus.sysml14.portsandflows.FlowDirection;
+import org.eclipse.uml2.uml.Connector;
+import org.eclipse.uml2.uml.ConnectorEnd;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+
+public class ConnectorHandler extends AbstractConnectorHandler{
+
+
+	private FMIPortHandler sourcePort;
+	private FMIPortHandler targetPort;
+	
+
+	public ConnectorHandler(FMISimulatorHandler parent, Connector connector) {
+		super(parent, connector);
+		
+		for (ConnectorEnd end : connector.getEnds()) {
+			Port endPort = (Port) end.getRole();
+			Property endPart = end.getPartWithPort();
+			if (endPort != null && endPart != null) {
+				
+				FMUInstanceHandler instance = parent.getInstance(endPart.getName());
+				FMIPortHandler portHandler = (FMIPortHandler) instance.getPortHandler(endPort);
+				if (portHandler.getDirection() == FlowDirection.OUT) {
+					sourcePort = portHandler;
+				}else {
+					targetPort = portHandler;
+				}
+			}
+			
+		}
+	}
+	
+	@Override
+	public FMIPortHandler getSourcePort() {
+		return sourcePort;
+	}
+	
+	@Override
+	public FMIPortHandler getTargetPort() {
+		return targetPort;
+	}
+	
+	
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMIBusHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMIBusHandler.java
new file mode 100644
index 0000000..0f999cd
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMIBusHandler.java
@@ -0,0 +1,47 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease.fmi;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+
+
+public class FMIBusHandler extends AbstractPortHandler {
+
+	protected OMSimulatorBus bus;
+	
+	public FMIBusHandler(FMUInstanceHandler instance, Port port) {	
+		super(instance, port);
+		bus = UMLUtil.getStereotypeApplication(port, OMSimulatorBus.class);
+	}
+	
+	
+	public List<FMIPortHandler> getPorts() {
+		List<FMIPortHandler> result = new ArrayList<>();
+		
+		for (Port port : bus.getSignals()) {
+			result.add((FMIPortHandler) parent.getPortHandler(port));
+		}
+		
+		return result;
+	}
+
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMIPortHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMIPortHandler.java
new file mode 100644
index 0000000..a65cc71
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMIPortHandler.java
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease.fmi;
+
+import org.eclipse.papyrus.sysml14.deprecatedelements.FlowPort;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+public class FMIPortHandler extends AbstractPortHandler{
+
+	private FlowPort fmiPort;
+
+	public FMIPortHandler(FMUInstanceHandler instance, Port port) {
+		
+		super(instance, port);
+		fmiPort = UMLUtil.getStereotypeApplication(port, FlowPort.class);
+		
+	}
+	
+	
+	
+	public org.eclipse.papyrus.sysml14.portsandflows.FlowDirection getDirection() {
+		return fmiPort.getDirection();
+	}
+	
+	
+	
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMISimulatorHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMISimulatorHandler.java
new file mode 100644
index 0000000..1c4960f
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMISimulatorHandler.java
@@ -0,0 +1,225 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease.fmi;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.BusConnector;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.util.OMSimulatorProfileUtil;
+import org.eclipse.uml2.uml.AggregationKind;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Connector;
+import org.eclipse.uml2.uml.ConnectorEnd;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+public class FMISimulatorHandler extends GraphicalElement {
+
+	private Class simClass;
+
+	private Map<String, FMUInstanceHandler> instanceMap = new HashMap<>();
+	private List<AbstractConnectorHandler> connectorHandlers = new ArrayList<>();
+
+	
+	public FMISimulatorHandler(Class simulatorClass) {
+		super(simulatorClass);
+		simClass = simulatorClass;
+		for (Property prop : simClass.getAllAttributes()) {
+			CS_FMU fmu = UMLUtil.getStereotypeApplication(prop.getType(), CS_FMU.class);
+			if (fmu != null) {
+				instanceMap.put(prop.getName(), new FMUInstanceHandler(this, prop));
+			}
+		}
+		for (Connector connector : simClass.getOwnedConnectors()) {
+			if (UMLUtil.getStereotypeApplication(connector, BusConnector.class) != null) {
+				connectorHandlers.add(new BusConnectorHandler(this, connector));
+			} else {
+				connectorHandlers.add(new ConnectorHandler(this, connector));
+			}
+
+		}
+
+	}
+
+	
+	public Class getUMLClass() {
+		return simClass;
+	}
+	public Collection<FMUInstanceHandler> getInstances() {
+		return instanceMap.values();
+	}
+
+	public List<AbstractConnectorHandler> getConnectors() {
+		return connectorHandlers;
+	}
+
+	public String getName() {
+		return simClass.getName();
+	}
+
+	public FMUInstanceHandler instantiateFMU(String fmuQN, String instanceName) {
+		Collection<NamedElement> fmuTypes = UMLUtil.findNamedElements(simClass.eResource().getResourceSet(), fmuQN);
+		Class fmuType = null;
+		FMUInstanceHandler result = null;
+		for (NamedElement namedElem : fmuTypes) {
+			if (namedElem instanceof Class && UMLUtil.getStereotypeApplication(namedElem, CS_FMU.class) != null) {
+				fmuType = (Class) namedElem;
+			}
+		}
+
+		if (fmuType != null) {
+			Property fmuProp = simClass.createOwnedAttribute(instanceName, fmuType);
+			fmuProp.setAggregation(AggregationKind.COMPOSITE_LITERAL);
+			result = new FMUInstanceHandler(this, fmuProp);
+			instanceMap.put(instanceName, result);
+
+		} else {
+			throw new RuntimeException("Failed to find FMU type " + fmuQN);
+
+		}
+
+		return result;
+
+	}
+	
+	public FMUInstanceHandler instantiateFMU(String fmuQN, String instanceName, int x, int y, List<Port> portsToHide) {
+		FMUInstanceHandler handler = instantiateFMU(fmuQN, instanceName);
+		handler.createView(x, y, portsToHide);
+		return handler;
+	}
+
+	public ConnectorHandler addConnection(String sourcePort, String targetPort) {
+		Connector connector = createUMLConnector(sourcePort, targetPort);
+		ConnectorHandler result = new ConnectorHandler(this, connector);
+		return result;
+
+	}
+	
+	public ConnectorHandler addConnection(String sourcePort, String targetPort, boolean createView) {
+		ConnectorHandler result = addConnection(sourcePort, targetPort);
+		if (createView) {
+			result.createView();
+		}
+		return result;
+	}
+
+	public BusConnectorHandler addBusConnection(String sourceBus, String targetBus) {
+
+		Connector connector = createUMLConnector(sourceBus, targetBus);
+		connector.applyStereotype((Stereotype) connector.eResource().getResourceSet()
+				.getEObject(OMSimulatorProfileUtil.OMSIMULATOR_BUS_CONNECTOR_URI, true));
+		BusConnectorHandler result = new BusConnectorHandler(this, connector);
+		return result;
+	}
+	
+	public BusConnectorHandler addBusConnection(String sourceBus, String targetBus, boolean createView) {
+		BusConnectorHandler result = addBusConnection(sourceBus, targetBus);
+		if (createView) {
+			result.createView();
+		}
+		return result;
+	}
+
+	protected Connector createUMLConnector(String sourcePort, String targetPort) {
+		AbstractPortHandler sourcePortHandler = getInstancePort(sourcePort);
+		AbstractPortHandler targetPortHandler = getInstancePort(targetPort);
+
+		if (sourcePortHandler != null && targetPortHandler != null) {
+			Connector connector = simClass.createOwnedConnector(sourcePort + "_" + targetPort);
+			ConnectorEnd sourceEnd = connector.createEnd();
+			sourceEnd.setPartWithPort(sourcePortHandler.getUMLPart());
+			sourceEnd.setRole(sourcePortHandler.getUMLPort());
+
+			ConnectorEnd targetEnd = connector.createEnd();
+			targetEnd.setPartWithPort(targetPortHandler.getUMLPart());
+			targetEnd.setRole(targetPortHandler.getUMLPort());
+
+			return connector;
+
+		}
+		System.out.println("ERROR: Failed to create connector between " + sourcePort + " and " + targetPort);
+		throw new RuntimeException("Failed to create connector between " + sourcePort + " and " + targetPort);
+	}
+
+	public AbstractPortHandler getInstancePort(String portName) {
+
+		int dotIndex = portName.indexOf(':');
+		if (dotIndex == -1) {
+			throw new RuntimeException("Invalid instance portName " + portName);
+		}
+
+		String instanceName = portName.substring(0, dotIndex);
+
+		FMUInstanceHandler instance = getInstance(instanceName);
+		if (instance != null) {
+
+			AbstractPortHandler result = instance.getPortOrBus(portName.substring(dotIndex + 1));
+			if (result != null) {
+				return result;
+			}
+
+		}
+		return null;
+
+	}
+
+	public FMUInstanceHandler getInstance(String instanceName) {
+		FMUInstanceHandler result = instanceMap.get(instanceName);
+		if (result == null) {
+			// name may have changed, we re-init the map;
+			updateInstanceMap();
+			result = instanceMap.get(instanceName);
+			if (result == null) {
+				System.out.println("Could not find instance " + instanceName);
+				throw new RuntimeException("Could not find instance " + instanceName);
+			}
+		}
+		return result;
+
+	}
+
+	protected void updateInstanceMap() {
+		List<FMUInstanceHandler> instances = new ArrayList<>(instanceMap.values());
+		instanceMap.clear();
+		for (FMUInstanceHandler instance : instances) {
+			instanceMap.put(instance.getName(), instance);
+		}
+	}
+	
+	
+	public List<IConnectorHandler> getFlattenedConnectors(){
+		List<IConnectorHandler> result = new ArrayList<>();
+		
+		for (AbstractConnectorHandler busOrSimpleConnector : connectorHandlers) {
+			if( busOrSimpleConnector instanceof BusConnectorHandler) {
+				result.addAll(((BusConnectorHandler) busOrSimpleConnector).getSubConnections());
+			}else {
+				result.add(busOrSimpleConnector);
+			}
+		}
+		return result;
+	}
+
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMUHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMUHandler.java
new file mode 100644
index 0000000..018b660
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMUHandler.java
@@ -0,0 +1,163 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease.fmi;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU;
+import org.eclipse.papyrus.moka.fmi.fmiprofile.FMIPort;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.util.OMSimulatorProfileUtil;
+import org.eclipse.uml2.uml.AggregationKind;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+public class FMUHandler {
+
+	Class fmuClass;
+	CS_FMU csFMU;
+
+	protected HashMap<String, Port> portMap = new HashMap<String, Port>();
+
+	protected HashMap<String, Port> busMap = new HashMap<String, Port>();
+
+	public FMUHandler(EObject fmuObject) {
+		if (fmuObject instanceof CS_FMU) {
+			csFMU = (CS_FMU) fmuObject;
+			fmuClass = csFMU.getBase_Class();
+		} else if (fmuObject instanceof Class) {
+			fmuClass = (Class) fmuObject;
+			csFMU = UMLUtil.getStereotypeApplication(fmuClass, CS_FMU.class);
+		}
+
+		if (fmuClass != null) {
+			for (Property prop : fmuClass.getAllAttributes()) {
+				if (prop instanceof Port) {
+					if (UMLUtil.getStereotypeApplication(prop, FMIPort.class) != null) {
+						portMap.put(prop.getName(), (Port) prop);
+					} else if (UMLUtil.getStereotypeApplication(prop, OMSimulatorBus.class) != null) {
+						busMap.put(prop.getName(), (Port) prop);
+					}
+
+				}
+			}
+		}
+	}
+
+	public Class getFMUClass() {
+		return fmuClass;
+	}
+
+	public String getName() {
+		return fmuClass.getName();
+	}
+
+	public String getQualifiedName() {
+		return fmuClass.getQualifiedName();
+	}
+
+	public CS_FMU getCosimFMU() {
+		return csFMU;
+	}
+
+	public Port createBus(String busName, List<String> portNames) {
+		List<Port> ports = new ArrayList<>();
+
+		for (String portName : portNames) {
+			Port port = portMap.get(portName);
+			if (port != null) {
+				ports.add(port);
+			} else {
+				throw (new RuntimeException(
+						"Failed to find a port named " + portName + " in FMU " + fmuClass.getQualifiedName()));
+			}
+		}
+		Port busPort = (Port) fmuClass.createOwnedAttribute(busName, null, UMLPackage.eINSTANCE.getPort());
+		ResourceSet resSet = UMLUtil.getResourceSet(fmuClass);
+		Stereotype busStereo = (Stereotype) resSet.getEObject(OMSimulatorProfileUtil.OMSIMULATOR_BUS_URI, true);
+
+		OMSimulatorBus bus = (OMSimulatorBus) UMLUtil.safeApplyStereotype(busPort, busStereo);
+		bus.getSignals().addAll(ports);
+
+		busMap.put(busPort.getName(), busPort);
+		busPort.setAggregation(AggregationKind.COMPOSITE_LITERAL);
+		busPort.setIsBehavior(true);
+		return busPort;
+
+	}
+
+	public String getFMUPath() {
+
+		try {
+			return FileLocator.toFileURL(new URL(csFMU.getFmuBundle().eResource().getURI().toString())).getFile();
+
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		return null;
+
+	}
+
+	
+	public List<Port> getAllPorts(){
+		List<Port> result = new ArrayList<Port>();
+		for (Property prop : fmuClass.getAllAttributes()) {
+			if (prop instanceof Port) {
+				result.add((Port) prop);
+			}
+		}
+		return result;
+	}
+	
+
+	public Port getUMLPort(String portName) {
+
+		for (Property property : fmuClass.getAllAttributes()) {
+			if (property instanceof Port && portName.equals(property.getName())) {
+				return (Port) property;
+			}
+		}
+
+		throw new RuntimeException(
+				"Failed to find port with name " + portName + " in fmu " + fmuClass.getQualifiedName());
+
+	}
+	
+	
+	public List<String> getBusses(){
+		List<String> result = new ArrayList<>();
+		
+		for (String busName: busMap.keySet()) {
+			result.add(busName);
+		}
+		
+		return result;
+			
+	}
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMUInstanceHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMUInstanceHandler.java
new file mode 100644
index 0000000..d1857a6
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/FMUInstanceHandler.java
@@ -0,0 +1,190 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease.fmi;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PrecisionRectangle;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.papyrus.infra.gmfdiag.common.helper.NotationHelper;
+import org.eclipse.papyrus.moka.fmi.ui.util.FMUViewUtil;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.util.OMSimulatorProfileUtil;
+import org.eclipse.papyrus.uml.diagram.composite.custom.utils.CompositeEditPartUtil;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+
+public class FMUInstanceHandler extends GraphicalElement {
+
+	protected FMISimulatorHandler parent;
+	private Property prop;
+	private Class type;
+	protected FMUHandler fmuHandler;
+	private Map<Port, AbstractPortHandler> portMap = new HashMap<>();
+
+	private Node nodeView;
+
+	private int x;
+	private int y;
+	private int width;
+	private int height;
+
+	public FMUInstanceHandler(FMISimulatorHandler parent, Property instance) {
+		super(instance);
+		this.parent = parent;
+		prop = instance;
+		type = (Class) prop.getType();
+
+		fmuHandler = new FMUHandler(type);
+
+
+	}
+	
+	
+	public FMISimulatorHandler getParent() {
+		return parent;
+	}
+	
+	public Node getNodeView() {
+		return nodeView;
+	}
+
+	public String getName() {
+		return prop.getName();
+	}
+
+	public Property getUMLPart() {
+		return prop;
+	}
+
+	public FMUHandler getFMUHandler() {
+		return fmuHandler;
+	}
+
+	public String getFMUPath() {
+		return fmuHandler.getFMUPath();
+	}
+
+	public AbstractPortHandler getPortHandler(Port port) {
+		AbstractPortHandler handler = portMap.get(port);
+		if (handler == null) {
+			if (OMSimulatorProfileUtil.isBus(port)) {
+				handler = new FMIBusHandler(this, port);
+				portMap.put(port, handler);
+			} else {
+				handler = new FMIPortHandler(this, port);
+				portMap.put(port, handler);
+			}
+
+		}
+		return handler;
+
+	}
+
+	public AbstractPortHandler getPortOrBus(String portName) {
+		Port umlPort = fmuHandler.getUMLPort(portName);
+		return getPortHandler(umlPort);
+	}
+
+	public void updateType(FMUHandler fmuHandler) {
+		if (fmuHandler.getFMUClass() != this.fmuHandler.getFMUClass()) {
+			this.fmuHandler = fmuHandler;
+			portMap.clear();
+			FMUViewUtil.updateFMUType(prop, fmuHandler.getFMUClass(), getDefaultEditPart());
+		}
+
+	}
+
+	public void createView(int x, int y) {
+		createView(x, y, Collections.<Port>emptyList());
+	}
+	
+	public void createView(int x, int y, List<Port> portsToHide) {
+		GraphicalEditPart parentEditPart = parent.getDefaultEditPart();
+		if (parentEditPart != null) {
+			GraphicalEditPart compositeCompartmentEditPart = (GraphicalEditPart) CompositeEditPartUtil
+					.getCompositeCompartmentEditPart(parentEditPart);
+			if (compositeCompartmentEditPart != null) {
+				nodeView = FMUViewUtil.createGraphicalViews(prop, compositeCompartmentEditPart, NotationHelper.findView(compositeCompartmentEditPart),new Point(x, y), null, portsToHide);
+				if (nodeView != null) {
+					PrecisionRectangle bounds = NotationHelper.getAbsoluteBounds(nodeView);
+
+					this.x = bounds.x;
+					this.y = bounds.y;
+					this.height = bounds.height;
+					this.width = bounds.width;
+
+				}
+			}
+
+		} else {
+			throw new RuntimeException(
+					"Failed to find a graphical view for the containing simulator. You should create a diagram first");
+		}
+
+	}
+
+	
+
+	public int getX() {
+		return x;
+	}
+
+	public void setX(int x) {
+		throw new UnsupportedOperationException();
+	}
+
+	public int getY() {
+		return y;
+	}
+
+	public void setY(int y) {
+		throw new UnsupportedOperationException();
+	}
+
+	public int getWidth() {
+		return width;
+	}
+
+	public void setWidth(int width) {
+		throw new UnsupportedOperationException();
+	}
+
+	public int getHeight() {
+		return height;
+	}
+
+	public void setHeight(int height) {
+		throw new UnsupportedOperationException();
+	}
+	
+	public List<FMIBusHandler> getBusses(){
+		List<FMIBusHandler> result = new ArrayList<FMIBusHandler>();
+		
+		for (String busName : fmuHandler.getBusses()) {
+			result.add((FMIBusHandler) getPortOrBus(busName));
+		}
+		
+		return result;
+	}
+
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/GraphicalElement.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/GraphicalElement.java
new file mode 100644
index 0000000..9d9d294
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/GraphicalElement.java
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.ease.fmi;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+
+public class GraphicalElement {
+
+	protected GraphicalEditPart graphicalEditPart;
+	protected EObject displayedElement;
+
+	public GraphicalEditPart getDefaultEditPart() {
+		if (graphicalEditPart == null) {
+			graphicalEditPart = GraphicalElementUtils.getDefaultEditPart(displayedElement);
+		}
+
+	return graphicalEditPart;
+
+	}
+
+	public GraphicalElement(EObject displayedElement) {
+		this.displayedElement = displayedElement;
+	}
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/GraphicalElementUtils.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/GraphicalElementUtils.java
new file mode 100644
index 0000000..664512e
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/GraphicalElementUtils.java
@@ -0,0 +1,83 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.ease.fmi;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.GraphicalViewer;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramGraphicalViewer;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.ease.module.PapyrusUtilsModule;
+import org.eclipse.papyrus.editor.PapyrusMultiDiagramEditor;
+import org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramEditPartsUtil;
+
+public class GraphicalElementUtils {
+
+	public static GraphicalEditPart getDefaultEditPart(EObject  displayedElement) {
+		
+			PapyrusMultiDiagramEditor papyrusEditor = PapyrusUtilsModule.getActivePapyrusEditor();
+			if (papyrusEditor != null) {
+				IDiagramGraphicalViewer papyrusViewer = (IDiagramGraphicalViewer) PapyrusUtilsModule
+						.getActivePapyrusViewer(papyrusEditor);
+				if (papyrusViewer != null) {
+					List<View> views = DiagramEditPartsUtil.getEObjectViews(displayedElement);
+					GraphicalEditPart firstEditPartFound = null;
+					Iterator<View> viewIter = views.iterator();
+					while (firstEditPartFound == null && viewIter.hasNext()) {
+						View nextView = viewIter.next();
+						if (!(nextView instanceof Diagram)) {
+							firstEditPartFound = (GraphicalEditPart) DiagramEditPartsUtil.getEditPartFromView(nextView,
+									papyrusViewer.getContents());
+							if (firstEditPartFound != null) {
+								while (firstEditPartFound.getParent() instanceof GraphicalEditPart && !(firstEditPartFound.getParent() instanceof DiagramEditPart) && ((GraphicalEditPart)firstEditPartFound.getParent()).getNotationView().getElement() == displayedElement) {
+									firstEditPartFound = (GraphicalEditPart) firstEditPartFound.getParent();
+								}
+								return firstEditPartFound;
+								
+							}
+							
+						}
+
+					}
+				
+				}
+
+			}
+			return null;
+		}
+
+	
+	
+	public static GraphicalEditPart getCurrentDiagramEditpart() {
+		PapyrusMultiDiagramEditor papyrus = PapyrusUtilsModule.getActivePapyrusEditor();
+		if (papyrus != null) {
+			GraphicalViewer viewer = PapyrusUtilsModule.getActivePapyrusViewer(papyrus);
+			
+			if (viewer!= null) {
+				return (GraphicalEditPart) viewer.getContents();
+			}
+		}
+		return null;
+	}
+
+	
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/IConnectorHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/IConnectorHandler.java
new file mode 100644
index 0000000..0c78a5d
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/IConnectorHandler.java
@@ -0,0 +1,31 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.ease.fmi;
+
+import java.util.List;
+
+public interface IConnectorHandler {
+
+	
+	public AbstractPortHandler getSourcePort();
+	
+	public AbstractPortHandler getTargetPort();
+	
+	public FMISimulatorHandler getParent();
+	
+	public List<FMUInstanceHandler> getConnectedFMUs();
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/SubConnectorHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/SubConnectorHandler.java
new file mode 100644
index 0000000..b73b8ca
--- /dev/null
+++ b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/fmi/SubConnectorHandler.java
@@ -0,0 +1,80 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.ease.fmi;
+
+import java.util.List;
+
+import org.eclipse.papyrus.sysml14.portsandflows.FlowDirection;
+
+public class SubConnectorHandler implements IConnectorHandler {
+
+	
+	private BusConnectorHandler containingBusConnector;
+	private int index;
+
+	public  SubConnectorHandler(BusConnectorHandler containingBus, int index) {
+		this.containingBusConnector = containingBus;
+		this.index = index;
+		
+		
+	}
+	
+	@Override
+	public AbstractPortHandler getSourcePort() {
+		 FMIBusHandler sourceBus = containingBusConnector.getSourcePort();
+		 FMIBusHandler targetBus = containingBusConnector.getTargetPort();
+		 
+		 FMIPortHandler portInSourceBus = sourceBus.getPorts().get(index);
+		 FMIPortHandler portInTargetBus = targetBus.getPorts().get(index);
+		 
+		 if (portInSourceBus.getDirection() == FlowDirection.OUT) {
+			 return portInSourceBus;
+		 }else {
+			return  portInTargetBus;
+		 }
+		 
+	
+	}
+
+	@Override
+	public AbstractPortHandler getTargetPort() {
+		 FMIBusHandler sourceBus = containingBusConnector.getSourcePort();
+		 FMIBusHandler targetBus = containingBusConnector.getTargetPort();
+		 
+		 FMIPortHandler portInSourceBus = sourceBus.getPorts().get(index);
+		 FMIPortHandler portInTargetBus = targetBus.getPorts().get(index);
+		 
+		 if (portInSourceBus.getDirection() == FlowDirection.IN) {
+			 return portInSourceBus;
+		 }else {
+			return  portInTargetBus;
+		 }
+	}
+
+	@Override
+	public FMISimulatorHandler getParent() {
+		
+		return containingBusConnector.getParent();
+	}
+
+	@Override
+	public List<FMUInstanceHandler> getConnectedFMUs() {
+		
+		return containingBusConnector.getConnectedFMUs();
+	}
+
+}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/FMIModule.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/FMIModule.java
deleted file mode 100644
index f797afd..0000000
--- a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/FMIModule.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.eclipse.papyrus.ease.test;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.ease.modules.AbstractScriptModule;
-import org.eclipse.ease.modules.WrapToScript;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.xmi.XMLResource;
-import org.eclipse.papyrus.ease.test.fmi.FMISimulatorHandler;
-import org.eclipse.papyrus.moka.fmi.modeldescription.DocumentRoot;
-import org.eclipse.papyrus.moka.fmi.modeldescription.FmiFactory;
-import org.eclipse.papyrus.moka.fmi.modeldescription.FmiModelDescriptionType;
-import org.eclipse.papyrus.moka.fmi.modeldescription.util.FmiResourceFactoryImpl;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.uml2.uml.Class;
-
-public class FMIModule extends AbstractScriptModule {
-
-	
-
-	@WrapToScript
-	public void generateModelDescription(Class fmuClass) {
-
-		FmiModelDescriptionType desc = ModelDescriptionGenerator.getModelDescription(fmuClass, fmuClass.getName());
-		if (desc != null) {
-			
-			Display.getDefault().syncExec(new Runnable() {
-
-				@Override
-				public void run() {
-					// TODO Auto-generated method stub
-					DirectoryDialog fd = new DirectoryDialog(PlatformUI.getWorkbench().getDisplay().getActiveShell(), SWT.SAVE);
-					fd.setText("Save model description");
-					
-					
-					String selected = fd.open();
-					if (selected != null) {
-						FmiResourceFactoryImpl resFact = new FmiResourceFactoryImpl();
-						URI uri = URI.createFileURI(selected);
-						uri= uri.appendSegment(fmuClass.getName()).appendSegment("modelDescription.xml");
-						
-						Resource outputRes = resFact.createResource(uri);
-						//Resource outputRes = resSet.createResource(URI.createFileURI(selected));
-						DocumentRoot root = FmiFactory.eINSTANCE.createDocumentRoot();
-						root.setFmiModelDescription(desc);
-						outputRes.getContents().add(root);
-						Map<Object, Object> options= new HashMap<>();
-						options.put(XMLResource.OPTION_ENCODING, "utf-8");
-						try {
-							outputRes.save(options);
-						} catch (IOException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						}
-			}
-
-				}
-
-			});
-
-		}
-	}
-	
-	
-
-	@WrapToScript
-	public FMISimulatorHandler getSimulatorHandler(Class simulatorClass) {
-		EcoreUtil.resolveAll(simulatorClass);
-		return new FMISimulatorHandler(simulatorClass);
-	}
-}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/ConnectorHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/ConnectorHandler.java
deleted file mode 100644
index 40b233d..0000000
--- a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/ConnectorHandler.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.eclipse.papyrus.ease.test.fmi;
-
-import org.eclipse.papyrus.sysml14.portsandflows.FlowDirection;
-import org.eclipse.uml2.uml.Connector;
-import org.eclipse.uml2.uml.ConnectorEnd;
-import org.eclipse.uml2.uml.Port;
-import org.eclipse.uml2.uml.Property;
-
-public class ConnectorHandler {
-
-	private Connector connector;
-	private FMIPortHandler sourcePort;
-	private FMIPortHandler targetPort;
-
-	public ConnectorHandler(Connector connector) {
-		this.connector = connector;
-		
-		for (ConnectorEnd end : connector.getEnds()) {
-			Port endPort = (Port) end.getRole();
-			Property enPart = end.getPartWithPort();
-			if (endPort != null && enPart != null) {
-				FMIPortHandler portHandler = new FMIPortHandler(enPart, endPort);
-				if (portHandler.getDirection() == FlowDirection.OUT) {
-					sourcePort = portHandler;
-				}else {
-					targetPort = portHandler;
-				}
-			}
-			
-		}
-	}
-	
-	public FMIPortHandler getSourcePort() {
-		return sourcePort;
-	}
-	
-	public FMIPortHandler getTargetPort() {
-		return targetPort;
-	}
-	
-	public Connector getConnector() {
-		return connector;
-	}
-}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/FMIPortHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/FMIPortHandler.java
deleted file mode 100644
index a376517..0000000
--- a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/FMIPortHandler.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.eclipse.papyrus.ease.test.fmi;
-
-import org.eclipse.papyrus.sysml14.deprecatedelements.FlowPort;
-import org.eclipse.uml2.uml.ConnectableElement;
-import org.eclipse.uml2.uml.Port;
-import org.eclipse.uml2.uml.Property;
-import org.eclipse.uml2.uml.util.UMLUtil;
-
-public class FMIPortHandler {
-
-	private Property part;
-	private Port umlPort;
-	private FlowPort fmiPort;
-
-	public FMIPortHandler(Property part, Port port) {
-		
-		this.part = part;
-		umlPort = port;
-		fmiPort = UMLUtil.getStereotypeApplication(port, FlowPort.class);
-		
-	}
-	
-	public String getName() {
-		return umlPort.getName();
-	
-	}
-	
-	
-	public org.eclipse.papyrus.sysml14.portsandflows.FlowDirection getDirection() {
-		return fmiPort.getDirection();
-	}
-	
-	
-	public String getFullName() {
-		return part.getName()+":"+umlPort.getName();
-	}
-
-	public Property getUMLPart() {
-		
-		return  part;
-	}
-
-	public ConnectableElement getUMLPort() {
-		return umlPort;
-	}
-	
-	
-}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/FMISimulatorHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/FMISimulatorHandler.java
deleted file mode 100644
index d536b86..0000000
--- a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/FMISimulatorHandler.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.eclipse.papyrus.ease.test.fmi;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU;
-import org.eclipse.uml2.uml.AggregationKind;
-import org.eclipse.uml2.uml.Class;
-import org.eclipse.uml2.uml.Connector;
-import org.eclipse.uml2.uml.ConnectorEnd;
-import org.eclipse.uml2.uml.NamedElement;
-import org.eclipse.uml2.uml.Property;
-import org.eclipse.uml2.uml.util.UMLUtil;
-
-public class FMISimulatorHandler {
-
-	private Class simClass;
-
-	
-	public FMISimulatorHandler(Class simulatorClass) {
-		simClass = simulatorClass;
-		
-	}
-
-	public List<FMUInstanceHandler> getInstances() {
-		List<FMUInstanceHandler> result = new ArrayList<>();
-		for (Property prop : simClass.getAllAttributes()) {
-			CS_FMU fmu = UMLUtil.getStereotypeApplication(prop.getType(), CS_FMU.class);
-			if (fmu != null) {
-				result.add(new FMUInstanceHandler(prop));
-			}
-		}
-
-		return result;
-
-	}
-
-	public List<ConnectorHandler> getConnectors() {
-		List<ConnectorHandler> result = new ArrayList<>();
-		for (Connector connector : simClass.getOwnedConnectors()) {
-			result.add(new ConnectorHandler(connector));
-		}
-
-		return result;
-	}
-
-	public String getName() {
-		return simClass.getName();
-	}
-
-	public FMUInstanceHandler instantiateFMU(String fmuQN, String instanceName) {
-		Collection<NamedElement> fmuTypes = UMLUtil.findNamedElements(simClass.eResource().getResourceSet(), fmuQN);
-		Class fmuType = null;
-		FMUInstanceHandler result = null;
-		for (NamedElement namedElem : fmuTypes) {
-			if (namedElem instanceof Class && UMLUtil.getStereotypeApplication(namedElem, CS_FMU.class) != null) {
-				fmuType = (Class) namedElem;
-			}
-		}
-
-		if (fmuType != null) {
-			Property fmuProp = simClass.createOwnedAttribute(instanceName, fmuType);
-			fmuProp.setAggregation(AggregationKind.COMPOSITE_LITERAL);
-			result = new FMUInstanceHandler(fmuProp);
-
-		} else {
-			throw new RuntimeException("Failed to find FMU type " + fmuQN);
-
-		}
-
-		return result;
-
-	}
-
-	public ConnectorHandler addConnection(String sourcePort, String targetPort) {
-		ConnectorHandler result = null;
-		FMIPortHandler sourcePortHandler = getInstancePort(sourcePort);
-		FMIPortHandler targetPortHandler = getInstancePort(targetPort);
-		
-		if (sourcePortHandler!= null && targetPortHandler !=null) {
-			Connector connector = simClass.createOwnedConnector(sourcePort+"_"+targetPort);
-			ConnectorEnd sourceEnd = connector.createEnd();
-			sourceEnd.setPartWithPort(sourcePortHandler.getUMLPart());
-			sourceEnd.setRole(sourcePortHandler.getUMLPort());
-			
-			ConnectorEnd targetEnd = connector.createEnd();
-			targetEnd.setPartWithPort(targetPortHandler.getUMLPart());
-			targetEnd.setRole(targetPortHandler.getUMLPort());
-			
-			return new ConnectorHandler(connector);
-			
-			
-			
-		}
-		System.out.println("ERROR: Failed to create connector between " + sourcePort +" and "+ targetPort);
-		throw new RuntimeException("Failed to create connector between " + sourcePort +" and "+ targetPort);
-
-	}
-	
-	public FMIPortHandler getInstancePort(String portName) {
-	
-		int dotIndex= portName.indexOf(':');
-		if (dotIndex==-1) {
-			throw new RuntimeException("Invalid instance portName " + portName);
-		}
-		
-		String instanceName = portName.substring(0, dotIndex);
-		
-		
-		FMUInstanceHandler instance = getInstance(instanceName);
-		if (instance != null) {
-			
-			FMIPortHandler result =  instance.getPort(portName.substring(dotIndex+1));
-			if (result != null) {
-				return result;
-			}
-		
-		}
-		return null;
-		
-	}
-
-	private FMUInstanceHandler getInstance(String instanceName) {
-		for (Property  prop : simClass.getAllAttributes()) {
-			if (prop.getName() != null && prop.getName().equals(instanceName)) {
-				return new FMUInstanceHandler(prop);
-			}
-		}
-		System.out.println("Could not find instance " + instanceName);
-		throw new RuntimeException("Could not find instance " + instanceName);
-		
-		
-	}
-
-}
diff --git a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/FMUInstanceHandler.java b/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/FMUInstanceHandler.java
deleted file mode 100644
index 3ee7204..0000000
--- a/bundles/fmi/org.eclipse.papyrus.moka.fmi.ease/src/org/eclipse/papyrus/ease/test/fmi/FMUInstanceHandler.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.eclipse.papyrus.ease.test.fmi;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU;
-import org.eclipse.uml2.uml.Class;
-import org.eclipse.uml2.uml.Port;
-import org.eclipse.uml2.uml.Property;
-import org.eclipse.uml2.uml.util.UMLUtil;
-
-public class FMUInstanceHandler {
-
-	private Property prop;
-	private Class type;
-	private CS_FMU fmu;
-	private Map<String, FMIPortHandler> portMap = new HashMap<>();
-
-	public FMUInstanceHandler(Property instance) {
-		prop = instance;
-		type = (Class) prop.getType();
-		fmu = UMLUtil.getStereotypeApplication(type, CS_FMU.class);
-
-		for (Port port : type.getOwnedPorts()) {
-			FMIPortHandler portHandler = new FMIPortHandler(prop, port);
-			portMap.put(port.getName(), portHandler);
-		}
-	}
-
-	public String getName() {
-		return prop.getName();
-	}
-
-	public String getFMUPath() {
-
-		try {
-
-			return FileLocator.toFileURL(new URL(fmu.getFmuBundle().eResource().getURI().toString())).getFile();
-
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-
-		return null;
-
-	}
-
-	public FMIPortHandler getPort(String portName) {
-		FMIPortHandler port = portMap.get(portName);
-		if( port != null) {
-			return port;
-		}
-		System.out.println(
-				"Could not find port " + portName + " in instance " + getName() + " (type: " + type.getName() + ")");
-		throw new RuntimeException(
-				"Could not find port " + portName + " in instance " + getName() + " (type: " + type.getName() + ")");
-	}
-}
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.fmi2uml/src/org/eclipse/papyrus/moka/fmi/fmi2uml/FMU2UMLTransformation.java b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.fmi2uml/src/org/eclipse/papyrus/moka/fmi/fmi2uml/FMU2UMLTransformation.java
index c1c6506..2a64206 100644
--- a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.fmi2uml/src/org/eclipse/papyrus/moka/fmi/fmi2uml/FMU2UMLTransformation.java
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.fmi2uml/src/org/eclipse/papyrus/moka/fmi/fmi2uml/FMU2UMLTransformation.java
@@ -47,6 +47,7 @@
 import org.eclipse.uml2.uml.LiteralString;
 import org.eclipse.uml2.uml.NamedElement;
 import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Port;
 import org.eclipse.uml2.uml.PrimitiveType;
 import org.eclipse.uml2.uml.Property;
 import org.eclipse.uml2.uml.Stereotype;
@@ -194,10 +195,11 @@
 		Property prop;
 		if (FMIUtil.isPort(variable)){
 			prop = UMLFactory.eINSTANCE.createPort();
+			((Port)prop).setIsBehavior(true);
 		}else {
 			prop = UMLFactory.eINSTANCE.createProperty();
 		}
-		
+		prop.setAggregation(AggregationKind.COMPOSITE_LITERAL);
 		fmuClass.getOwnedAttributes().add(prop);
 		if (FMIUtil.isPort(variable) && flowPortStereo == null) {
 			flowPortStereo = FMIProfileUtil.getStereotype(prop, StereotypeStrings.SSDCONNECTORANDFMIPORT_SHORTNAME, SSPProfilePackage.eINSTANCE);
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/META-INF/MANIFEST.MF b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/META-INF/MANIFEST.MF
index 38deb09..f096479 100644
--- a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/META-INF/MANIFEST.MF
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/META-INF/MANIFEST.MF
@@ -6,7 +6,8 @@
 Bundle-Activator: org.eclipse.papyrus.moka.fmi.profile.ui.Activator
 Bundle-Vendor: Eclipse Modeling Project
 Require-Bundle: org.eclipse.ui;bundle-version="[3.109.0,4.0.0)",
- org.eclipse.core.runtime;bundle-version="[3.14.0,4.0.0)"
+ org.eclipse.core.runtime;bundle-version="[3.14.0,4.0.0)",
+ org.eclipse.papyrus.infra.properties.ui;bundle-version="3.4.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.papyrus.moka.fmi.profile.ui
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/build.properties b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/build.properties
index 3378a01..ff4fbb9 100644
--- a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/build.properties
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/build.properties
@@ -4,4 +4,5 @@
                .,\
                plugin.xml,\
                icons/,\
-               pom.xml
+               pom.xml,\
+               properties/
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/plugin.xml b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/plugin.xml
index e8b38e4..502715f 100644
--- a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/plugin.xml
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/plugin.xml
@@ -10,5 +10,12 @@
             path="pathmap://PAPYRUS_FMI_PROFILE/FMI.profile.uml">
       </profile>
    </extension>
+   <extension
+         point="org.eclipse.papyrus.infra.properties.contexts">
+         <context
+               contextModel="properties/OMSimulator.ctx"
+               isCustomizable="true">
+         </context>
+   </extension>
 
 </plugin>
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/OMSimulator.ctx b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/OMSimulator.ctx
new file mode 100644
index 0000000..4469b0d
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/OMSimulator.ctx
@@ -0,0 +1,494 @@
+<?xml version="1.0" encoding="ASCII"?>
+<contexts:Context
+    xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:constraints="http://www.eclipse.org/papyrus/constraints/0.9"
+    xmlns:contexts="http://www.eclipse.org/papyrus/properties/contexts/0.9"
+    xmi:id="_bf688MgKEemyqo9qIVy2SA"
+    name="OMSimulatorProfile">
+  <dependencies
+      href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_69QJkKDJEeSZxfCXzZz3-w"/>
+  <tabs xmi:id="_n4dm8MgKEemyqo9qIVy2SA"
+      label="FMI"
+      id="omsimulatorprofile"
+      priority="100">
+    <sections
+        xmi:id="_n4xI8MgKEemyqo9qIVy2SA"
+        name="Single BusConnectionEnd"
+        sectionFile="ui/SingleBusConnectionEnd.xwt">
+      <widget
+          href="ui/SingleBusConnectionEnd.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4xI8cgKEemyqo9qIVy2SA"
+        name="Multiple BusConnectionEnd"
+        sectionFile="ui/MultipleBusConnectionEnd.xwt">
+      <widget
+          href="ui/MultipleBusConnectionEnd.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4xwAMgKEemyqo9qIVy2SA"
+        name="Single OMSimulatorBus"
+        sectionFile="ui/SingleOMSimulatorBus.xwt">
+      <widget
+          href="ui/SingleOMSimulatorBus.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4xwAcgKEemyqo9qIVy2SA"
+        name="Multiple OMSimulatorBus"
+        sectionFile="ui/MultipleOMSimulatorBus.xwt">
+      <widget
+          href="ui/MultipleOMSimulatorBus.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4yXEMgKEemyqo9qIVy2SA"
+        name="Single TLMSignal"
+        sectionFile="ui/SingleTLMSignal.xwt">
+      <widget
+          href="ui/SingleTLMSignal.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4yXEcgKEemyqo9qIVy2SA"
+        name="Multiple TLMSignal"
+        sectionFile="ui/MultipleTLMSignal.xwt">
+      <widget
+          href="ui/MultipleTLMSignal.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4yXEsgKEemyqo9qIVy2SA"
+        name="Single TLMConnection"
+        sectionFile="ui/SingleTLMConnection.xwt">
+      <widget
+          href="ui/SingleTLMConnection.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4y-IMgKEemyqo9qIVy2SA"
+        name="Multiple TLMConnection"
+        sectionFile="ui/MultipleTLMConnection.xwt">
+      <widget
+          href="ui/MultipleTLMConnection.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4y-IcgKEemyqo9qIVy2SA"
+        name="Single TLMSignalDefinition"
+        sectionFile="ui/SingleTLMSignalDefinition.xwt">
+      <widget
+          href="ui/SingleTLMSignalDefinition.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4y-IsgKEemyqo9qIVy2SA"
+        name="Multiple TLMSignalDefinition"
+        sectionFile="ui/MultipleTLMSignalDefinition.xwt">
+      <widget
+          href="ui/MultipleTLMSignalDefinition.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4zlMMgKEemyqo9qIVy2SA"
+        name="Single TLMInterfaceDefinition"
+        sectionFile="ui/SingleTLMInterfaceDefinition.xwt">
+      <widget
+          href="ui/SingleTLMInterfaceDefinition.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n4zlMcgKEemyqo9qIVy2SA"
+        name="Multiple TLMInterfaceDefinition"
+        sectionFile="ui/MultipleTLMInterfaceDefinition.xwt">
+      <widget
+          href="ui/MultipleTLMInterfaceDefinition.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n40MQMgKEemyqo9qIVy2SA"
+        name="Single BusConnector"
+        sectionFile="ui/SingleBusConnector.xwt">
+      <widget
+          href="ui/SingleBusConnector.xwt#/"/>
+    </sections>
+    <sections
+        xmi:id="_n40MQcgKEemyqo9qIVy2SA"
+        name="Multiple BusConnector"
+        sectionFile="ui/MultipleBusConnector.xwt">
+      <widget
+          href="ui/MultipleBusConnector.xwt#/"/>
+    </sections>
+  </tabs>
+  <views xmi:id="_bf688cgKEemyqo9qIVy2SA"
+      name="Single BusConnectionEnd"
+      sections="_n4xI8MgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69JsgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf688sgKEemyqo9qIVy2SA"
+        name="isSingleBusConnectionEnd">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf6888gKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::BusConnectionEnd"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf689MgKEemyqo9qIVy2SA"
+      elementMultiplicity="-1"
+      name="Multiple BusConnectionEnd"
+      sections="_n4xI8cgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69JsgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf689cgKEemyqo9qIVy2SA"
+        name="isMultipleBusConnectionEnd">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf689sgKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::BusConnectionEnd"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf6898gKEemyqo9qIVy2SA"
+      name="Single OMSimulatorBus"
+      sections="_n4xwAMgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69KMgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf68-MgKEemyqo9qIVy2SA"
+        name="isSingleOMSimulatorBus">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf68-cgKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::OMSimulatorBus"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf68-sgKEemyqo9qIVy2SA"
+      elementMultiplicity="-1"
+      name="Multiple OMSimulatorBus"
+      sections="_n4xwAcgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69KMgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf68-8gKEemyqo9qIVy2SA"
+        name="isMultipleOMSimulatorBus">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf68_MgKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::OMSimulatorBus"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf68_cgKEemyqo9qIVy2SA"
+      name="Single TLMSignal"
+      sections="_n4yXEMgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69LMgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf68_sgKEemyqo9qIVy2SA"
+        name="isSingleTLMSignal">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf68_8gKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::TLMSignal"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf69AMgKEemyqo9qIVy2SA"
+      elementMultiplicity="-1"
+      name="Multiple TLMSignal"
+      sections="_n4yXEcgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69LMgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf69AcgKEemyqo9qIVy2SA"
+        name="isMultipleTLMSignal">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf69AsgKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::TLMSignal"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf69A8gKEemyqo9qIVy2SA"
+      name="Single TLMConnection"
+      sections="_n4yXEsgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69IcgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf69BMgKEemyqo9qIVy2SA"
+        name="isSingleTLMConnection">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf69BcgKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::TLMConnection"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf69BsgKEemyqo9qIVy2SA"
+      elementMultiplicity="-1"
+      name="Multiple TLMConnection"
+      sections="_n4y-IMgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69IcgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf69B8gKEemyqo9qIVy2SA"
+        name="isMultipleTLMConnection">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf69CMgKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::TLMConnection"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf69CcgKEemyqo9qIVy2SA"
+      name="Single TLMSignalDefinition"
+      sections="_n4y-IcgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69HMgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf69CsgKEemyqo9qIVy2SA"
+        name="isSingleTLMSignalDefinition">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf69C8gKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::TLMSignalDefinition"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf69DMgKEemyqo9qIVy2SA"
+      elementMultiplicity="-1"
+      name="Multiple TLMSignalDefinition"
+      sections="_n4y-IsgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69HMgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf69DcgKEemyqo9qIVy2SA"
+        name="isMultipleTLMSignalDefinition">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf69DsgKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::TLMSignalDefinition"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf69D8gKEemyqo9qIVy2SA"
+      name="Single TLMInterfaceDefinition"
+      sections="_n4zlMMgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69HcgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf69EMgKEemyqo9qIVy2SA"
+        name="isSingleTLMInterfaceDefinition">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf69EcgKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::TLMInterfaceDefinition"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf69EsgKEemyqo9qIVy2SA"
+      elementMultiplicity="-1"
+      name="Multiple TLMInterfaceDefinition"
+      sections="_n4zlMcgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69HcgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf69E8gKEemyqo9qIVy2SA"
+        name="isMultipleTLMInterfaceDefinition">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf69FMgKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::TLMInterfaceDefinition"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf69FcgKEemyqo9qIVy2SA"
+      name="Single BusConnector"
+      sections="_n40MQMgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69LsgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf69FsgKEemyqo9qIVy2SA"
+        name="isSingleBusConnector">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf69F8gKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::BusConnector"/>
+    </constraints>
+  </views>
+  <views xmi:id="_bf69GMgKEemyqo9qIVy2SA"
+      elementMultiplicity="-1"
+      name="Multiple BusConnector"
+      sections="_n40MQcgKEemyqo9qIVy2SA"
+      automaticContext="true"
+      datacontexts="_bf69LsgKEemyqo9qIVy2SA">
+    <constraints
+        xsi:type="constraints:SimpleConstraint"
+        xmi:id="_bf69GcgKEemyqo9qIVy2SA"
+        name="isMultipleBusConnector">
+      <constraintType
+          href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+      <properties
+          xsi:type="constraints:ValueProperty"
+          xmi:id="_bf69GsgKEemyqo9qIVy2SA"
+          name="stereotypeName"
+          value="OMSimulatorProfile::BusConnector"/>
+    </constraints>
+  </views>
+  <dataContexts
+      xmi:id="_bf69G8gKEemyqo9qIVy2SA"
+      name="OMSimulatorProfile">
+    <elements
+        xmi:id="_bf69HMgKEemyqo9qIVy2SA"
+        name="TLMSignalDefinition">
+      <supertypes
+          href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_690ylaDJEeSZxfCXzZz3-w"/>
+    </elements>
+    <elements
+        xmi:id="_bf69HcgKEemyqo9qIVy2SA"
+        name="TLMInterfaceDefinition">
+      <properties
+          xmi:id="_bf69HsgKEemyqo9qIVy2SA"
+          name="interpolation"
+          type="Enumeration"/>
+      <properties
+          xmi:id="_bf69H8gKEemyqo9qIVy2SA"
+          name="signalDefinitions"
+          type="Reference"
+          multiplicity="-1"/>
+      <properties
+          xmi:id="_bf69IMgKEemyqo9qIVy2SA"
+          name="dimensions"
+          type="Integer"/>
+      <supertypes
+          href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_690ybKDJEeSZxfCXzZz3-w"/>
+      <supertypes
+          href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_690yXqDJEeSZxfCXzZz3-w"/>
+    </elements>
+    <elements
+        xmi:id="_bf69IcgKEemyqo9qIVy2SA"
+        name="TLMConnection">
+      <properties
+          xmi:id="_bf69IsgKEemyqo9qIVy2SA"
+          name="time delay"
+          type="Double"/>
+      <properties
+          xmi:id="_bf69I8gKEemyqo9qIVy2SA"
+          name="impedance"
+          type="Double"/>
+      <properties
+          xmi:id="_bf69JMgKEemyqo9qIVy2SA"
+          name="rotational impedance"
+          type="Double"/>
+      <properties
+          xmi:id="_bf69JcgKEemyqo9qIVy2SA"
+          name="alpha"
+          type="Double"/>
+      <supertypes
+          href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_690yvqDJEeSZxfCXzZz3-w"/>
+    </elements>
+    <elements
+        xmi:id="_bf69JsgKEemyqo9qIVy2SA"
+        name="BusConnectionEnd">
+      <properties
+          xmi:id="_bf69J8gKEemyqo9qIVy2SA"
+          name="referencedSignal"
+          type="Reference"
+          multiplicity="-1"/>
+      <supertypes
+          href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_690yF6DJEeSZxfCXzZz3-w"/>
+    </elements>
+    <elements
+        xmi:id="_bf69KMgKEemyqo9qIVy2SA"
+        name="OMSimulatorBus">
+      <properties
+          xmi:id="_bf69KcgKEemyqo9qIVy2SA"
+          name="signals"
+          type="Reference"
+          multiplicity="-1"/>
+      <properties
+          xmi:id="_bf69KsgKEemyqo9qIVy2SA"
+          name="domain"
+          type="Enumeration"
+          multiplicity="-1"/>
+      <properties
+          xmi:id="_bf69K8gKEemyqo9qIVy2SA"
+          name="direction"
+          type="Enumeration"/>
+      <supertypes
+          href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_690ylaDJEeSZxfCXzZz3-w"/>
+    </elements>
+    <elements
+        xmi:id="_bf69LMgKEemyqo9qIVy2SA"
+        name="TLMSignal">
+      <properties
+          xmi:id="_bf69LcgKEemyqo9qIVy2SA"
+          name="definition"
+          type="Reference"/>
+      <supertypes
+          href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_690ylaDJEeSZxfCXzZz3-w"/>
+    </elements>
+    <elements
+        xmi:id="_bf69LsgKEemyqo9qIVy2SA"
+        name="BusConnector">
+      <properties
+          xmi:id="_bf69L8gKEemyqo9qIVy2SA"
+          name="end1Component"
+          type="Reference"/>
+      <properties
+          xmi:id="_bf69MMgKEemyqo9qIVy2SA"
+          name="end1Signals"
+          type="Reference"
+          multiplicity="-1"/>
+      <properties
+          xmi:id="_bf69McgKEemyqo9qIVy2SA"
+          name="end2Signals"
+          type="Reference"
+          multiplicity="-1"/>
+      <properties
+          xmi:id="_bf69MsgKEemyqo9qIVy2SA"
+          name="end2Component"
+          type="Reference"/>
+      <supertypes
+          href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_690yvqDJEeSZxfCXzZz3-w"/>
+    </elements>
+    <modelElementFactory
+        href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@modelElementFactories.2"/>
+  </dataContexts>
+</contexts:Context>
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleBusConnectionEnd.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleBusConnectionEnd.xwt
new file mode 100644
index 0000000..e29bdbb
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleBusConnectionEnd.xwt
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+	xmlns:j="clr-namespace:java.lang"
+	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+	xmlns:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleBusConnector.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleBusConnector.xwt
new file mode 100644
index 0000000..e29bdbb
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleBusConnector.xwt
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+	xmlns:j="clr-namespace:java.lang"
+	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+	xmlns:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleOMSimulatorBus.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleOMSimulatorBus.xwt
new file mode 100644
index 0000000..54a5e59
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleOMSimulatorBus.xwt
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:MultiReference input="{Binding}"
+			property="OMSimulatorProfile:OMSimulatorBus:domain"></ppe:MultiReference>
+	</Composite>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMConnection.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMConnection.xwt
new file mode 100644
index 0000000..e29bdbb
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMConnection.xwt
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+	xmlns:j="clr-namespace:java.lang"
+	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+	xmlns:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMInterfaceDefinition.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMInterfaceDefinition.xwt
new file mode 100644
index 0000000..b26dd74
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMInterfaceDefinition.xwt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:IntegerEditor input="{Binding}"
+			property="OMSimulatorProfile:TLMInterfaceDefinition:dimensions"></ppe:IntegerEditor>
+	</Composite>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:EnumCombo input="{Binding}"
+			property="OMSimulatorProfile:TLMInterfaceDefinition:interpolation"></ppe:EnumCombo>
+	</Composite>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMSignal.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMSignal.xwt
new file mode 100644
index 0000000..e29bdbb
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMSignal.xwt
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+	xmlns:j="clr-namespace:java.lang"
+	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+	xmlns:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMSignalDefinition.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMSignalDefinition.xwt
new file mode 100644
index 0000000..e29bdbb
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/MultipleTLMSignalDefinition.xwt
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+	xmlns:j="clr-namespace:java.lang"
+	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+	xmlns:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleBusConnectionEnd.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleBusConnectionEnd.xwt
new file mode 100644
index 0000000..edd76d2
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleBusConnectionEnd.xwt
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:MultiReference input="{Binding}"
+			property="OMSimulatorProfile:BusConnectionEnd:referencedSignal"></ppe:MultiReference>
+	</Composite>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleBusConnector.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleBusConnector.xwt
new file mode 100644
index 0000000..5f6fcad
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleBusConnector.xwt
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:StringLabel input="{Binding}"
+			property="OMSimulatorProfile:BusConnector:end1Component"
+			readOnly="true"></ppe:StringLabel>
+		<ppe:ReferenceDialog input="{Binding}"
+			property="OMSimulatorProfile:BusConnector:end2Component"
+			readOnly="true"></ppe:ReferenceDialog>
+	</Composite>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:MultiReference input="{Binding}"
+			property="OMSimulatorProfile:BusConnector:end1Signals"></ppe:MultiReference>
+		<ppe:MultiReference input="{Binding}"
+			property="OMSimulatorProfile:BusConnector:end2Signals"></ppe:MultiReference>
+	</Composite>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleOMSimulatorBus.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleOMSimulatorBus.xwt
new file mode 100644
index 0000000..828abe1
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleOMSimulatorBus.xwt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:EnumCombo input="{Binding}"
+			property="OMSimulatorProfile:OMSimulatorBus:direction"></ppe:EnumCombo>
+	</Composite>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:MultiReference input="{Binding}"
+			property="OMSimulatorProfile:OMSimulatorBus:signals"></ppe:MultiReference>
+	</Composite>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMConnection.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMConnection.xwt
new file mode 100644
index 0000000..5c204e6
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMConnection.xwt
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:DoubleEditor input="{Binding}"
+			property="OMSimulatorProfile:TLMConnection:time delay"></ppe:DoubleEditor>
+		<ppe:DoubleEditor input="{Binding}"
+			property="OMSimulatorProfile:TLMConnection:impedance"></ppe:DoubleEditor>
+		<ppe:DoubleEditor input="{Binding}"
+			property="OMSimulatorProfile:TLMConnection:rotational impedance"></ppe:DoubleEditor>
+		<ppe:DoubleEditor input="{Binding}"
+			property="OMSimulatorProfile:TLMConnection:alpha"></ppe:DoubleEditor>
+	</Composite>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMInterfaceDefinition.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMInterfaceDefinition.xwt
new file mode 100644
index 0000000..b26dd74
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMInterfaceDefinition.xwt
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:IntegerEditor input="{Binding}"
+			property="OMSimulatorProfile:TLMInterfaceDefinition:dimensions"></ppe:IntegerEditor>
+	</Composite>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:EnumCombo input="{Binding}"
+			property="OMSimulatorProfile:TLMInterfaceDefinition:interpolation"></ppe:EnumCombo>
+	</Composite>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMSignal.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMSignal.xwt
new file mode 100644
index 0000000..08ee681
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMSignal.xwt
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+	<Composite>
+		<Composite.layout>
+			<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
+		</Composite.layout>
+		<ppe:ReferenceDialog input="{Binding}"
+			property="OMSimulatorProfile:TLMSignal:definition"></ppe:ReferenceDialog>
+	</Composite>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMSignalDefinition.xwt b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMSignalDefinition.xwt
new file mode 100644
index 0000000..e29bdbb
--- /dev/null
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi.profile.ui/properties/ui/SingleTLMSignalDefinition.xwt
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+	xmlns:j="clr-namespace:java.lang"
+	xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+	xmlns:x="http://www.eclipse.org/xwt">
+	<Composite.layout>
+		<ppel:PropertiesLayout></ppel:PropertiesLayout>
+	</Composite.layout>
+</Composite>
\ No newline at end of file
diff --git a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi/plugin.xml b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi/plugin.xml
index c0c7dd2..d2300da 100644
--- a/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi/plugin.xml
+++ b/bundles/fmi/tools/org.eclipse.papyrus.moka.fmi/plugin.xml
@@ -14,6 +14,10 @@
       <parser
             type="fmi"
             class="org.eclipse.papyrus.moka.fmi.modeldescription.util.FmiResourceFactoryImpl"/>
+      <parser
+            class="org.eclipse.papyrus.moka.fmi.fmu.FMUResourceFactory"
+            type="fmu">
+      </parser>
    </extension>
 
    <extension point="org.eclipse.emf.ecore.generated_package">
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/META-INF/MANIFEST.MF b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/META-INF/MANIFEST.MF
index 461a48a..ae104ef 100644
--- a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/META-INF/MANIFEST.MF
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/META-INF/MANIFEST.MF
@@ -20,7 +20,10 @@
  org.eclipse.papyrus.infra.core;bundle-version="2.0.0",
  org.eclipse.papyrus.moka.fmi.profile;bundle-version="0.7.0",
  org.eclipse.papyrus.sysml14;bundle-version="1.3.0",
- org.eclipse.papyrus.moka.ssp.profile;bundle-version="0.7.0"
+ org.eclipse.papyrus.moka.ssp.profile;bundle-version="0.7.0",
+ org.eclipse.papyrus.ease;bundle-version="0.7.0",
+ org.eclipse.papyrus.uml.service.types,
+ org.eclipse.ease;bundle-version="0.7.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: Eclipse Modeling Project
@@ -28,4 +31,5 @@
  org.eclipse.papyrus.moka.fmi.ui.commands,
  org.eclipse.papyrus.moka.fmi.ui.dialogs,
  org.eclipse.papyrus.moka.fmi.ui.dnd,
- org.eclipse.papyrus.moka.fmi.ui.handlers
+ org.eclipse.papyrus.moka.fmi.ui.handlers,
+ org.eclipse.papyrus.moka.fmi.ui.util
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/plugin.xml b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/plugin.xml
index bd993e9..c626c09 100644
--- a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/plugin.xml
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/plugin.xml
@@ -80,7 +80,7 @@
          <command
                commandId="org.eclipse.papyrus.moka.fmi.ui.handlers.GroupPortsCommand"
                id="org.eclipse.papyrus.moka.ui.utils.handlers.GroupPortsMenu"
-               label="GroupPorts"
+               label="Group Ports"
                style="push"
                tooltip="Create Signal Bus">
             <visibleWhen
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/ConnectPortViewsCommand.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/ConnectPortViewsCommand.java
new file mode 100644
index 0000000..267d433
--- /dev/null
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/ConnectPortViewsCommand.java
@@ -0,0 +1,43 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.fmi.ui.commands;
+
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.moka.fmi.ui.util.GroupPortUtils;
+
+public class ConnectPortViewsCommand  extends RecordingCommand{
+
+	private GroupPortCommand groupPortCommand;
+
+	public ConnectPortViewsCommand(TransactionalEditingDomain domain, GroupPortCommand groupPortCommand) {
+		super(domain);
+		this.groupPortCommand = groupPortCommand;
+		
+	}
+
+	@Override
+	protected void doExecute() {
+		View sourcePortView = groupPortCommand.getSourcePortView();
+		View targetPortView = groupPortCommand.getTargetPortView();
+		
+		if (sourcePortView != null && targetPortView != null) {
+			GroupPortUtils.connectBuses(sourcePortView, targetPortView);
+		}
+		
+	}
+}
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/DropFMUAsPartCommand.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/DropFMUAsPartCommand.java
index e1219e2..2d0900d 100644
--- a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/DropFMUAsPartCommand.java
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/DropFMUAsPartCommand.java
@@ -15,35 +15,21 @@
  *****************************************************************************/
 package org.eclipse.papyrus.moka.fmi.ui.commands;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Collections;
 
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.draw2d.geometry.Dimension;
 import org.eclipse.draw2d.geometry.Point;
-import org.eclipse.draw2d.geometry.Rectangle;
-import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.gmf.runtime.common.core.command.CommandResult;
-import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
-import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest.ViewDescriptor;
 import org.eclipse.gmf.runtime.diagram.ui.requests.DropObjectsRequest;
 import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
-import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
-import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
-import org.eclipse.gmf.runtime.notation.Node;
 import org.eclipse.gmf.runtime.notation.View;
-import org.eclipse.papyrus.moka.fmi.profile.util.FMIProfileUtil;
+import org.eclipse.papyrus.infra.gmfdiag.common.helper.NotationHelper;
+import org.eclipse.papyrus.moka.fmi.ui.util.FMUViewUtil;
 import org.eclipse.papyrus.moka.ssp.profile.custom.StereotypeStrings;
-import org.eclipse.papyrus.sysml14.portsandflows.FlowDirection;
-import org.eclipse.papyrus.uml.diagram.composite.custom.edit.command.CreateViewCommand;
-import org.eclipse.papyrus.uml.diagram.composite.edit.parts.PropertyPartEditPartCN;
-import org.eclipse.papyrus.uml.diagram.composite.part.UMLVisualIDRegistry;
-import org.eclipse.papyrus.uml.diagram.composite.providers.UMLElementTypes;
 import org.eclipse.papyrus.uml.tools.utils.NamedElementUtil;
 import org.eclipse.uml2.uml.AggregationKind;
 import org.eclipse.uml2.uml.Class;
@@ -53,17 +39,7 @@
 
 public class DropFMUAsPartCommand extends AbstractTransactionalCommand {
 
-	protected static final int PORT_DEFAULT_HEIGHT = 20;
-	protected static final int WIDTH_FACTOR = 11;
-	protected static final int MIN_WIDTH = 150;
-	protected static final int MIN_HEIGHT = 150;
-
-	protected static final double X_FONT_HEIGHT_FACTOR = 0.9;
-	protected static final double Y_FONT_HEIGHT_FACTOR = 0.85;
-
-	protected static final double X_WEST_OFFSET = 8;
-	protected static final int Y_LABEL_OFFSET = 20;
-
+	
 
 
 
@@ -77,19 +53,17 @@
 
 	protected TransactionalEditingDomain domain;
 
-	enum PositionKind {
-		EAST, WEST
-	};
+	
 
 	public DropFMUAsPartCommand(DropObjectsRequest request, TransactionalEditingDomain domain,
-			Class containerClass, Class sourceType, GraphicalEditPart targetEditPart, View targetView) {
+			Class containerClass, Class sourceType, GraphicalEditPart targetEditPart) {
 		super(domain, "Create a composite part from FMU and create graphical view",
 				getWorkspaceFiles(containerClass));
 		this.targetSimulator = containerClass;
 		this.sourceType = sourceType;
 		this.request = request;
 		this.targetGraphicalEditPart = targetEditPart;
-		this.targetView = targetView;
+		
 		this.domain = domain;
 	}
 
@@ -97,141 +71,34 @@
 	protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
 
 		createNewPart();
-		createGraphicalViews();
+		
+		Point location = request.getLocation().getCopy();
+		targetGraphicalEditPart.getContentPane().translateToRelative(location);
+		FMUViewUtil.createGraphicalViews(newPart, targetGraphicalEditPart, NotationHelper.findView(targetGraphicalEditPart),location, null, Collections.<Port>emptyList());
 
 		request.setResult(newPart);
 		return CommandResult.newOKCommandResult(newPart);
 
 	}
 
-	@Override
-	protected IStatus doUndo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		// TODO Auto-generated method stub
-		return super.doUndo(monitor, info);
-	}
 	protected void createNewPart() {
 		
 
 		String partName = sourceType.getName();
 
-		
 		newPart = targetSimulator.createOwnedAttribute(partName, sourceType);
 		newPart.setName(NamedElementUtil.getDefaultNameWithIncrementFromBase(partName,targetSimulator.getOwnedAttributes()));
 		newPart.setAggregation(AggregationKind.COMPOSITE_LITERAL);
 		
 		Stereotype stereotype = newPart.getApplicableStereotype(StereotypeStrings.SSDCOMPONENT_QUALIFIEDNAME);
 		if (stereotype != null) {
-			EObject SsdComponent = newPart.applyStereotype(stereotype);
+			newPart.applyStereotype(stereotype);
 		}
 		
 	}
 
 
 
-	protected void createGraphicalViews() {
-		List<Port> inPorts = collectPorts(newPart, FlowDirection.IN);
-		List<Port> outPorts = collectPorts(newPart, FlowDirection.OUT);
-		outPorts.addAll(collectPorts(newPart, FlowDirection.INOUT));
-
-		int figureWidth = Math.max(MIN_WIDTH, WIDTH_FACTOR * newPart.getName().length());
-
-		int maxPortOnOneSide = Math.max(inPorts.size(), outPorts.size());
-		int figureHeight = Math.max(MIN_HEIGHT, (2 * maxPortOnOneSide + 1) * PORT_DEFAULT_HEIGHT);
-		
-		String elementType = PropertyPartEditPartCN.VISUAL_ID;
-		
-		ViewDescriptor descriptor = new ViewDescriptor(new EObjectAdapter(newPart), Node.class,
-				((IHintedType) UMLElementTypes.getElementType(elementType))
-				.getSemanticHint(),
-				targetGraphicalEditPart.getDiagramPreferencesHint());
-		CreateViewCommand createCommand = new CreateViewCommand(domain, descriptor, targetView);
-
-		try {
-			createCommand.execute(null, null);
-		} catch (ExecutionException e) {
-			e.printStackTrace();
-		}
-
-		Point location = request.getLocation().getCopy();
-		targetGraphicalEditPart.getContentPane().translateToRelative(location);
-		Dimension dimension = new Dimension(figureWidth, figureHeight);
-		Rectangle partRectangle = new Rectangle(location, dimension);
-		SetBoundsCommand setBoundsCommand = new SetBoundsCommand(domain, "move",
-				(IAdaptable) createCommand.getCommandResult().getReturnValue(), partRectangle);
-
-		try {
-			setBoundsCommand.execute(null, null);
-		} catch (ExecutionException e) {
-			e.printStackTrace();
-		}
-
-		createPorts(inPorts, outPorts, partRectangle, (IAdaptable) createCommand.getCommandResult().getReturnValue());
-
-	}
-
-	private void createPorts(List<Port> inPorts, List<Port> outPorts, Rectangle rectangle, IAdaptable figureAdapter) {
-
-		View view = (View) figureAdapter.getAdapter(View.class);
-
-		for (int index = 0; index < inPorts.size(); index++) {
-			Port port = inPorts.get(index);
-			Point proposedLocation = new Point(0, (index + 1) * rectangle.height / (inPorts.size() + 1));
-			createPortView(port, proposedLocation, view, PositionKind.EAST);
-		}
-
-		for (int index = 0; index < outPorts.size(); index++) {
-			Port port = outPorts.get(index);
-			Point proposedLocation = new Point(rectangle.width, (index + 1) * rectangle.height / (outPorts.size() + 1));
-			createPortView(port, proposedLocation, view, PositionKind.WEST);
-
-		}
-
-	}
-
-	private void createPortView(Port port, Point location, View view, PositionKind position) {
-		ViewDescriptor descriptor = new ViewDescriptor(new EObjectAdapter(port), Node.class,
-				((IHintedType) UMLElementTypes.getElementType(UMLVisualIDRegistry.getNodeVisualID(view, port)))
-				.getSemanticHint(),
-				targetGraphicalEditPart.getDiagramPreferencesHint());
-
-		CreateViewCommand createCommand = new CreateViewCommand(domain, descriptor, view);
-
-		try {
-			createCommand.execute(null, null);
-		} catch (ExecutionException e) {
-			e.printStackTrace();
-		}
-
-		SetBoundsCommand setBoundsCommand = new SetBoundsCommand(domain, "move",
-				(IAdaptable) createCommand.getCommandResult().getReturnValue(), location);
-
-		try {
-			setBoundsCommand.execute(null, null);
-		} catch (ExecutionException e) {
-			e.printStackTrace();
-		}
-
-	
-
-		
-
-	}
-
-	
-
-	private List<Port> collectPorts(Property newPart, FlowDirection direction) {
-		List<Port> ret = new ArrayList<Port>();
-		Class partType = (Class) newPart.getType();
-		for (Port port : partType.getOwnedPorts()) {
-			if (direction ==FMIProfileUtil.getDirection(port)) {
-				ret.add(port);
-			}
-		}
-		return ret;
-	}
-
-	
-	
 
 
 	
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/DropFMUPartCommand.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/DropFMUPartCommand.java
new file mode 100644
index 0000000..d021620
--- /dev/null
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/DropFMUPartCommand.java
@@ -0,0 +1,83 @@
+/*****************************************************************************
+ * 
+ * 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 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:
+ *  CEA LIST Initial API and implementation
+ * 
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.fmi.ui.commands;
+
+import java.util.Collections;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.requests.DropObjectsRequest;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.helper.NotationHelper;
+import org.eclipse.papyrus.moka.fmi.ui.util.FMUViewUtil;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+
+public class DropFMUPartCommand extends AbstractTransactionalCommand {
+
+	
+
+
+
+	protected Class targetSimulator;
+	protected DropObjectsRequest request;
+	protected Property newPart;
+	protected GraphicalEditPart targetGraphicalEditPart;
+
+	protected View targetView;
+
+	protected TransactionalEditingDomain domain;
+
+	
+
+	public DropFMUPartCommand(DropObjectsRequest request, TransactionalEditingDomain domain,
+			Class containerClass, Property sourceFMUPart, GraphicalEditPart targetEditPart) {
+		super(domain, "Create FMU graphical view",
+				getWorkspaceFiles(containerClass));
+		this.targetSimulator = containerClass;
+		this.newPart = sourceFMUPart;
+		this.request = request;
+		this.targetGraphicalEditPart = targetEditPart;
+		
+		this.domain = domain;
+	}
+
+	@Override
+	protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+
+		Point location = request.getLocation().getCopy();
+		targetGraphicalEditPart.getContentPane().translateToRelative(location);
+		FMUViewUtil.createGraphicalViews(newPart, targetGraphicalEditPart, NotationHelper.findView(targetGraphicalEditPart),location, null,  Collections.<Port>emptyList());
+		request.setResult(newPart);
+		return CommandResult.newOKCommandResult(newPart);
+
+	}
+
+
+
+
+
+
+
+	
+}
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/GroupPortCommand.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/GroupPortCommand.java
new file mode 100644
index 0000000..5f7d7c3
--- /dev/null
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/GroupPortCommand.java
@@ -0,0 +1,98 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.fmi.ui.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.ease.module.PapyrusUtilsModule;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.moka.fmi.ui.util.GroupPortUtils;
+
+public class GroupPortCommand extends RecordingCommand{
+
+	protected List<GraphicalEditPart> portsToGroupEditParts;
+	private View targetPortView;
+	private View sourcePortView;
+	
+	
+
+	
+	public GroupPortCommand(TransactionalEditingDomain domain, List<GraphicalEditPart> portsToGroupEditParts) {
+		super(domain);
+		this.portsToGroupEditParts = portsToGroupEditParts;
+	}
+
+	
+	
+	@Override
+	protected void doExecute() {
+		sourcePortView = GroupPortUtils.groupPorts(portsToGroupEditParts);
+		List<GraphicalEditPart> connectedPortsEditParts = GroupPortUtils.getConnectedPortsEditPart(portsToGroupEditParts);
+		List<EObject> connectedPortsSemanticElements = getSemanticElements(connectedPortsEditParts);
+		if (GroupPortUtils.canBeGrouped(connectedPortsSemanticElements)) {
+			targetPortView = GroupPortUtils.groupPorts(connectedPortsEditParts);
+			PapyrusUtilsModule.refreshPapyrus();
+		}
+		
+		
+	}
+
+
+	
+	
+	public List<EObject> getSemanticElements(List<GraphicalEditPart> editParts){
+		List<EObject> eObjects = new ArrayList<EObject>();
+
+		
+
+		// Treat non-null selected object (try to adapt and return EObject)
+		if (!editParts.isEmpty()) {
+
+			// Parse current selection
+			for (Object current : editParts) {
+				
+				EObject eObject = EMFHelper.getEObject(current);
+				if (eObject != null) {
+					// we avoid to add null element in the list!
+					eObjects.add(eObject);
+				}
+			}
+		}
+
+		return eObjects;
+	}
+
+
+
+	public View getSourcePortView() {
+		
+		return sourcePortView;
+	}
+
+
+
+	public View getTargetPortView() {
+		
+		return targetPortView;
+	}
+	
+}
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/UpdateFMUTypeCommand.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/UpdateFMUTypeCommand.java
new file mode 100644
index 0000000..07ab876
--- /dev/null
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/commands/UpdateFMUTypeCommand.java
@@ -0,0 +1,71 @@
+/*****************************************************************************
+ * 
+ * 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 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:
+ *  CEA LIST Initial API and implementation
+ * 
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.fmi.ui.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.papyrus.moka.fmi.ui.util.FMUViewUtil;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Property;
+
+public class UpdateFMUTypeCommand extends AbstractTransactionalCommand {
+
+	
+
+
+
+	protected Property fmuPartToUpdate;
+	protected Class newType;
+	protected GraphicalEditPart targetGraphicalEditPart;
+
+
+	protected TransactionalEditingDomain domain;
+
+	
+
+	public UpdateFMUTypeCommand(  TransactionalEditingDomain domain,
+			Property targetFMUPart, Class sourceElement, GraphicalEditPart targetEditPart) {
+		super(domain, "Create FMU graphical view",
+				getWorkspaceFiles(targetFMUPart));
+		this.fmuPartToUpdate = targetFMUPart;
+		this.newType = sourceElement;
+		this.targetGraphicalEditPart = targetEditPart;
+		
+		this.domain = domain;
+	}
+
+	@Override
+	protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		
+		FMUViewUtil.updateFMUType(fmuPartToUpdate, newType, targetGraphicalEditPart);
+		return CommandResult.newOKCommandResult();
+
+	}
+
+
+	
+
+
+
+
+
+	
+}
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/dnd/FMUToPartDropStrategy.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/dnd/FMUToPartDropStrategy.java
index 897ad83..0c71cbe 100644
--- a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/dnd/FMUToPartDropStrategy.java
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/dnd/FMUToPartDropStrategy.java
@@ -14,9 +14,12 @@
 import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.Request;
 import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.CompoundCommand;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
 import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.requests.DropObjectsRequest;
@@ -24,22 +27,23 @@
 import org.eclipse.papyrus.moka.fmi.profile.util.FMIProfileUtil;
 import org.eclipse.papyrus.moka.fmi.ui.Activator;
 import org.eclipse.papyrus.moka.fmi.ui.commands.DropFMUAsPartCommand;
+import org.eclipse.papyrus.moka.fmi.ui.commands.DropFMUPartCommand;
+import org.eclipse.papyrus.moka.fmi.ui.commands.UpdateFMUTypeCommand;
 import org.eclipse.papyrus.moka.fmi.util.FMIUtil;
 import org.eclipse.swt.graphics.Image;
 //import org.eclipse.uml2.uml.Interaction;
 import org.eclipse.uml2.uml.Class;
-
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.TypedElement;
 
 public class FMUToPartDropStrategy extends TransactionalDropStrategy {
 
-	
-
 	public String getLabel() {
-		return "Drop an FMU as composite part";
+		return "FMU drag & drop support";
 	}
 
 	public String getDescription() {
-		return "Drop an FMU stereotyped Class into a composite structure. It automatically places input ports on the left and output ports on the right";
+		return "Drop FMU into a composite structure. When the dropped object is a FMU class, it creates a new part or updates an existing part. When the dropped object is a part, is is only displayed.";
 	}
 
 	public Image getImage() {
@@ -50,8 +54,6 @@
 		return Activator.PLUGIN_ID + ".component2part";
 	}
 
-
-
 	@Override
 	protected Command doGetCommand(Request request, final EditPart targetEditPart) {
 
@@ -63,41 +65,60 @@
 
 		if ((targetSemanticElement instanceof Class) && (dropRequest.getLocation() != null)
 				&& (targetEditPart instanceof GraphicalEditPart)) {
-			final GraphicalEditPart targetGraphicalEditPart = (GraphicalEditPart) targetEditPart;
+			 GraphicalEditPart targetGraphicalEditPart = (GraphicalEditPart) targetEditPart;
+			 Class targetSimulator = (Class) targetSemanticElement;
 
-			final Class targetSimulator = (Class) targetSemanticElement;
-
+			CompoundCommand result = new CompoundCommand();
 			List<EObject> sourceElements = getSourceEObjects(request);
 
-			// The only supported case is "Drop a single Component into a
-			// Simulator"
-			if (sourceElements.size() != 1) {
+			
+			for (EObject sourceElement : sourceElements) {
+				if (sourceElement instanceof Class && FMIProfileUtil.isFMU((Class) sourceElement)) {
+					Class sourceType = (Class) sourceElement;
+					Command resultCommand = new ICommandProxy(new DropFMUAsPartCommand(dropRequest,
+							getTransactionalEditingDomain(targetGraphicalEditPart), targetSimulator, sourceType,
+							targetGraphicalEditPart));
+
+					result.add(resultCommand);
+				}else if (sourceElement instanceof Property && ((Property) sourceElement).getType() instanceof Class && FMIProfileUtil.isFMU((Class) ((Property) sourceElement).getType())) {
+					Command resultCommand = new ICommandProxy(new DropFMUPartCommand(dropRequest,
+							getTransactionalEditingDomain(targetGraphicalEditPart), targetSimulator, (Property) sourceElement,
+							targetGraphicalEditPart));
+
+					result.add(resultCommand);
+				}
+			}
+			
+			if (result.isEmpty()) {
 				return null;
+			}else {
+				return result;
 			}
-
-			final EObject sourceElement = sourceElements.get(0);
-			if (sourceElement instanceof Class && FMIProfileUtil.isFMU((Class) sourceElement)) {
-				final Class sourceType = (Class) sourceElement;
-				Command resultCommand = new ICommandProxy(new DropFMUAsPartCommand(dropRequest,
-						getTransactionalEditingDomain(targetGraphicalEditPart), targetSimulator, sourceType,
-						targetGraphicalEditPart, getTargetView(targetGraphicalEditPart)));
-
-				// workaround to avoid conflict with structure composite default
-				// strategy
-				// The default strategy is identified after those provided by
-				// extension point
-				// The following line is "breaking the request", hence the
-				// default strategy won't return
-				// a command and won't be selected by the
-				// org.eclipse.papyrus.infra.gmfdiag.dnd.policy.CustomizableDropEditPolicy
-				//dropRequest.setObjects(Collections.EMPTY_LIST);
-				return resultCommand;
+			
+		}else if ((targetSemanticElement instanceof Property) 
+				&& ((TypedElement) targetSemanticElement).getType() instanceof Class 
+				&& FMIProfileUtil.isFMU((Class) ((TypedElement) targetSemanticElement).getType())
+				&& (dropRequest.getLocation() != null)
+				&& (targetEditPart instanceof GraphicalEditPart)) {
+			
+			GraphicalEditPart targetGraphicalEditPart = (GraphicalEditPart) targetEditPart;
+			Property targetFMUPart= (Property) targetSemanticElement;
+			
+			List<EObject> sourceElements = getSourceEObjects(request);
+			if (sourceElements.size() == 1) {
+				EObject sourceElement = sourceElements.get(0);
+				if (sourceElement != targetFMUPart.getType() && sourceElement instanceof Class && FMIProfileUtil.isFMU((Class) sourceElement) ) {
+					return new ICommandProxy(new UpdateFMUTypeCommand( getTransactionalEditingDomain(targetGraphicalEditPart), targetFMUPart, (Class)sourceElement, targetGraphicalEditPart));
+				}
+				
+				
 			}
+		
 		}
 		return null;
 	}
 
-
+	
 	@Override
 	public int getPriority() {
 		// TODO Auto-generated method stub
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/handlers/GroupPortsHanlder.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/handlers/GroupPortsHanlder.java
index b8dfd42..1393a04 100644
--- a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/handlers/GroupPortsHanlder.java
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/handlers/GroupPortsHanlder.java
@@ -17,19 +17,24 @@
 package org.eclipse.papyrus.moka.fmi.ui.handlers;
 
 import java.util.List;
-import java.util.stream.Collectors;
 
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.papyrus.ease.module.PapyrusUtilsModule;
 import org.eclipse.papyrus.infra.ui.command.AbstractCommandHandler;
-import org.eclipse.papyrus.moka.fmi.fmiprofile.FMIPort;
-import org.eclipse.uml2.uml.Element;
-import org.eclipse.uml2.uml.Port;
-import org.eclipse.uml2.uml.util.UMLUtil;
+import org.eclipse.papyrus.moka.fmi.ui.commands.ConnectPortViewsCommand;
+import org.eclipse.papyrus.moka.fmi.ui.commands.GroupPortCommand;
+import org.eclipse.papyrus.moka.fmi.ui.util.GroupPortUtils;
 
 public class GroupPortsHanlder extends AbstractCommandHandler {
 
+	protected GroupPortCommand groupPortCommand;
+	protected boolean isExecuting = false;
+
 	@Override
 	protected Command getCommand(IEvaluationContext context) {
 
@@ -37,83 +42,36 @@
 
 		if (selection != null && selection.size() > 0) {
 
-			if (selection.stream()
-					.allMatch(elem -> elem instanceof Port
-							&& UMLUtil.getStereotypeApplication((Port) elem, FMIPort.class) != null)
-					&& selection.stream().map(p -> (Element) p).collect(Collectors.groupingBy(Element::getOwner))
-							.size() == 1) {
+			if (!isExecuting && groupPortCommand == null && GroupPortUtils.canBeGrouped(selection)) {
+				return new GroupPortCommand(getEditingDomain(context), (List<GraphicalEditPart>) getSelection());
+			} else {
+				if (isExecuting && groupPortCommand == null) {
+					isExecuting = false;
+					groupPortCommand = new GroupPortCommand(getEditingDomain(context),
+							(List<GraphicalEditPart>) getSelection());
+					return groupPortCommand;
+				} else if (groupPortCommand != null) {
+					Command result = new ConnectPortViewsCommand(getEditingDomain(context), groupPortCommand);
+					groupPortCommand = null;
+					return result;
 
-//				return new RecordingCommand(getEditingDomain(context)) {
-//
-//					@Override
-//					protected void doExecute() {
-//						org.eclipse.uml2.uml.Class owningClass = ((Port) selection.get(0)).getClass_();
-//						
-//						
-//						Port newPort = (Port) PapyrusUtilsModule.createSemanticElement(owningClass,
-//								UMLElementTypes.PORT.getId());
-//						
-//						ResourceSet resSet = owningClass.eResource().getResourceSet();
-//						Stereotype busStereo = (Stereotype) resSet.getEObject(OMSimulatorProfileUtil.OMSIMULATOR_BUS_URI, true);
-//						OMSimulatorBus bus =  (OMSimulatorBus) UMLUtil.safeApplyStereotype(newPort, busStereo);
-//
-//						
-//						List<Port> semanticPorts = new ArrayList<>();
-//						List<EObject> portsViews = new ArrayList<>();
-//						GraphicalEditPart parent = null;
-//						
-//						for (Object selectedElement : getSelection()) {
-//							if (selectedElement instanceof GraphicalEditPart) {		
-//								GraphicalEditPart editPart = (GraphicalEditPart) selectedElement;
-//								semanticPorts.add((Port) editPart.resolveSemanticElement());
-//								portsViews.add(editPart.getNotationView());
-//								
-//								if (parent == null) {
-//									parent = (GraphicalEditPart) editPart.getParent();
-//								}
-//							}
-//
-//						}
-//						
-//						Node parentView = (Node) parent.getNotationView();
-//				
-//						Integer sumX = 0;
-//						Integer sumY = 0;
-//						
-//						
-//						for (EObject portView : portsViews) {
-//							Bounds constraint = (Bounds) ((Node)portView).getLayoutConstraint();
-//							sumX +=constraint.getX();
-//							sumY += constraint.getY();
-//							
-//						}
-//						
-//						
-//						double xMean = sumX/portsViews.size();
-//						double yMean = sumY/portsViews.size();
-//						Bounds parentConstraints = (Bounds) ((Node)parentView).getLayoutConstraint();
-//						
-//						
-//						RequestUtils.deleteObjectsWithRequest(portsViews);
-//						
-//						
-//						bus.getSignals().addAll(semanticPorts);
-//						
-//						PapyrusUtilsModule.createRelativeView(
-//								newPort, 
-//								UMLDIElementTypes.PORT_SHAPE.getId(),
-//								parentView ,
-//								xMean/parentConstraints.getWidth(), 
-//								yMean/parentConstraints.getHeight(),
-//								null, null);
-//					}
-//
-//				};
+				}
 			}
 
 		}
-	
+
 		return null;
 	}
 
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		isExecuting = true;
+		// we execute twice to create the busses and then get the connection
+		super.execute(event);
+		PapyrusUtilsModule.refreshPapyrus();
+		Object result = super.execute(event);
+		isExecuting = false;
+		return result;
+	}
+
 }
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/handlers/ImportFMULibHandler.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/handlers/ImportFMULibHandler.java
index 03faee3..42c8954 100644
--- a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/handlers/ImportFMULibHandler.java
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/handlers/ImportFMULibHandler.java
@@ -21,8 +21,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.swing.text.html.parser.TagElement;
-
 import org.eclipse.core.expressions.IEvaluationContext;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
@@ -41,6 +39,7 @@
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.papyrus.infra.ui.command.AbstractCommandHandler;
 import org.eclipse.papyrus.moka.fmi.fmi2uml.FMI2UML;
+import org.eclipse.papyrus.moka.fmi.fmiprofile.CS_FMU;
 import org.eclipse.papyrus.moka.fmi.fmu.FMUResource;
 import org.eclipse.papyrus.moka.fmi.fmumetamodel.FMUBundle;
 import org.eclipse.papyrus.moka.fmi.modeldescription.FmiModelDescriptionType;
@@ -52,24 +51,23 @@
 import org.eclipse.swt.widgets.MessageBox;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.uml2.uml.Package;
 import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.util.UMLUtil;
 
 /**
  * @author Sebastien Revol
  * 
  */
-public class ImportFMULibHandler
-		extends AbstractCommandHandler
+public class ImportFMULibHandler extends AbstractCommandHandler
 
 {
-	private static final String FMU_FOLDER_NAME="FMU";
+	private static final String FMU_FOLDER_NAME = "FMU";
 	private static final String DEFAULT_LIBRARY_NAME = "FMULibrary";
 
 	public String getLibraryName() {
 		String defaultModelLibName = DEFAULT_LIBRARY_NAME;
-		ImportFMUDialog dialog = new ImportFMUDialog(
-			Display.getCurrent().getActiveShell(), defaultModelLibName);
+		ImportFMUDialog dialog = new ImportFMUDialog(Display.getCurrent().getActiveShell(), defaultModelLibName);
 		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
 		dialog.setPreferenceStore(store);
 		dialog.open();
@@ -89,7 +87,7 @@
 		FileDialog fd = new FileDialog(shell, SWT.MULTI);
 		fd.setText("Select FMU to be imported");
 		// fd.setFilterPath(currentProjectDir);
-		String[] filterExt = {"*.fmu"};
+		String[] filterExt = { "*.fmu" };
 		fd.setFilterExtensions(filterExt);
 
 		if (fd.open() != null) {
@@ -113,23 +111,19 @@
 		try {
 			libFolder.delete(false, null);
 		} catch (CoreException e) {
-			Activator.getDefault().getLog()
-				.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
-					"failed to delete folder "
-						+ libFolder.getFullPath().toPortableString()));
+			Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+					"failed to delete folder " + libFolder.getFullPath().toPortableString()));
 		}
 
 	}
 
 	private static void errorDialog(Exception e, String message) {
-		ErrorDialog.openError(Display.getCurrent().getActiveShell(),
-			"Error", message,
-			new Status(IStatus.ERROR, Activator.PLUGIN_ID, message, e));
+		ErrorDialog.openError(Display.getCurrent().getActiveShell(), "Error", message,
+				new Status(IStatus.ERROR, Activator.PLUGIN_ID, message, e));
 	}
 
 	private static void errorPopup(String message) {
-		MessageBox messageBox = new MessageBox(
-			Display.getCurrent().getActiveShell(), SWT.ICON_ERROR);
+		MessageBox messageBox = new MessageBox(Display.getCurrent().getActiveShell(), SWT.ICON_ERROR);
 		messageBox.setMessage(message);
 		messageBox.open();
 	}
@@ -143,7 +137,6 @@
 		return false;
 	}
 
-	
 	@Override
 	protected Command getCommand(IEvaluationContext context) {
 		EObject selection = getSelectedElement();
@@ -162,28 +155,26 @@
 						} else {
 							canContinue = !libExists(target, libName);
 							if (!canContinue) {
-								errorPopup("A library named " + libName
-									+ " already exists! Please choose another name");
+								errorPopup(
+										"A library named " + libName + " already exists! Please choose another name");
 							}
 						}
 					}
 					URI modelURI = target.eResource().getURI();
 					IFile modelIFile = ResourcesPlugin.getWorkspace().getRoot()
-						.getFile(new Path(modelURI.toPlatformString(true)));
+							.getFile(new Path(modelURI.toPlatformString(true)));
 					IProject project = modelIFile.getProject();
 					IFolder libFolder = project.getFolder(libName);
 					if (libFolder.exists()) {
-						errorPopup("A folder with name " + libName
-							+ " already exists in the project "
-							+ libFolder.getName() + " Aborting.");
+						errorPopup("A folder with name " + libName + " already exists in the project "
+								+ libFolder.getName() + " Aborting.");
 						return;
 					}
 
 					try {
 						libFolder.create(false, true, null);
 					} catch (CoreException e) {
-						errorDialog(e, "Could not create library folder"
-							+ libFolder.getName());
+						errorDialog(e, "Could not create library folder" + libFolder.getName());
 						return;
 					}
 
@@ -192,8 +183,6 @@
 					importFMUs(target, libName, libFolder, fmuAndSlxPaths);
 
 				}
-				
-				
 
 			};
 		}
@@ -202,8 +191,8 @@
 	}
 
 	// TODO put it into common
-	public static void importFMUs(final Package target, String libName,
-			IFolder libFolder, List<String> fmuAndSlxPaths) {
+	public static void importFMUs(final Package target, String libName, IFolder libFolder,
+			List<String> fmuAndSlxPaths) {
 		List<FMUBundle> fmuBundles = new ArrayList<>();
 		ResourceSet papyResourceSet = target.eResource().getResourceSet();
 
@@ -213,23 +202,19 @@
 			try {
 				targetIFile.create(new FileInputStream(sourceFile), true, null);
 			} catch (CoreException e) {
-				errorDialog(e,
-					"Could not copy FMU File " + targetIFile.getName() + " in "+ targetIFile.getLocation());
+				errorDialog(e, "Could not copy FMU File " + targetIFile.getName() + " in " + targetIFile.getLocation());
 				cleanFolder(libFolder);
 				return;
 			} catch (FileNotFoundException e) {
-				errorDialog(e, "Could not create FMU file "
-					+ libFolder.getFullPath().toOSString() + " in workspace");
+				errorDialog(e, "Could not create FMU file " + libFolder.getFullPath().toOSString() + " in workspace");
 
 			}
 
-			URI fmuURI = URI.createPlatformResourceURI(
-				targetIFile.getFullPath().toPortableString(), true);
+			URI fmuURI = URI.createPlatformResourceURI(targetIFile.getFullPath().toPortableString(), true);
 
 			FMUResource resource = null;
 			try {
-				resource = (FMUResource) papyResourceSet.getResource(fmuURI,
-					true);
+				resource = (FMUResource) papyResourceSet.getResource(fmuURI, true);
 			} catch (Exception e) {
 				errorDialog(e, "Error importing fmu " + filePath);
 				unloadOpenedFMUs(fmuBundles);
@@ -241,8 +226,7 @@
 				if (resource.getFmuParser().getModelDescription() != null) {
 					fmuBundles.add((FMUBundle) resource.getContents().get(0));
 				} else {
-					errorPopup("Ignoring FMU " + filePath
-						+ " since it doesn't contain a modelDescription.xml file.");
+					errorPopup("Ignoring FMU " + filePath + " since it doesn't contain a modelDescription.xml file.");
 				}
 			}
 		}
@@ -250,27 +234,50 @@
 		Package libPackage = target.createNestedPackage(libName);
 
 		for (FMUBundle fmuBundle : fmuBundles) {
-			FmiModelDescriptionType modelDescription = fmuBundle
-				.getModelDescription();
+			FmiModelDescriptionType modelDescription = fmuBundle.getModelDescription();
 
-			if (modelDescription != null
-				&& !modelDescription.getCoSimulation().isEmpty()) {
-				String name = modelDescription.getCoSimulation().get(0)
-					.getModelIdentifier();
+			if (modelDescription != null && !modelDescription.getCoSimulation().isEmpty()) {
+				String name = modelDescription.getCoSimulation().get(0).getModelIdentifier();
 				Package targetPackage = libPackage.createNestedPackage(name);
 				FMI2UML.getFMUClass(fmuBundle, targetPackage);
 
 			} else {
-				errorPopup("Ignoring FMU "
-					+ modelDescription.eResource().getURI()
-						.toPlatformString(true)
-					+ " since it doesn't contain a  Cosimulation section.");
+				errorPopup("Ignoring FMU " + modelDescription.eResource().getURI().toPlatformString(true)
+						+ " since it doesn't contain a  Cosimulation section.");
 			}
 		}
 	}
 
-	public static List<FMUBundle> loadFMUs(final Package target, String libName,
-			URI fmuLibURI, List<String> fmuNames) {
+	public static CS_FMU importFMU(Package target, URI fmuURI) {
+
+		ResourceSet papyResourceSet = target.eResource().getResourceSet();
+
+		FMUResource resource = null;
+		try {
+			resource = (FMUResource) papyResourceSet.getResource(fmuURI, true);
+		} catch (Exception e) {
+			errorDialog(e, "Error importing fmu " + fmuURI.toString());
+
+			return null;
+		}
+
+		if (resource != null && resource.getContents().get(0) instanceof FMUBundle) {
+			if (resource.getFmuParser().getModelDescription() != null) {
+				FMUBundle fmuBundle = (FMUBundle) resource.getContents().get(0);
+				Class resultClass = FMI2UML.getFMUClass(fmuBundle, target);
+				if (resultClass != null) {
+					return UMLUtil.getStereotypeApplication(resultClass, CS_FMU.class);
+				}
+
+			} else {
+				errorPopup(
+						"Ignoring FMU " + fmuURI.toString() + " since it doesn't contain a modelDescription.xml file.");
+			}
+		}
+		return null;
+	}
+
+	public static List<FMUBundle> loadFMUs(final Package target, String libName, URI fmuLibURI, List<String> fmuNames) {
 		List<FMUBundle> fmuBundles = new ArrayList<>();
 		ResourceSet papyResourceSet = target.eResource().getResourceSet();
 
@@ -280,8 +287,7 @@
 
 			FMUResource resource = null;
 			try {
-				resource = (FMUResource) papyResourceSet.getResource(fmuURI,
-					true);
+				resource = (FMUResource) papyResourceSet.getResource(fmuURI, true);
 			} catch (Exception e) {
 				errorDialog(e, "Error importing fmu " + fmuName);
 				unloadOpenedFMUs(fmuBundles);
@@ -293,30 +299,24 @@
 				if (resource.getFmuParser().getModelDescription() != null) {
 					fmuBundles.add((FMUBundle) resource.getContents().get(0));
 				} else {
-					errorPopup("Ignoring FMU " + fmuName
-						+ " since it doesn't contain a modelDescription.xml file.");
+					errorPopup("Ignoring FMU " + fmuName + " since it doesn't contain a modelDescription.xml file.");
 				}
 			}
 		}
 		return fmuBundles;
 	}
 
-	public static Class createUMLMoldel(Package libPackage,
-			FMUBundle fmuBundle) {
-		FmiModelDescriptionType modelDescription = fmuBundle
-			.getModelDescription();
+	public static Class createUMLMoldel(Package libPackage, FMUBundle fmuBundle) {
+		FmiModelDescriptionType modelDescription = fmuBundle.getModelDescription();
 
-		if (modelDescription != null
-			&& !modelDescription.getCoSimulation().isEmpty()) {
-			String name = modelDescription.getCoSimulation().get(0)
-				.getModelIdentifier();
+		if (modelDescription != null && !modelDescription.getCoSimulation().isEmpty()) {
+			String name = modelDescription.getCoSimulation().get(0).getModelIdentifier();
 			Package targetPackage = libPackage.createNestedPackage(name);
 			return FMI2UML.getFMUClass(fmuBundle, targetPackage);
 
 		} else {
-			errorPopup("Ignoring FMU "
-				+ modelDescription.eResource().getURI().toPlatformString(true)
-				+ " since it doesn't contain a  Cosimulation section.");
+			errorPopup("Ignoring FMU " + modelDescription.eResource().getURI().toPlatformString(true)
+					+ " since it doesn't contain a  Cosimulation section.");
 
 			return null;
 		}
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/util/FMUPortHelper.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/util/FMUPortHelper.java
new file mode 100644
index 0000000..e1b19d1
--- /dev/null
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/util/FMUPortHelper.java
@@ -0,0 +1,164 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.fmi.ui.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.papyrus.moka.fmi.fmiprofile.FMIPort;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.util.OMSimulatorProfileUtil;
+import org.eclipse.papyrus.sysml14.portsandflows.FlowDirection;
+import org.eclipse.uml2.uml.AggregationKind;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+class FMUPortHelper {
+
+	Class type;
+
+	List<Port> inputBusses = new ArrayList<>();
+
+	List<Port> outputorBidiBusses = new ArrayList<>();
+	List<Port> inputsNotInBus = new ArrayList<>();
+	List<Port> outputsNotInBus = new ArrayList<>();
+
+	Map<Port, List<Port>> portToBusses = new HashMap<>();
+
+	Map<String, Port> nameToPort = new HashMap<>();
+
+	public FMUPortHelper(Property newPart) {
+		this((Class) newPart.getType());
+	}
+
+	public FMUPortHelper(Class fmuType) {
+		type = fmuType;
+
+		for (Property prop : type.getAllAttributes()) {
+			if (prop instanceof Port) {
+				nameToPort.put(prop.getName(), (Port) prop);
+				OMSimulatorBus bus = UMLUtil.getStereotypeApplication(prop, OMSimulatorBus.class);
+				if (bus != null) {
+					for (Port portInBus : bus.getSignals()) {
+						nameToPort.put(portInBus.getName(), portInBus);
+						List<Port> owningBusList = portToBusses.get(portInBus);
+						if (owningBusList == null) {
+							owningBusList = new ArrayList<>();
+							portToBusses.put(portInBus, owningBusList);
+						}
+						owningBusList.add(portInBus);
+					}
+					if (bus.getDirection() == FlowDirection.IN) {
+						inputBusses.add((Port) prop);
+					} else {
+						outputorBidiBusses.add((Port) prop);
+					}
+				}
+
+			}
+		}
+
+		for (Property prop : type.getAllAttributes()) {
+			if (prop instanceof Port && !portToBusses.containsKey(prop) && !inputBusses.contains(prop)
+					&& !outputorBidiBusses.contains(prop)) {
+				FMIPort fmiPort = UMLUtil.getStereotypeApplication(prop, FMIPort.class);
+				nameToPort.put(prop.getName(), (Port) prop);
+				if (fmiPort.getDirection() == FlowDirection.IN) {
+					inputsNotInBus.add((Port) prop);
+				} else {
+					outputsNotInBus.add((Port) prop);
+				}
+
+			}
+		}
+	}
+
+	public List<Port> getInputBusses() {
+		return inputBusses;
+	}
+
+	public List<Port> getOutputorBidiBusses() {
+		return outputorBidiBusses;
+	}
+
+	public List<Port> getInputsNotInBus() {
+		return inputsNotInBus;
+	}
+
+	public List<Port> getOutputsNotInBus() {
+		return outputsNotInBus;
+	}
+
+	public List<Port> getOwningBusses(Port port) {
+		List<Port> result = portToBusses.get(port);
+		if (result == null) {
+			result = new ArrayList<>();
+		}
+		return result;
+	}
+
+	public boolean isInput(Port port) {
+		return getInputsNotInBus().contains(port) || getInputBusses().contains(port);
+	}
+
+	public Port getPortByName(String portName) {
+		return nameToPort.get(portName);
+	}
+
+	public Collection<Port> getAllPorts(){
+		return nameToPort.values();
+	}
+
+	public void copyMissingBusses(FMUPortHelper otherHelper) {
+		List<Port> otherBusses = new ArrayList<>(otherHelper.getInputBusses());
+		otherBusses.addAll(otherHelper.getOutputorBidiBusses());
+		
+		for (Port otherBus : otherBusses) {
+			Port existingBus = getPortByName(otherBus.getName());
+			if (existingBus == null) {
+				OMSimulatorBus bus = UMLUtil.getStereotypeApplication(otherBus, OMSimulatorBus.class);
+				List<Port> portsToMap = new ArrayList<>(); 
+				for (Port mappedPort : bus.getSignals()) {
+					Port existingPort = getPortByName(mappedPort.getName());
+					if (existingPort != null) {
+						portsToMap.add(existingPort);
+					}
+				}
+				if (portsToMap.size() >0) {
+					Port newBusPort = type.createOwnedPort(otherBus.getName(), otherBus.getType());
+					newBusPort.setIsBehavior(true);
+					newBusPort.setAggregation(AggregationKind.COMPOSITE_LITERAL);
+					nameToPort.put(newBusPort.getName(), newBusPort);
+					Stereotype busStereo = (Stereotype) type.eResource().getResourceSet().getEObject(OMSimulatorProfileUtil.OMSIMULATOR_BUS_URI, true);
+					OMSimulatorBus newBus = (OMSimulatorBus) newBusPort.applyStereotype(busStereo);
+					newBus.getSignals().addAll(portsToMap);
+					if (bus.getDirection() == FlowDirection.IN) {
+						inputBusses.add(newBusPort);
+					}else {
+						outputorBidiBusses.add(newBusPort);
+					}
+				}
+			}
+			
+		}
+	}
+}
\ No newline at end of file
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/util/FMUViewUtil.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/util/FMUViewUtil.java
new file mode 100644
index 0000000..05ba339
--- /dev/null
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/util/FMUViewUtil.java
@@ -0,0 +1,341 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.fmi.ui.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest.ViewDescriptor;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+import org.eclipse.gmf.runtime.notation.Bounds;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.ease.module.RequestUtils;
+import org.eclipse.papyrus.moka.fmi.fmiprofile.FMIPort;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.util.OMSimulatorProfileUtil;
+import org.eclipse.papyrus.uml.diagram.composite.custom.edit.command.CreateViewCommand;
+import org.eclipse.papyrus.uml.diagram.composite.edit.parts.PortEditPart;
+import org.eclipse.papyrus.uml.diagram.composite.edit.parts.PropertyPartEditPartCN;
+import org.eclipse.papyrus.uml.diagram.composite.part.UMLVisualIDRegistry;
+import org.eclipse.papyrus.uml.diagram.composite.providers.UMLElementTypes;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.ConnectableElement;
+import org.eclipse.uml2.uml.Connector;
+import org.eclipse.uml2.uml.ConnectorEnd;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+
+public class FMUViewUtil {
+
+	public static final int PORT_DEFAULT_HEIGHT = 20;
+	protected static final int WIDTH_FACTOR = 11;
+	protected static final int MIN_WIDTH = 150;
+	protected static final int MIN_HEIGHT = 150;
+
+	protected static final double X_FONT_HEIGHT_FACTOR = 0.9;
+	protected static final double Y_FONT_HEIGHT_FACTOR = 0.85;
+
+	protected static final double X_WEST_OFFSET = 8;
+	protected static final int Y_LABEL_OFFSET = 20;
+
+	protected enum PositionKind {
+		NORTH, SOUTH, EAST, WEST
+	}
+
+	public static Node createGraphicalViews(Property newPart, GraphicalEditPart anEditPartInDiagram, View parentView, Point location,
+			Dimension dimension, List<Port> portsToHide) {
+
+		FMUPortHelper portHelper = new FMUPortHelper(newPart);
+		List<Port> inPorts = new ArrayList<>();
+		inPorts.addAll(portHelper.getInputBusses());
+		inPorts.addAll(portHelper.getInputsNotInBus());
+		
+		inPorts.removeAll(portsToHide);
+
+		List<Port> outPorts = new ArrayList<>();
+		outPorts.addAll(portHelper.getOutputorBidiBusses());
+		outPorts.addAll(portHelper.getOutputsNotInBus());
+
+		outPorts.removeAll(portsToHide);
+
+		if (dimension == null) {
+			int figureWidth = Math.max(MIN_WIDTH, WIDTH_FACTOR * newPart.getName().length());
+
+			int maxPortOnOneSide = Math.max(inPorts.size(), outPorts.size());
+			int figureHeight = Math.max(MIN_HEIGHT, (2 * maxPortOnOneSide + 1) * (PORT_DEFAULT_HEIGHT+3));
+			dimension = new Dimension(figureWidth, figureHeight);
+		}
+
+		String elementType = PropertyPartEditPartCN.VISUAL_ID;
+
+		ViewDescriptor descriptor = new ViewDescriptor(new EObjectAdapter(newPart), Node.class,
+				((IHintedType) UMLElementTypes.getElementType(elementType)).getSemanticHint(),
+				anEditPartInDiagram.getDiagramPreferencesHint());
+		CreateViewCommand createCommand = new CreateViewCommand(anEditPartInDiagram.getEditingDomain(), descriptor,
+				parentView);
+
+		try {
+			createCommand.execute(null, null);
+		} catch (ExecutionException e) {
+			e.printStackTrace();
+		}
+
+
+		Rectangle partRectangle = new Rectangle(location, dimension);
+		SetBoundsCommand setBoundsCommand = new SetBoundsCommand(anEditPartInDiagram.getEditingDomain(), "move",
+				(IAdaptable) createCommand.getCommandResult().getReturnValue(), partRectangle);
+
+		try {
+			setBoundsCommand.execute(null, null);
+		} catch (ExecutionException e) {
+			e.printStackTrace();
+		}
+
+		Node fmuNode = ((IAdaptable) createCommand.getCommandResult().getReturnValue()).getAdapter(Node.class);
+		createPorts(inPorts, PositionKind.WEST, outPorts, PositionKind.EAST, fmuNode, anEditPartInDiagram);
+
+		return fmuNode;
+	}
+
+	protected static void createPorts(List<Port> inPorts, PositionKind inPosition, List<Port> outPorts,
+			PositionKind outPosition, Node fmuNode, GraphicalEditPart diagramEditPart) {
+
+		Bounds fmuBounds = (Bounds) fmuNode.getLayoutConstraint();
+		Rectangle viewRectangle = new Rectangle(fmuBounds.getX(), fmuBounds.getY(), fmuBounds.getWidth(),
+				fmuBounds.getHeight());
+
+		for (int index = 0; index < inPorts.size(); index++) {
+			Port port = inPorts.get(index);
+
+			Point proposedLocation = getPortLocation(inPosition, viewRectangle, index, inPorts.size());
+			createPortView(port, proposedLocation, fmuNode, diagramEditPart);
+		}
+
+		for (int index = 0; index < outPorts.size(); index++) {
+			Port port = outPorts.get(index);
+			Point proposedLocation = getPortLocation(outPosition, viewRectangle, index, outPorts.size());
+			createPortView(port, proposedLocation, fmuNode, diagramEditPart);
+		}
+
+	}
+
+	private static Point getPortLocation(PositionKind position, Rectangle viewRectangle, int currentPortIndex,
+			int numberOfPorts) {
+		switch (position) {
+		case WEST:
+			return new Point(0, (currentPortIndex + 1) * viewRectangle.height / (numberOfPorts + 1));
+		case EAST:
+			return new Point(viewRectangle.width, (currentPortIndex + 1) * viewRectangle.height / (numberOfPorts + 1));
+		case NORTH:
+			return new Point((currentPortIndex + 1) * viewRectangle.width / (numberOfPorts + 1), 0);
+		case SOUTH:
+			return new Point((currentPortIndex + 1) * viewRectangle.width / (numberOfPorts + 1), viewRectangle.height);
+		}
+
+		return null;
+	}
+
+	protected static void createPortView(Port port, Point location, View parentView,
+			GraphicalEditPart anEditPartInDiagram) {
+		ViewDescriptor descriptor = new ViewDescriptor(new EObjectAdapter(port), Node.class,
+				((IHintedType) UMLElementTypes.getElementType(UMLVisualIDRegistry.getNodeVisualID(parentView, port)))
+						.getSemanticHint(),
+				anEditPartInDiagram.getDiagramPreferencesHint());
+
+		CreateViewCommand createCommand = new CreateViewCommand(anEditPartInDiagram.getEditingDomain(), descriptor,
+				parentView);
+
+		try {
+			createCommand.execute(null, null);
+		} catch (ExecutionException e) {
+			e.printStackTrace();
+		}
+
+		SetBoundsCommand setBoundsCommand = new SetBoundsCommand(anEditPartInDiagram.getEditingDomain(), "move",
+				(IAdaptable) createCommand.getCommandResult().getReturnValue(), location);
+
+		try {
+			setBoundsCommand.execute(null, null);
+		} catch (ExecutionException e) {
+			e.printStackTrace();
+		}
+
+	}
+
+	public static void updateFMUType(Property fmuPartToUpdate, Class newType,
+			GraphicalEditPart targetGraphicalEditPart) {
+
+		List<Port> portsToRemove = new ArrayList<>();
+		List<Port> newPorts = new ArrayList<>();
+
+		Map<Port, Port> portMapping = new HashMap<>();
+
+		FMUPortHelper oldPortHelper = new FMUPortHelper(fmuPartToUpdate);
+		FMUPortHelper newPortHelper = new FMUPortHelper(newType);
+		newPortHelper.copyMissingBusses(oldPortHelper);
+		
+		
+		// we first look at all the previously existing ports
+		for (Port oldPort : oldPortHelper.getAllPorts()) {
+			Port correspondingPort = newPortHelper.getPortByName(oldPort.getName());
+			// if there is not a port with the same name we will have to remove the
+			// connections to this port
+			if (correspondingPort == null) {
+				portsToRemove.add(oldPort);
+			} else {
+				// we also remove the connections if the port is transformed into a bus (or vice
+				// versa)
+				if (UMLUtil.getStereotypeApplication(oldPort, FMIPort.class) != null
+						&& UMLUtil.getStereotypeApplication(correspondingPort, FMIPort.class) == null) {
+
+					portsToRemove.add(oldPort);
+				} else if (UMLUtil.getStereotypeApplication(oldPort, OMSimulatorBus.class) != null
+						&& UMLUtil.getStereotypeApplication(correspondingPort, OMSimulatorBus.class) == null) {
+					portsToRemove.add(oldPort);
+				} else {
+					// we keep a mapping between old ports and new ports, will be used to update
+					// connectors ends end graphical views
+					portMapping.put(oldPort, correspondingPort);
+				}
+
+			}
+		}
+
+		// the new ports in the new fmu also have to be identified
+		// they are in the newPortHelper but not in the mapping created with the old fmu
+		// it also includes the ports which have been changed to busses (and vice versa)
+		for (Port newPort : newPortHelper.getAllPorts()) {
+			if (!portMapping.containsValue(newPort)) {
+				newPorts.add(newPort);
+			}
+		}
+
+		fmuPartToUpdate.setType(newType);
+
+		updateConnectorEnds(fmuPartToUpdate.getClass_(), portMapping);
+
+		// if we execute the function without a graphical representation, we explicitely
+		// destroy connectors for port which are not anymore in the new fmu
+		if (targetGraphicalEditPart == null) {
+			destroyConnectors(fmuPartToUpdate.getClass_(), portsToRemove);
+		} else {
+			// if we have the diagram
+			List<View> viewToDestroy = new ArrayList<>();
+			for (PortEditPart portEditPart : getPortEditPartsMap(targetGraphicalEditPart).values()) {
+				View portView = portEditPart.getNotationView();
+
+				Port oldPort = (Port) portView.getElement();
+				Port newPort = portMapping.get(oldPort);
+				// if there is still a port with the same name in the new FMU, the existing
+				// graphical
+				// view has now to point to the new port
+				if (newPort != null) {
+					portView.setElement(newPort);
+				} else {
+					// else the graphical view has to be removed.
+					// It will also atomatically remove the associated connectors (view + semantic
+					// element)
+					viewToDestroy.add(portView);
+				}
+
+			}
+			RequestUtils.deleteObjectsWithRequest(new ArrayList<>(viewToDestroy));
+			displayNewPorts(newPorts, newPortHelper, portMapping.isEmpty(), targetGraphicalEditPart);
+
+		}
+
+	}
+
+	public static Map<Port, PortEditPart> getPortEditPartsMap(GraphicalEditPart fmuEditPart) {
+		Map<Port, PortEditPart> result = new HashMap<>();
+		for (Object childObject : fmuEditPart.getChildren()) {
+			if (childObject instanceof PortEditPart) {
+				View portView = ((PortEditPart) childObject).getNotationView();
+				result.put((Port) portView.getElement(), (PortEditPart) childObject);
+			}
+		}
+		return result;
+	}
+
+	private static void displayNewPorts(List<Port> newPorts, FMUPortHelper newPortHelper, boolean noPreservedPorts,
+			GraphicalEditPart targetGraphicalEditPart) {
+
+		List<Port> inputPorts = new ArrayList<>();
+		List<Port> outputOrBidiPorts = new ArrayList<>();
+
+		for (Port newPort : newPorts) {
+			// we display new ports which are not mapped in a bus and new busses
+			if (newPortHelper.getOwningBusses(newPort).isEmpty() || OMSimulatorProfileUtil.isBus(newPort)) {
+				if (newPortHelper.isInput(newPort)) {
+					inputPorts.add(newPort);
+				} else {
+					outputOrBidiPorts.add(newPort);
+				}
+			}
+		}
+
+		PositionKind inPosition = noPreservedPorts ? PositionKind.WEST : PositionKind.NORTH;
+		PositionKind outPosition = noPreservedPorts ? PositionKind.EAST : PositionKind.SOUTH;
+
+		createPorts(inputPorts, inPosition, outputOrBidiPorts, outPosition, (Node) targetGraphicalEditPart.getModel(),
+				targetGraphicalEditPart);
+
+	}
+
+	private static void updateConnectorEnds(Class owningClass, Map<Port, Port> portMapping) {
+		for (Connector connector : owningClass.getOwnedConnectors()) {
+			for (ConnectorEnd end : connector.getEnds()) {
+				ConnectableElement oldRole = end.getRole();
+				if (oldRole instanceof Port) {
+					Port newPort = portMapping.get(oldRole);
+					if (newPort != null) {
+						end.setRole(newPort);
+					}
+				}
+			}
+		}
+
+	}
+
+	private static void destroyConnectors(Class owningClass, List<Port> portsToRemove) {
+		Set<Connector> connectorToDestroy = new HashSet<>();
+		for (Connector connector : owningClass.getOwnedConnectors()) {
+			for (ConnectorEnd end : connector.getEnds()) {
+				if (portsToRemove.contains(end.getRole())) {
+					connectorToDestroy.add(connector);
+				}
+			}
+		}
+
+		RequestUtils.deleteObjectsWithRequest(new ArrayList<>(connectorToDestroy));
+	}
+
+}
diff --git a/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/util/GroupPortUtils.java b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/util/GroupPortUtils.java
new file mode 100644
index 0000000..40c9ab4
--- /dev/null
+++ b/bundles/fmi/ui/org.eclipse.papyrus.moka.fmi.ui/src/org/eclipse/papyrus/moka/fmi/ui/util/GroupPortUtils.java
@@ -0,0 +1,149 @@
+/*****************************************************************************
+ * 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 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:
+ *  CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.fmi.ui.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.gef.ConnectionEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.notation.Bounds;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.ease.module.PapyrusUtilsModule;
+import org.eclipse.papyrus.ease.module.RequestUtils;
+import org.eclipse.papyrus.moka.fmi.fmiprofile.FMIPort;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.OMSimulatorBus;
+import org.eclipse.papyrus.moka.ssp.omsimulatorprofile.util.OMSimulatorProfileUtil;
+import org.eclipse.papyrus.uml.service.types.element.UMLDIElementTypes;
+import org.eclipse.papyrus.uml.service.types.element.UMLElementTypes;
+import org.eclipse.uml2.uml.AggregationKind;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+public class GroupPortUtils {
+
+	public static boolean canBeGrouped(List<EObject> elements) {
+		return (elements.stream()
+				.allMatch(elem -> elem instanceof Port
+						&& UMLUtil.getStereotypeApplication((Port) elem, FMIPort.class) != null)
+				&& 
+				elements.stream().map(p -> (Element) p).collect(Collectors.groupingBy(Element::getOwner))
+						.size() == 1);
+	}
+	
+
+	
+	public static List<GraphicalEditPart> getConnectedPortsEditPart(List<GraphicalEditPart> portsEditParts){
+		List<GraphicalEditPart> result = new ArrayList<GraphicalEditPart>();
+		
+		for (GraphicalEditPart portEditPart:portsEditParts) {
+			List<ConnectionEditPart> sourceConnections = portEditPart.getSourceConnections();
+			for (ConnectionEditPart sourceConnection: sourceConnections ) {
+				result.add((GraphicalEditPart) sourceConnection.getTarget());
+			}
+			
+			List<ConnectionEditPart> targetConnections = portEditPart.getTargetConnections();
+			for (ConnectionEditPart sourceConnection: targetConnections ) {
+				result.add((GraphicalEditPart) sourceConnection.getSource());
+			}
+			
+		}
+		
+		return result;
+	}
+
+
+
+	public static View groupPorts(
+			List<GraphicalEditPart> portsToGroupEditParts) {
+		org.eclipse.uml2.uml.Class owningClass = ((Port) portsToGroupEditParts.get(0).resolveSemanticElement()).getClass_();
+		
+		
+		Port newPort = (Port) PapyrusUtilsModule.createSemanticElement(owningClass,
+				UMLElementTypes.PORT.getId());
+		
+		newPort.setAggregation(AggregationKind.COMPOSITE_LITERAL);
+		
+		ResourceSet resSet = owningClass.eResource().getResourceSet();
+		Stereotype busStereo = (Stereotype) resSet.getEObject(OMSimulatorProfileUtil.OMSIMULATOR_BUS_URI, true);
+		OMSimulatorBus bus =  (OMSimulatorBus) UMLUtil.safeApplyStereotype(newPort, busStereo);
+
+		
+		List<Port> semanticPorts = new ArrayList<>();
+		List<EObject> portsViews = new ArrayList<>();
+		GraphicalEditPart parent = null;
+		
+		for (Object selectedElement : portsToGroupEditParts) {
+			if (selectedElement instanceof GraphicalEditPart) {		
+				GraphicalEditPart editPart = (GraphicalEditPart) selectedElement;
+			
+				semanticPorts.add((Port) editPart.resolveSemanticElement());
+				portsViews.add(editPart.getNotationView());
+				
+				if (parent == null) {
+					parent = (GraphicalEditPart) editPart.getParent();
+				}
+			}
+
+		}
+		
+		Node parentView = (Node) parent.getNotationView();
+
+		Integer sumX = 0;
+		Integer sumY = 0;
+		
+		
+		for (EObject portView : portsViews) {
+			Bounds constraint = (Bounds) ((Node)portView).getLayoutConstraint();
+			sumX +=constraint.getX();
+			sumY += constraint.getY();
+			
+		}
+		
+		
+		double xMean = sumX/portsViews.size();
+		double yMean = sumY/portsViews.size();
+		Bounds parentConstraints = (Bounds) ((Node)parentView).getLayoutConstraint();
+		
+		
+		RequestUtils.deleteObjectsWithRequest(portsViews);
+		
+		
+		bus.getSignals().addAll(semanticPorts);
+		
+		return PapyrusUtilsModule.createRelativeView(
+				newPort, 
+				UMLDIElementTypes.PORT_SHAPE.getId(),
+				parentView ,
+				xMean/parentConstraints.getWidth(), 
+				yMean/parentConstraints.getHeight(),
+				null, null);
+		
+		
+	}
+	
+	
+	public static View connectBuses(View sourceBusView, View targetBusView) {
+		return PapyrusUtilsModule.createSemanticElementAndLinkView(UMLDIElementTypes.CONNECTOR_EDGE.getId(), (Node)sourceBusView, 0.5, 0.5, (Node)targetBusView,	0.5, 0.5).getView();
+		
+	}
+}
diff --git a/bundles/scripting/org.eclipse.papyrus.moka.ease/scripts/python/bootstrap.py b/bundles/scripting/org.eclipse.papyrus.moka.ease/scripts/python/bootstrap.py
index befcf94..8e3e89f 100644
--- a/bundles/scripting/org.eclipse.papyrus.moka.ease/scripts/python/bootstrap.py
+++ b/bundles/scripting/org.eclipse.papyrus.moka.ease/scripts/python/bootstrap.py
@@ -34,7 +34,8 @@
 
 def getListClass():
      if is_jython() :
-         return org.eclipse.papyrus.ease.semantics.proxy.ValueListProxy
+        
+         return  org.eclipse.papyrus.moka.ease.semantics.proxy.ValueListProxy
      else:
         return py4j.java_collections.JavaList
 
@@ -42,7 +43,7 @@
 def getMapClass():
     
      if is_jython() :
-         return org.eclipse.papyrus.ease.semantics.proxy.MapProxy
+         return org.eclipse.papyrus.moka.ease.semantics.proxy.MapProxy
      else:
         return py4j.java_collections.JavaMap
 
diff --git a/bundles/scripting/org.eclipse.papyrus.moka.ease/scripts/python/parametricutils.py b/bundles/scripting/org.eclipse.papyrus.moka.ease/scripts/python/parametricutils.py
index f2cc8cf..aed8c39 100644
--- a/bundles/scripting/org.eclipse.papyrus.moka.ease/scripts/python/parametricutils.py
+++ b/bundles/scripting/org.eclipse.papyrus.moka.ease/scripts/python/parametricutils.py
@@ -1,6 +1,6 @@
 
 include("platform:/plugin/org.eclipse.papyrus.ease/scripts/python/papyrusutils.py")
-include("platform:/plugin/org.eclipse.papyrus.ease/scripts/python/bootstrap.py")    
+include("platform:/plugin/org.eclipse.papyrus.moka.ease/scripts/python/bootstrap.py")    
 
 loadModule("/Modeling/MokaParametric")
 loadModule("/Modeling/PapyrusUtils")
diff --git a/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/EASEEngineManager.java b/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/EASEEngineManager.java
index 3f75662..0afb32f 100644
--- a/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/EASEEngineManager.java
+++ b/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/EASEEngineManager.java
@@ -104,7 +104,7 @@
 	}
 
 	private static void runBootstrap(IReplEngine engine, EASELanguage language) {
-		Bundle bundle = Platform.getBundle("org.eclipse.papyrus.ease");
+		Bundle bundle = Platform.getBundle("org.eclipse.papyrus.moka.ease");
 		//URI uri = new URI("platform:/plugin/org.eclipse.papyrus.moka.parametric.ease/"+ language.getBootstrapPath());
 		URL entryUrl = bundle.getEntry(language.getBootstrapPath());
 		Script script = new Script("EASEBootstrapScript", entryUrl, false);
diff --git a/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/python/JythonRunnableScriptCompiler.java b/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/python/JythonRunnableScriptCompiler.java
index f700a1e..261dffc 100644
--- a/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/python/JythonRunnableScriptCompiler.java
+++ b/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/python/JythonRunnableScriptCompiler.java
@@ -52,7 +52,7 @@
 			
 			
 			bodyBuilder.append("from "+RunnableScript.class.getPackage().getName()+" import "+ RunnableScript.class.getSimpleName()+"\n");
-			bodyBuilder.append("class "+getFunctionName(obj)+"(RunnableScript):\n");
+			bodyBuilder.append("class "+getFunctionName(obj)+"("+RunnableScript.class.getSimpleName()+"):\n");
 			
 			bodyBuilder.append(getTab(1)+"def __init__(self):\n");
 			bodyBuilder.append(getTab(2)+"self.block= PythonWrapper(paramObject.getProxyParam())\n");
diff --git a/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/python/PythonRunnableScriptCompiler.java b/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/python/PythonRunnableScriptCompiler.java
index 1b57893..d568d52 100644
--- a/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/python/PythonRunnableScriptCompiler.java
+++ b/bundles/scripting/org.eclipse.papyrus.moka.ease/src/org/eclipse/papyrus/moka/ease/parametric/python/PythonRunnableScriptCompiler.java
@@ -85,7 +85,7 @@
 			}
 			
 			bodyBuilder.append(getTab(1)+"class Java:\n");
-			bodyBuilder.append(getTab(2)+"implements = ['org.eclipse.papyrus.ease.parametric.RunnableScript']\n");
+			bodyBuilder.append(getTab(2)+"implements = ['"+RunnableScript.class.getName()+"']\n");
 		
 			bodyBuilder.append("\nparamObject.setScript("+getFunctionName(obj)+"())");
 		} catch (IOException e) {
diff --git a/bundles/simex/org.eclipse.papyrus.moka.simex/src/org/eclipse/papyrus/moka/simex/viewpoint/SimexViewpointListener.java b/bundles/simex/org.eclipse.papyrus.moka.simex/src/org/eclipse/papyrus/moka/simex/viewpoint/SimexViewpointListener.java
index 54ec476..85dafe0 100644
--- a/bundles/simex/org.eclipse.papyrus.moka.simex/src/org/eclipse/papyrus/moka/simex/viewpoint/SimexViewpointListener.java
+++ b/bundles/simex/org.eclipse.papyrus.moka.simex/src/org/eclipse/papyrus/moka/simex/viewpoint/SimexViewpointListener.java
@@ -60,7 +60,7 @@
 		// context are enabled. Conversely, if SIMEX architecture context is left
 		// then additional drop strategies are disabled.
 		final String architectureContext = notification.getNewStringValue();
-		if(architectureContext.equals(SIMEX_ARCHITECTURE_FRAMEWORK)) {
+		if(SIMEX_ARCHITECTURE_FRAMEWORK.equals(architectureContext)) {
 			if(!this.isActive) {
 				this.configureDndStrategies();
 				this.isActive = true;