First version of IoTML profile

 - profile with Papyrus diagrams
 - generated code

Change-Id: Ifb1b34a5567f4ae01658da43771b9d4e8666b011
Signed-off-by: Benoit Maggi <benoit.maggi@cea.fr>
diff --git a/org.eclipse.papyrus.iotml.profile/.classpath b/org.eclipse.papyrus.iotml.profile/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.papyrus.iotml.profile/.project b/org.eclipse.papyrus.iotml.profile/.project
new file mode 100644
index 0000000..561f5b8
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.papyrus.iotml.profile</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.papyrus.iotml.profile/META-INF/MANIFEST.MF b/org.eclipse.papyrus.iotml.profile/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..671b4f4
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/META-INF/MANIFEST.MF
@@ -0,0 +1,45 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.iotml.profile;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: IoTML.Animate,
+ IoTML.Animate.impl,
+ IoTML.Animate.util,
+ IoTML.Hardware.Actuator,
+ IoTML.Hardware.Actuator.impl,
+ IoTML.Hardware.Actuator.util,
+ IoTML.Hardware.Core,
+ IoTML.Hardware.Core.impl,
+ IoTML.Hardware.Core.util,
+ IoTML.Hardware.Network,
+ IoTML.Hardware.Network.impl,
+ IoTML.Hardware.Network.util,
+ IoTML.Hardware.Sensor,
+ IoTML.Hardware.Sensor.impl,
+ IoTML.Hardware.Sensor.util,
+ IoTML.Hybrid,
+ IoTML.Hybrid.impl,
+ IoTML.Hybrid.util,
+ IoTML.Software.Artefact,
+ IoTML.Software.Artefact.impl,
+ IoTML.Software.Artefact.util,
+ IoTML.Software.Core.Structure,
+ IoTML.Software.Core.Structure.impl,
+ IoTML.Software.Core.Structure.util,
+ IoTML.Software.Resource,
+ IoTML.Software.Resource.impl,
+ IoTML.Software.Resource.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.papyrus.marte.static.profile;visibility:=reexport,
+ org.eclipse.papyrus.sysml14;visibility:=reexport,
+ org.eclipse.uml2.types;visibility:=reexport,
+ org.eclipse.uml2.uml;visibility:=reexport,
+ org.eclipse.papyrus.uml.extensionpoints;bundle-version="1.2.0"
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.papyrus.iotml.profile/build.properties b/org.eclipse.papyrus.iotml.profile/build.properties
new file mode 100644
index 0000000..4465407
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml,\
+               plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.di b/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.di
new file mode 100644
index 0000000..bf9abab
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.di
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>
diff --git a/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.genmodel b/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.genmodel
new file mode 100644
index 0000000..1ff6e93
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.genmodel
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/uml2/2.2.0/GenModel"
+    modelDirectory="/IoT-ML/src" modelPluginID="IoT-ML" modelName="IoT-ML"
+    rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" importerID="org.eclipse.uml2.uml.ecore.importer"
+    copyrightFields="false" usedGenPackages="../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../org.eclipse.papyrus.marte.static.profile/resources/MARTE.genmodel#//MARTE ../org.eclipse.papyrus.marte.static.profile/resources/MARTE.genmodel#//MARTE_Library ../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="false" importOrganizing="true">
+  <genAnnotations source="http://www.eclipse.org/emf/2002/GenModel/importer/org.eclipse.uml2.uml.ecore.importer">
+    <details key="OPPOSITE_ROLE_NAMES" value="IGNORE"/>
+    <details key="DUPLICATE_FEATURES" value="DISCARD"/>
+    <details key="ANNOTATION_DETAILS" value="PROCESS"/>
+    <details key="PROPERTY_DEFAULT_EXPRESSIONS" value="IGNORE"/>
+    <details key="DUPLICATE_FEATURE_INHERITANCE" value="DISCARD"/>
+    <details key="COMMENTS" value="PROCESS"/>
+    <details key="DERIVED_FEATURES" value="PROCESS"/>
+    <details key="SUPER_CLASS_ORDER" value="PROCESS"/>
+    <details key="DUPLICATE_OPERATION_INHERITANCE" value="DISCARD"/>
+    <details key="REDEFINING_OPERATIONS" value="REPORT"/>
+    <details key="INVARIANT_CONSTRAINTS" value="PROCESS"/>
+    <details key="UNION_PROPERTIES" value="REPORT"/>
+    <details key="DUPLICATE_OPERATIONS" value="DISCARD"/>
+    <details key="NON_API_INVARIANTS" value="IGNORE"/>
+    <details key="CAMEL_CASE_NAMES" value="IGNORE"/>
+    <details key="SUBSETTING_PROPERTIES" value="REPORT"/>
+    <details key="OPERATION_BODIES" value="IGNORE"/>
+    <details key="ECORE_TAGGED_VALUES" value="PROCESS"/>
+    <details key="UNTYPED_PROPERTIES" value="REPORT"/>
+    <details key="REDEFINING_PROPERTIES" value="REPORT"/>
+    <details key="INVOCATION_DELEGATES" value="IGNORE"/>
+    <details key="VALIDATION_DELEGATES" value="IGNORE"/>
+  </genAnnotations>
+  <foreignModel>IoT-ML.profile.uml</foreignModel>
+  <genPackages xsi:type="genmodel:GenPackage" prefix="IoTML" disposableProviderFactory="true"
+      ecorePackage="IoTML.ecore#/">
+    <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Animate" disposableProviderFactory="true"
+        ecorePackage="IoTML.ecore#//Animate">
+      <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Animate/HumanUser">
+        <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+            propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Animate/HumanUser/base_Actor"/>
+      </genClasses>
+    </nestedGenPackages>
+    <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Hardware" disposableProviderFactory="true"
+        ecorePackage="IoTML.ecore#//Hardware">
+      <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Actuator" disposableProviderFactory="true"
+          ecorePackage="IoTML.ecore#//Hardware/Actuator">
+        <genEnums xsi:type="genmodel:GenEnum" typeSafeEnumCompatible="false" ecoreEnum="IoTML.ecore#//Hardware/Actuator/EnergyKind">
+          <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="IoTML.ecore#//Hardware/Actuator/EnergyKind/Electrical"/>
+          <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="IoTML.ecore#//Hardware/Actuator/EnergyKind/Mechanical"/>
+          <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="IoTML.ecore#//Hardware/Actuator/EnergyKind/Pneumatical"/>
+          <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="IoTML.ecore#//Hardware/Actuator/EnergyKind/Hydraulic"/>
+          <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="IoTML.ecore#//Hardware/Actuator/EnergyKind/None"/>
+        </genEnums>
+        <genEnums xsi:type="genmodel:GenEnum" typeSafeEnumCompatible="false" ecoreEnum="IoTML.ecore#//Hardware/Actuator/MovementKind">
+          <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="IoTML.ecore#//Hardware/Actuator/MovementKind/Linear"/>
+          <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="IoTML.ecore#//Hardware/Actuator/MovementKind/Rotational"/>
+        </genEnums>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Hardware/Actuator/HwCommonActuator">
+          <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute IoTML.ecore#//Hardware/Actuator/HwCommonActuator/energyKind"/>
+          <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute IoTML.ecore#//Hardware/Actuator/HwCommonActuator/movementKind"/>
+          <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute IoTML.ecore#//Hardware/Actuator/HwCommonActuator/isPowered"/>
+        </genClasses>
+      </nestedGenPackages>
+      <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Sensor" disposableProviderFactory="true"
+          ecorePackage="IoTML.ecore#//Hardware/Sensor">
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Hardware/Sensor/HwCommonSensor">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Hardware/Sensor/HwCommonSensor/inputValueType"/>
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Hardware/Sensor/HwCommonSensor/outputValueType"/>
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Hardware/Sensor/HwCommonSensor/hwcommonsensor"/>
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Hardware/Sensor/HwCommonSensor/transferFunction"/>
+        </genClasses>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Hardware/Sensor/HwRFIDReaderSensor">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Hardware/Sensor/HwRFIDReaderSensor/tag"/>
+        </genClasses>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Hardware/Sensor/HwTag">
+          <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute IoTML.ecore#//Hardware/Sensor/HwTag/tageFrequency"/>
+        </genClasses>
+      </nestedGenPackages>
+      <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Network" disposableProviderFactory="true"
+          ecorePackage="IoTML.ecore#//Hardware/Network">
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Hardware/Network/ConnectedDevice"/>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Hardware/Network/Gateway"/>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Hardware/Network/Server"/>
+      </nestedGenPackages>
+      <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Core" disposableProviderFactory="true"
+          ecorePackage="IoTML.ecore#//Hardware/Core">
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Hardware/Core/AllocateResource">
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Hardware/Core/AllocateResource/AllocateResource_C1">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Hardware/Core/AllocateResource/AllocateResource_C1/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Hardware/Core/AllocateResource/AllocateResource_C1/context"/>
+          </genOperations>
+        </genClasses>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Hardware/Core/HasService">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Hardware/Core/HasService/base_Association"/>
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Hardware/Core/HasService/HasDevice_C1">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Hardware/Core/HasService/HasDevice_C1/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Hardware/Core/HasService/HasDevice_C1/context"/>
+          </genOperations>
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Hardware/Core/HasService/HasDevice_C2">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Hardware/Core/HasService/HasDevice_C2/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Hardware/Core/HasService/HasDevice_C2/context"/>
+          </genOperations>
+        </genClasses>
+      </nestedGenPackages>
+    </nestedGenPackages>
+    <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Hybrid" disposableProviderFactory="true"
+        ecorePackage="IoTML.ecore#//Hybrid">
+      <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Hybrid/PhysicalEntity"/>
+    </nestedGenPackages>
+    <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Software" disposableProviderFactory="true"
+        ecorePackage="IoTML.ecore#//Software">
+      <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Artefact" disposableProviderFactory="true"
+          ecorePackage="IoTML.ecore#//Software/Artefact">
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Artefact/PropertyAccess">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Artefact/PropertyAccess/base_Association"/>
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Artefact/PropertyAccess/accessedProperty"/>
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Software/Artefact/PropertyAccess/PropertyAccess_C1">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/PropertyAccess/PropertyAccess_C1/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/PropertyAccess/PropertyAccess_C1/context"/>
+          </genOperations>
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Software/Artefact/PropertyAccess/PropertyAccess_C2">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/PropertyAccess/PropertyAccess_C2/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/PropertyAccess/PropertyAccess_C2/context"/>
+          </genOperations>
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Software/Artefact/PropertyAccess/propertyAccess_C3">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/PropertyAccess/propertyAccess_C3/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/PropertyAccess/propertyAccess_C3/context"/>
+          </genOperations>
+        </genClasses>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Artefact/DigitalArtefact">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Artefact/DigitalArtefact/base_Class"/>
+        </genClasses>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Artefact/VirtualEntity">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Artefact/VirtualEntity/phisicalEntitySpecification"/>
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Artefact/VirtualEntity/physicalEntity"/>
+        </genClasses>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Artefact/ProvideService">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Artefact/ProvideService/base_Association"/>
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Software/Artefact/ProvideService/ProvideService_C2">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/ProvideService/ProvideService_C2/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/ProvideService/ProvideService_C2/context"/>
+          </genOperations>
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Software/Artefact/ProvideService/ProvideService_C1">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/ProvideService/ProvideService_C1/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/ProvideService/ProvideService_C1/context"/>
+          </genOperations>
+        </genClasses>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Artefact/ProvideResource">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Artefact/ProvideResource/base_Association"/>
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Software/Artefact/ProvideResource/ProvideResource_C1">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/ProvideResource/ProvideResource_C1/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/ProvideResource/ProvideResource_C1/context"/>
+          </genOperations>
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Software/Artefact/ProvideResource/ProvideResource_C2">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/ProvideResource/ProvideResource_C2/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/ProvideResource/ProvideResource_C2/context"/>
+          </genOperations>
+        </genClasses>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Artefact/ServiceDescription">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Artefact/ServiceDescription/base_Interface"/>
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Artefact/ServiceDescription/resourceGetSet"/>
+        </genClasses>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Artefact/Service">
+          <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="IoTML.ecore#//Software/Artefact/Service/Service_C1">
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/Service/Service_C1/diagnostics"/>
+            <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="IoTML.ecore#//Software/Artefact/Service/Service_C1/context"/>
+          </genOperations>
+        </genClasses>
+      </nestedGenPackages>
+      <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Core" disposableProviderFactory="true"
+          ecorePackage="IoTML.ecore#//Software/Core">
+        <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Structure" disposableProviderFactory="true"
+            ecorePackage="IoTML.ecore#//Software/Core/Structure">
+          <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Core/Structure/MetaValueSpecification">
+            <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+                propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Core/Structure/MetaValueSpecification/base_ValueSpecification"/>
+            <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+                propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Core/Structure/MetaValueSpecification/type"/>
+            <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute IoTML.ecore#//Software/Core/Structure/MetaValueSpecification/description"/>
+          </genClasses>
+          <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Core/Structure/DetailedValueSpecification">
+            <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+                propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Core/Structure/DetailedValueSpecification/base_ValueSpecification"/>
+            <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+                createChild="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Core/Structure/DetailedValueSpecification/metaSpecification"/>
+          </genClasses>
+        </nestedGenPackages>
+      </nestedGenPackages>
+      <nestedGenPackages xsi:type="genmodel:GenPackage" prefix="Resource" disposableProviderFactory="true"
+          ecorePackage="IoTML.ecore#//Software/Resource">
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Resource/NetworkResource">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Resource/NetworkResource/base_Class"/>
+        </genClasses>
+        <genClasses xsi:type="genmodel:GenClass" ecoreClass="IoTML.ecore#//Software/Resource/OnDeviceResource">
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Resource/OnDeviceResource/base_Class"/>
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Resource/OnDeviceResource/deviceBroker"/>
+          <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+              propertySortChoices="true" ecoreFeature="ecore:EReference IoTML.ecore#//Software/Resource/OnDeviceResource/memoryBroker"/>
+        </genClasses>
+      </nestedGenPackages>
+    </nestedGenPackages>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.notation b/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.notation
new file mode 100644
index 0000000..ef5e169
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.notation
@@ -0,0 +1,2145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:configuration="http://www.eclipse.org/papyrus/infra/viewpoints/configuration" xmlns:css="http://www.eclipse.org/papyrus/infra/gmfdiag/css" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/viewpoints/policy/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML">
+  <notation:Diagram xmi:id="_s3jpcCtgEeepEtCwqDnj2w" type="PapyrusUMLProfileDiagram" name="Animate" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_wQU8ECtgEeepEtCwqDnj2w" type="Class_MetaclassShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_wQkzsCtgEeepEtCwqDnj2w" type="Class_MetaclassNameLabel"/>
+      <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Actor"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wQU8EStgEeepEtCwqDnj2w" x="188" y="145" width="143"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_wTFVICtgEeepEtCwqDnj2w" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_wTFVIStgEeepEtCwqDnj2w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_wTF8MCtgEeepEtCwqDnj2w" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Actor"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wTFVIitgEeepEtCwqDnj2w" x="200"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_9sUnICtgEeepEtCwqDnj2w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_9sV1QCtgEeepEtCwqDnj2w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_9saGsCtgEeepEtCwqDnj2w" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_9saGsStgEeepEtCwqDnj2w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_9saGsitgEeepEtCwqDnj2w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_9saGsytgEeepEtCwqDnj2w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9saGtCtgEeepEtCwqDnj2w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_9satwCtgEeepEtCwqDnj2w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_9satwStgEeepEtCwqDnj2w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_9satwitgEeepEtCwqDnj2w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_9satwytgEeepEtCwqDnj2w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9satxCtgEeepEtCwqDnj2w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_9sK2ICtgEeepEtCwqDnj2w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9sUnIStgEeepEtCwqDnj2w" x="188" y="254" width="143" height="50"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_s3jpcStgEeepEtCwqDnj2w" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_s3jpcitgEeepEtCwqDnj2w"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_s3jpcytgEeepEtCwqDnj2w">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_qEMJ8CtgEeepEtCwqDnj2w"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_qEMJ8CtgEeepEtCwqDnj2w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_wTK0sCtgEeepEtCwqDnj2w" type="StereotypeCommentLink" source="_wQU8ECtgEeepEtCwqDnj2w" target="_wTFVICtgEeepEtCwqDnj2w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_wTK0sStgEeepEtCwqDnj2w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_wTLbwStgEeepEtCwqDnj2w" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Actor"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wTK0sitgEeepEtCwqDnj2w" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wTK0sytgEeepEtCwqDnj2w"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wTLbwCtgEeepEtCwqDnj2w"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_BSFM4CthEeepEtCwqDnj2w" type="Extension_Edge" source="_9sUnICtgEeepEtCwqDnj2w" target="_wQU8ECtgEeepEtCwqDnj2w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_BSFM4SthEeepEtCwqDnj2w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_BR0uMCthEeepEtCwqDnj2w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_BSFM4ithEeepEtCwqDnj2w" points="[260, 303, -643984, -643984]$[260, 195, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BS2B4CthEeepEtCwqDnj2w" id="(0.5034965034965035,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BS2o8CthEeepEtCwqDnj2w" id="(0.5034965034965035,1.0)"/>
+    </edges>
+  </notation:Diagram>
+  <css:ModelStyleSheets xmi:id="_5v-GUCtgEeepEtCwqDnj2w">
+    <stylesheets xmi:type="css:StyleSheetReference" xmi:id="_5v-tYCtgEeepEtCwqDnj2w" path="/org.eclipse.papyrus.iotml.profile/model/model-style.css"/>
+  </css:ModelStyleSheets>
+  <notation:Diagram xmi:id="_SblEcCthEeepEtCwqDnj2w" type="PapyrusUMLClassDiagram" name="Core package" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_gKf2ECtiEeeLDNWa-Yk0bg" type="Package_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_gKkukCtiEeeLDNWa-Yk0bg" type="Package_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_gKkukStiEeeLDNWa-Yk0bg" type="Package_PackagedElementCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_gKkukitiEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gKkukytiEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_Ko050CthEeepEtCwqDnj2w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gKf2EStiEeeLDNWa-Yk0bg" x="517" y="149" width="232" height="387"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_96lasCtiEeeLDNWa-Yk0bg" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Dfl7YCtjEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DfmicCtjEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_96mBwCtiEeeLDNWa-Yk0bg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_96mBwStiEeeLDNWa-Yk0bg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_96mBwitiEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_96mBwytiEeeLDNWa-Yk0bg" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_96mBxCtiEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_96mBxStiEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_96mBxitiEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_96mBxytiEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_96mByCtiEeeLDNWa-Yk0bg" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_96mByStiEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_96mByitiEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_96mByytiEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_96mBzCtiEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_96mBzStiEeeLDNWa-Yk0bg" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_96mBzitiEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_96mBzytiEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_96mB0CtiEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_96mB0StiEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_Ljw9kBKREdyCSNtdGzMSGg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_96lasStiEeeLDNWa-Yk0bg" x="876" y="385" width="161" height="62"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_TzxUgCtjEeeLDNWa-Yk0bg" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zFyl8CtjEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zFzNACtjEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_TzyioCtjEeeLDNWa-Yk0bg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_TzyioStjEeeLDNWa-Yk0bg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_TzyioitjEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_TzyioytjEeeLDNWa-Yk0bg" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_TzyipCtjEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_TzyipStjEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_TzyipitjEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TzyipytjEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_TzzJsCtjEeeLDNWa-Yk0bg" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_TzzJsStjEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_TzzJsitjEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_TzzJsytjEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TzzJtCtjEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_TzzJtStjEeeLDNWa-Yk0bg" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_TzzJtitjEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_TzzJtytjEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_TzzJuCtjEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TzzJuStjEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_kzoXABHbEdyWC5IKDhzksw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TzxUgStjEeeLDNWa-Yk0bg" x="876" y="310" width="161" height="62"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_T1AqoCtjEeeLDNWa-Yk0bg" type="Enumeration_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zFzNAStjEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zFz0ECtjEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_T1AqoitjEeeLDNWa-Yk0bg" type="Enumeration_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_T1AqoytjEeeLDNWa-Yk0bg" type="Enumeration_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_T1AqpCtjEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_T1AqpStjEeeLDNWa-Yk0bg" visible="false" type="Enumeration_LiteralCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_T1AqpitjEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_T1AqpytjEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_T1AqqCtjEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T1AqqStjEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Enumeration" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_VxKdYBHbEdyWC5IKDhzksw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T1AqoStjEeeLDNWa-Yk0bg" x="876" y="238" width="161" height="62"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_T2AJICtjEeeLDNWa-Yk0bg" type="Enumeration_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zFz0EStjEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zFz0EitjEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_T2AJIitjEeeLDNWa-Yk0bg" type="Enumeration_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_T2AJIytjEeeLDNWa-Yk0bg" type="Enumeration_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_T2AJJCtjEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_T2AJJStjEeeLDNWa-Yk0bg" visible="false" type="Enumeration_LiteralCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_T2AJJitjEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_T2AJJytjEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_T2AJKCtjEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T2AJKStjEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Enumeration" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_9MtaUECmEd6UTJZnztgOLw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T2AJIStjEeeLDNWa-Yk0bg" x="876" y="165" width="161" height="62"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_SblEcSthEeepEtCwqDnj2w" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_SblEcithEeepEtCwqDnj2w"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_SblEcythEeepEtCwqDnj2w">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_Ko050CthEeepEtCwqDnj2w"/>
+      <configuration xmi:type="configuration:PapyrusDiagram" href="platform:/plugin/org.eclipse.papyrus.uml.diagram.clazz/model/clazzdiagram.configuration#_zzf4cXDtEeWh-MssWmCB_A"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_Ko050CthEeepEtCwqDnj2w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_979TsCtiEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_gKf2ECtiEeeLDNWa-Yk0bg" target="_96lasCtiEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_979TsytiEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_-VIBoCtiEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_979TtCtiEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_9796wCtiEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_-Vf1ECtiEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_9796wStiEeeLDNWa-Yk0bg" x="-15" y="-6"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_979TsStiEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_4YKT8CtiEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_979TsitiEeeLDNWa-Yk0bg" points="[749, 416, -643984, -643984]$[876, 416, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-VrbQCtiEeeLDNWa-Yk0bg" id="(1.0,0.689922480620155)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-VspYCtiEeeLDNWa-Yk0bg" id="(0.0,0.5)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_T0xaECtjEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_gKf2ECtiEeeLDNWa-Yk0bg" target="_TzxUgCtjEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_T0xaEytjEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_Vta9wCtjEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_T0xaFCtjEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_T0xaFStjEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_VtoZICtjEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_T0xaFitjEeeLDNWa-Yk0bg" x="-19" y="-12"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_T0xaEStjEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_JXnesCtjEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_T0xaEitjEeeLDNWa-Yk0bg" points="[749, 334, -643984, -643984]$[813, 334, -643984, -643984]$[876, 334, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VuFFECtjEeeLDNWa-Yk0bg" id="(1.0,0.4780361757105943)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VuFsICtjEeeLDNWa-Yk0bg" id="(0.0,0.3870967741935484)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_T1xfoCtjEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_gKf2ECtiEeeLDNWa-Yk0bg" target="_T1AqoCtjEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_T1yGsCtjEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_VgsJUCtjEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_T1yGsStjEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_T1yGsitjEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_Vg-dMCtjEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_T1yGsytjEeeLDNWa-Yk0bg" x="-18" y="-10"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_T1xfoStjEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_MQnsICtjEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_T1xfoitjEeeLDNWa-Yk0bg" points="[749, 269, -643984, -643984]$[876, 269, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VhKqcCtjEeeLDNWa-Yk0bg" id="(1.0,0.31007751937984496)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VhLRgCtjEeeLDNWa-Yk0bg" id="(0.0,0.5)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_T2kJ0CtjEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_gKf2ECtiEeeLDNWa-Yk0bg" target="_T2AJICtjEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_T2kJ0ytjEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_USZxQCtjEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_T2kJ1CtjEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_T2kJ1StjEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_USqP8CtjEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_T2kJ1itjEeeLDNWa-Yk0bg" x="-19" y="-11"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_T2kJ0StjEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_QaQbACtjEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_T2kJ0itjEeeLDNWa-Yk0bg" points="[749, 198, -643984, -643984]$[750, 198, -643984, -643984]$[750, 196, -643984, -643984]$[937, 196, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_US1PECtjEeeLDNWa-Yk0bg" id="(1.0,0.12144702842377261)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_US12ICtjEeeLDNWa-Yk0bg" id="(0.0,0.5)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="__g74ACtjEeeLDNWa-Yk0bg" type="PapyrusUMLProfileDiagram" name="Core" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_BCg_gCtkEeeLDNWa-Yk0bg" type="Stereotype_Shape" fillColor="8047085">
+      <children xmi:type="notation:DecorationNode" xmi:id="_BChmkCtkEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_BCiNoCtkEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_BCiNoStkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_BCiNoitkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_BCiNoytkEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BCiNpCtkEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_BCi0sCtkEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_BCi0sStkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_BCi0sitkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_BCi0sytkEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BCi0tCtkEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_kzoXABHbEdyWC5IKDhzksw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BCg_gStkEeeLDNWa-Yk0bg" x="87" y="117" width="156" height="53"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_GcFFMCtkEeeLDNWa-Yk0bg" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_GcFFMitkEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_GcFFMytkEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_GcFFNCtkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_GcFFNStkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_GcFFNitkEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GcFFNytkEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_GcFFOCtkEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_GcFFOStkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_GcFFOitkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_GcFFOytkEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GcFFPCtkEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_Gb9JYCtkEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GcFFMStkEeeLDNWa-Yk0bg" x="87" y="247" width="156" height="53"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_O7JjQCtkEeeLDNWa-Yk0bg" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_O7JjQitkEeeLDNWa-Yk0bg" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_O7KKUCtkEeeLDNWa-Yk0bg" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#_O699ECtkEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_O7JjQStkEeeLDNWa-Yk0bg" x="66" y="376" width="283"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_b6iK0CtkEeeLDNWa-Yk0bg" type="Class_MetaclassShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_b6jY8CtkEeeLDNWa-Yk0bg" type="Class_MetaclassNameLabel"/>
+      <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_b6iK0StkEeeLDNWa-Yk0bg" x="547" y="117" width="156" height="53"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_b7AE4CtkEeeLDNWa-Yk0bg" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_b7AE4StkEeeLDNWa-Yk0bg"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_b7B6ECtkEeeLDNWa-Yk0bg" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_b7AE4itkEeeLDNWa-Yk0bg" x="200"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_ey6tMCtkEeeLDNWa-Yk0bg" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_ey6tMitkEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_ey6tMytkEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_ey6tNCtkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_ey6tNStkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_ey6tNitkEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ey6tNytkEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_ey6tOCtkEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_ey6tOStkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_ey6tOitkEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_ey6tOytkEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ey6tPCtkEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_eyhroCtkEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ey6tMStkEeeLDNWa-Yk0bg" x="553" y="247" width="156" height="53"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_nStkACtkEeeLDNWa-Yk0bg" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_nSuLEStkEeeLDNWa-Yk0bg" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_nSuyICtkEeeLDNWa-Yk0bg" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#_nSIVMCtkEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nSuLECtkEeeLDNWa-Yk0bg" x="489" y="399" width="283"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_n6VksCtkEeeLDNWa-Yk0bg" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_n6VksitkEeeLDNWa-Yk0bg" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_n6VksytkEeeLDNWa-Yk0bg" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#_n6FGACtkEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n6VksStkEeeLDNWa-Yk0bg" x="489" y="493" width="283"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="__g74AStjEeeLDNWa-Yk0bg" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="__g74AitjEeeLDNWa-Yk0bg"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="__g74AytjEeeLDNWa-Yk0bg">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_Ko050CthEeepEtCwqDnj2w"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_Ko050CthEeepEtCwqDnj2w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_PMbggCtkEeeLDNWa-Yk0bg" type="Constraint_ContextEdge" source="_O7JjQCtkEeeLDNWa-Yk0bg" target="_GcFFMCtkEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_PMbggytkEeeLDNWa-Yk0bg" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_XFfHcCtkEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_PMbghCtkEeeLDNWa-Yk0bg" y="15"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_PMbggStkEeeLDNWa-Yk0bg"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PMbggitkEeeLDNWa-Yk0bg" points="[224, 407, -643984, -643984]$[224, 353, -643984, -643984]$[162, 353, -643984, -643984]$[162, 300, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PMnGsCtkEeeLDNWa-Yk0bg" id="(0.3392226148409894,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PMnGsStkEeeLDNWa-Yk0bg" id="(0.4807692307692308,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_b7ChICtkEeeLDNWa-Yk0bg" type="StereotypeCommentLink" source="_b6iK0CtkEeeLDNWa-Yk0bg" target="_b7AE4CtkEeeLDNWa-Yk0bg">
+      <styles xmi:type="notation:FontStyle" xmi:id="_b7ChIStkEeeLDNWa-Yk0bg"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_b7DIMStkEeeLDNWa-Yk0bg" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_b7ChIitkEeeLDNWa-Yk0bg" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_b7ChIytkEeeLDNWa-Yk0bg"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_b7DIMCtkEeeLDNWa-Yk0bg"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_kVmSoCtkEeeLDNWa-Yk0bg" type="Extension_Edge" source="_ey6tMCtkEeeLDNWa-Yk0bg" target="_b6iK0CtkEeeLDNWa-Yk0bg">
+      <styles xmi:type="notation:FontStyle" xmi:id="_kVmSoStkEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_kVPGQCtkEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kVmSoitkEeeLDNWa-Yk0bg" points="[634, 247, -643984, -643984]$[634, 170, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kVuOcCtkEeeLDNWa-Yk0bg" id="(0.5192307692307693,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kVu1gCtkEeeLDNWa-Yk0bg" id="(0.5576923076923077,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_lhEAMCtkEeeLDNWa-Yk0bg" type="Generalization_Edge" source="_GcFFMCtkEeeLDNWa-Yk0bg" target="_BCg_gCtkEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_lhEnQCtkEeeLDNWa-Yk0bg" type="Generalization_StereotypeLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_lhEnQStkEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_lhEAMStkEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_lg6PMCtkEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lhEAMitkEeeLDNWa-Yk0bg" points="[162, 247, -643984, -643984]$[162, 170, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lhUe4CtkEeeLDNWa-Yk0bg" id="(0.4807692307692308,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lhVF8CtkEeeLDNWa-Yk0bg" id="(0.4807692307692308,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_ngBnQCtkEeeLDNWa-Yk0bg" type="Constraint_ContextEdge" source="_nStkACtkEeeLDNWa-Yk0bg" target="_ey6tMCtkEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_ngC1YCtkEeeLDNWa-Yk0bg" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_q6zsECtkEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_ngC1YStkEeeLDNWa-Yk0bg" y="15"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_ngBnQStkEeeLDNWa-Yk0bg"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ngBnQitkEeeLDNWa-Yk0bg" points="[621, 399, -643984, -643984]$[621, 300, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ngKxMCtkEeeLDNWa-Yk0bg" id="(0.4664310954063604,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ngKxMStkEeeLDNWa-Yk0bg" id="(0.4358974358974359,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_oJ2AUCtkEeeLDNWa-Yk0bg" type="Constraint_ContextEdge" source="_n6VksCtkEeeLDNWa-Yk0bg" target="_ey6tMCtkEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_oJ2nYCtkEeeLDNWa-Yk0bg" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_raTEcCtkEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_oJ2nYStkEeeLDNWa-Yk0bg" x="109" y="21"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_oJ2AUStkEeeLDNWa-Yk0bg"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_oJ2AUitkEeeLDNWa-Yk0bg" points="[489, 523, -643984, -643984]$[448, 523, -643984, -643984]$[448, 272, -643984, -643984]$[553, 272, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oKGfACtkEeeLDNWa-Yk0bg" id="(0.0,0.5)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oKGfAStkEeeLDNWa-Yk0bg" id="(0.0,0.4528301886792453)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_CYKHUCtlEeeLDNWa-Yk0bg" type="PapyrusUMLClassDiagram" name="Sensor package" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_EocH4CtlEeeLDNWa-Yk0bg" type="Package_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_EocH4itlEeeLDNWa-Yk0bg" type="Package_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_EocH4ytlEeeLDNWa-Yk0bg" type="Package_PackagedElementCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_EocH5CtlEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EocH5StlEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_GsMsMCthEeepEtCwqDnj2w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EocH4StlEeeLDNWa-Yk0bg" x="270" y="299"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_JjeegCtlEeeLDNWa-Yk0bg" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Ow1UMCtlEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Ow17QCtlEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_JjfFkCtlEeeLDNWa-Yk0bg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_JjfFkStlEeeLDNWa-Yk0bg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_JjfFkitlEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_JjfFkytlEeeLDNWa-Yk0bg" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_JjfFlCtlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_JjfFlStlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_JjfFlitlEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JjfFlytlEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_JjfFmCtlEeeLDNWa-Yk0bg" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_JjfFmStlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_JjfFmitlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_JjfFmytlEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JjfFnCtlEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_JjfFnStlEeeLDNWa-Yk0bg" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_JjfFnitlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_JjfFnytlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_JjfFoCtlEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JjfFoStlEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_PHH9sDL2Ed2HYNz2hI9A2g"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JjeegStlEeeLDNWa-Yk0bg" x="599" y="335" width="143" height="55"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_CYKHUStlEeeLDNWa-Yk0bg" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_CYKHUitlEeeLDNWa-Yk0bg"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_CYKHUytlEeeLDNWa-Yk0bg">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_GsMsMCthEeepEtCwqDnj2w"/>
+      <configuration xmi:type="configuration:PapyrusDiagram" href="platform:/plugin/org.eclipse.papyrus.uml.diagram.clazz/model/clazzdiagram.configuration#_zzf4cXDtEeWh-MssWmCB_A"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_GsMsMCthEeepEtCwqDnj2w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_JkM3QCtlEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_EocH4CtlEeeLDNWa-Yk0bg" target="_JjeegCtlEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_JkM3QytlEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_J0bEkCtlEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_JkM3RCtlEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_JkM3RStlEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_J0fWACtlEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_JkM3RitlEeeLDNWa-Yk0bg" x="-14" y="-16"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_JkM3QStlEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_GJm_sCtlEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JkM3QitlEeeLDNWa-Yk0bg" points="[470, 362, -643984, -643984]$[598, 362, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_J0nR0CtlEeeLDNWa-Yk0bg" id="(1.0,0.63)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_J0nR0StlEeeLDNWa-Yk0bg" id="(0.0,0.4909090909090909)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_RUzFwCtlEeeLDNWa-Yk0bg" type="PapyrusUMLProfileDiagram" name="Actuator" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_vaOoQCtlEeeLDNWa-Yk0bg" type="Stereotype_Shape" fillColor="8047085">
+      <children xmi:type="notation:DecorationNode" xmi:id="_vaPPUCtlEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_vaPPUStlEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_vaPPUitlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_vaPPUytlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_vaPPVCtlEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vaPPVStlEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_vaPPVitlEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_vaPPVytlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_vaPPWCtlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_vaPPWStlEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vaPPWitlEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_PHH9sDL2Ed2HYNz2hI9A2g"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vaOoQStlEeeLDNWa-Yk0bg" x="247" y="148" width="167" height="59"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_ym3jYCtlEeeLDNWa-Yk0bg" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_ym4KcCtlEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_ym4KcStlEeeLDNWa-Yk0bg" type="Stereotype_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_oLoeICtmEeeLDNWa-Yk0bg" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_oLZ0oCtmEeeLDNWa-Yk0bg"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_oLoeIStmEeeLDNWa-Yk0bg"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_ym4KcitlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_ym4KcytlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_ym4KdCtlEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ym4KdStlEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_ym4KditlEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_ym4KdytlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_ym4KeCtlEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_ym4KeStlEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ym4KeitlEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_ymw1sCtlEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ym3jYStlEeeLDNWa-Yk0bg" x="247" y="303" width="167" height="244"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_EU8usCtmEeeLDNWa-Yk0bg" type="Enumeration_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_EU8usitmEeeLDNWa-Yk0bg" type="Enumeration_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_EU8usytmEeeLDNWa-Yk0bg" type="Enumeration_LiteralCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_Gbm5MCtmEeeLDNWa-Yk0bg" type="EnumerationLiteral_LiteralLabel">
+          <element xmi:type="uml:EnumerationLiteral" href="IoT-ML.profile.uml#_Gbj14CtmEeeLDNWa-Yk0bg"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_Gbm5MStmEeeLDNWa-Yk0bg"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_Gvtg8CtmEeeLDNWa-Yk0bg" type="EnumerationLiteral_LiteralLabel">
+          <element xmi:type="uml:EnumerationLiteral" href="IoT-ML.profile.uml#_Gvk-ECtmEeeLDNWa-Yk0bg"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_Gvtg8StmEeeLDNWa-Yk0bg"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_HC7-8CtmEeeLDNWa-Yk0bg" type="EnumerationLiteral_LiteralLabel">
+          <element xmi:type="uml:EnumerationLiteral" href="IoT-ML.profile.uml#_HC4UkCtmEeeLDNWa-Yk0bg"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_HC7-8StmEeeLDNWa-Yk0bg"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_H6Kh4CtmEeeLDNWa-Yk0bg" type="EnumerationLiteral_LiteralLabel">
+          <element xmi:type="uml:EnumerationLiteral" href="IoT-ML.profile.uml#_H6D0MCtmEeeLDNWa-Yk0bg"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_H6Kh4StmEeeLDNWa-Yk0bg"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_INyBcCtmEeeLDNWa-Yk0bg" type="EnumerationLiteral_LiteralLabel">
+          <element xmi:type="uml:EnumerationLiteral" href="IoT-ML.profile.uml#_INrTwCtmEeeLDNWa-Yk0bg"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_INyBcStmEeeLDNWa-Yk0bg"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_EU8utCtmEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_EU8utStmEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_EU8utitmEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EU8utytmEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Enumeration" href="IoT-ML.profile.uml#_EU2BACtmEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EU8usStmEeeLDNWa-Yk0bg" x="668" y="307" width="132"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_cE1EYCtmEeeLDNWa-Yk0bg" type="Enumeration_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_cE1rcCtmEeeLDNWa-Yk0bg" type="Enumeration_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_cE1rcStmEeeLDNWa-Yk0bg" type="Enumeration_LiteralCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_fp2DQCtmEeeLDNWa-Yk0bg" type="EnumerationLiteral_LiteralLabel">
+          <element xmi:type="uml:EnumerationLiteral" href="IoT-ML.profile.uml#_fpuHcCtmEeeLDNWa-Yk0bg"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_fp2DQStmEeeLDNWa-Yk0bg"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_guaeoCtmEeeLDNWa-Yk0bg" type="EnumerationLiteral_LiteralLabel">
+          <element xmi:type="uml:EnumerationLiteral" href="IoT-ML.profile.uml#_guUYACtmEeeLDNWa-Yk0bg"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_guaeoStmEeeLDNWa-Yk0bg"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_cE1rcitmEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_cE1rcytmEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_cE1rdCtmEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cE1rdStmEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Enumeration" href="IoT-ML.profile.uml#_cErTYCtmEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cE1EYStmEeeLDNWa-Yk0bg" x="668" y="416" width="132" height="66"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_RUzFwStlEeeLDNWa-Yk0bg" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_RUzFwitlEeeLDNWa-Yk0bg"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_RUzFwytlEeeLDNWa-Yk0bg">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_GsMsMCthEeepEtCwqDnj2w"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_GsMsMCthEeepEtCwqDnj2w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_2NjWMCtlEeeLDNWa-Yk0bg" type="Generalization_Edge" source="_ym3jYCtlEeeLDNWa-Yk0bg" target="_vaOoQCtlEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_2Nj9QCtlEeeLDNWa-Yk0bg" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_3WvL0CtlEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_2Nj9QStlEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_2NjWMStlEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_2NfEwCtlEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2NjWMitlEeeLDNWa-Yk0bg" points="[331, 320, -643984, -643984]$[331, 263, -643984, -643984]$[331, 207, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2NxYoCtlEeeLDNWa-Yk0bg" id="(0.5029940119760479,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2NxYoStlEeeLDNWa-Yk0bg" id="(0.5029940119760479,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_SU9s0CtmEeeLDNWa-Yk0bg" type="Association_Edge" source="_ym3jYCtlEeeLDNWa-Yk0bg" target="_EU8usCtmEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_SU-T4CtmEeeLDNWa-Yk0bg" type="Association_StereotypeLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_SU-T4StmEeeLDNWa-Yk0bg" y="-20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_SU-T4itmEeeLDNWa-Yk0bg" type="Association_NameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_SU-T4ytmEeeLDNWa-Yk0bg" y="20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_SU-T5CtmEeeLDNWa-Yk0bg" type="Association_TargetRoleLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_SU-T5StmEeeLDNWa-Yk0bg" x="-53" y="-28"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_SU-T5itmEeeLDNWa-Yk0bg" visible="false" type="Association_SourceRoleLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_SU-T5ytmEeeLDNWa-Yk0bg" x="-25" y="19"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_SU-T6CtmEeeLDNWa-Yk0bg" type="Association_SourceMultiplicityLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_SU-T6StmEeeLDNWa-Yk0bg" x="-32" y="18"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_SU-T6itmEeeLDNWa-Yk0bg" type="Association_TargetMultiplicityLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_SU-T6ytmEeeLDNWa-Yk0bg" x="-15" y="-15"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_SU9s0StmEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Association" href="IoT-ML.profile.uml#_SUpjwCtmEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SU9s0itmEeeLDNWa-Yk0bg" points="[414, 361, -643984, -643984]$[668, 361, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SVhtgCtmEeeLDNWa-Yk0bg" id="(1.0,0.23770491803278687)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SVhtgStmEeeLDNWa-Yk0bg" id="(0.0,0.5294117647058824)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_iyi5kCtmEeeLDNWa-Yk0bg" type="Association_Edge" source="_ym3jYCtlEeeLDNWa-Yk0bg" target="_cE1EYCtmEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_iyjgoCtmEeeLDNWa-Yk0bg" type="Association_StereotypeLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_iyjgoStmEeeLDNWa-Yk0bg" y="-20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_iyjgoitmEeeLDNWa-Yk0bg" type="Association_NameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_iyjgoytmEeeLDNWa-Yk0bg" y="20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_iyjgpCtmEeeLDNWa-Yk0bg" type="Association_TargetRoleLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_iyjgpStmEeeLDNWa-Yk0bg" x="-55" y="-30"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_iyjgpitmEeeLDNWa-Yk0bg" visible="false" type="Association_SourceRoleLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_iyjgpytmEeeLDNWa-Yk0bg" y="20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_iyjgqCtmEeeLDNWa-Yk0bg" type="Association_SourceMultiplicityLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_iyjgqStmEeeLDNWa-Yk0bg" x="-30" y="13"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_iyjgqitmEeeLDNWa-Yk0bg" type="Association_TargetMultiplicityLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_iyjgqytmEeeLDNWa-Yk0bg" y="-16"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_iyi5kStmEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Association" href="IoT-ML.profile.uml#_iyXTYCtmEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iyi5kitmEeeLDNWa-Yk0bg" points="[414, 452, -643984, -643984]$[668, 452, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iyyKICtmEeeLDNWa-Yk0bg" id="(1.0,0.610655737704918)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iyyKIStmEeeLDNWa-Yk0bg" id="(0.0,0.5454545454545454)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_UAMqICtnEeeLDNWa-Yk0bg" type="PapyrusUMLClassDiagram" name="Network package" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_lXbbsCtnEeeLDNWa-Yk0bg" type="Package_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_lXcCwCtnEeeLDNWa-Yk0bg" type="Package_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_lXcCwStnEeeLDNWa-Yk0bg" type="Package_PackagedElementCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_lXcCwitnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lXcCwytnEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_JQEXICthEeepEtCwqDnj2w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lXbbsStnEeeLDNWa-Yk0bg" x="282" y="284" height="379"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_mjLdICtnEeeLDNWa-Yk0bg" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HqLTNStoEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HqLTNitoEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mjLdIitnEeeLDNWa-Yk0bg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mjLdIytnEeeLDNWa-Yk0bg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mjLdJCtnEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mjLdJStnEeeLDNWa-Yk0bg" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mjLdJitnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mjLdJytnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mjLdKCtnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjLdKStnEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mjMEMCtnEeeLDNWa-Yk0bg" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mjMEMStnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mjMEMitnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mjMEMytnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjMENCtnEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mjMENStnEeeLDNWa-Yk0bg" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mjMENitnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mjMENytnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mjMEOCtnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjMEOStnEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_tE4T4BJ9EdyT_7R0WVpWAw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjLdIStnEeeLDNWa-Yk0bg" x="605" y="313" width="172" height="63"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_mjuPsCtnEeeLDNWa-Yk0bg" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HqLTMytoEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HqLTNCtoEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mjuPsitnEeeLDNWa-Yk0bg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mjuPsytnEeeLDNWa-Yk0bg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mjuPtCtnEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mjuPtStnEeeLDNWa-Yk0bg" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mjuPtitnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mjuPtytnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mjuPuCtnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjuPuStnEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mjuPuitnEeeLDNWa-Yk0bg" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mjuPuytnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mjuPvCtnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mjuPvStnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjuPvitnEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mjuPvytnEeeLDNWa-Yk0bg" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mjuPwCtnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mjuPwStnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mjuPwitnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjuPwytnEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_NrpywBJzEdygQ5HMNSpiZw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mjuPsStnEeeLDNWa-Yk0bg" x="605" y="407" width="172" height="63"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_mkymsCtnEeeLDNWa-Yk0bg" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HqLTMStoEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HqLTMitoEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mkymsitnEeeLDNWa-Yk0bg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mkymsytnEeeLDNWa-Yk0bg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mkymtCtnEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mkymtStnEeeLDNWa-Yk0bg" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mkymtitnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mkymtytnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mkymuCtnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mkymuStnEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mkymuitnEeeLDNWa-Yk0bg" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mkymuytnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mkymvCtnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mkymvStnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mkymvitnEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mkymvytnEeeLDNWa-Yk0bg" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mkymwCtnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mkymwStnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mkymwitnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mkymwytnEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_-ZhPABJ-EdyT_7R0WVpWAw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mkymsStnEeeLDNWa-Yk0bg" x="605" y="506" width="172" height="63"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_mlfKQCtnEeeLDNWa-Yk0bg" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HqKsICtoEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HqLTMCtoEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mlfxUStnEeeLDNWa-Yk0bg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mlfxUitnEeeLDNWa-Yk0bg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mlfxUytnEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mlfxVCtnEeeLDNWa-Yk0bg" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mlfxVStnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mlfxVitnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mlfxVytnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mlfxWCtnEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mlfxWStnEeeLDNWa-Yk0bg" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mlfxWitnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mlfxWytnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mlfxXCtnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mlfxXStnEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mlfxXitnEeeLDNWa-Yk0bg" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mlfxXytnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mlfxYCtnEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mlfxYStnEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mlfxYitnEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_Q4QQoBJ-EdyT_7R0WVpWAw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mlfxUCtnEeeLDNWa-Yk0bg" x="605" y="602" width="172" height="63"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_UAMqIStnEeeLDNWa-Yk0bg" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_UAMqIitnEeeLDNWa-Yk0bg"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_UAMqIytnEeeLDNWa-Yk0bg">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_JQEXICthEeepEtCwqDnj2w"/>
+      <configuration xmi:type="configuration:PapyrusDiagram" href="platform:/plugin/org.eclipse.papyrus.uml.diagram.clazz/model/clazzdiagram.configuration#_zzf4cXDtEeWh-MssWmCB_A"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_JQEXICthEeepEtCwqDnj2w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_mjniACtnEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_lXbbsCtnEeeLDNWa-Yk0bg" target="_mjLdICtnEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_mjniAytnEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_nFrGMCtnEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mjniBCtnEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mjniBStnEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_nF2FUCtnEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mjniBitnEeeLDNWa-Yk0bg" x="-21" y="-14"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_mjniAStnEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_eIpg0CtnEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mjniAitnEeeLDNWa-Yk0bg" points="[482, 344, -643984, -643984]$[604, 344, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nGDgsCtnEeeLDNWa-Yk0bg" id="(1.0,0.158311345646438)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nGDgsStnEeeLDNWa-Yk0bg" id="(0.0,0.49206349206349204)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_mkpcwCtnEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_lXbbsCtnEeeLDNWa-Yk0bg" target="_mjuPsCtnEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_mkpcwytnEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_n-ougCtnEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mkqD0CtnEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mkqD0StnEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_n-2J4CtnEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mkqD0itnEeeLDNWa-Yk0bg" x="-24" y="-16"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_mkpcwStnEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_VSRWACtnEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mkpcwitnEeeLDNWa-Yk0bg" points="[482, 438, -643984, -643984]$[604, 438, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n_BwECtnEeeLDNWa-Yk0bg" id="(1.0,0.40633245382585753)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n_BwEStnEeeLDNWa-Yk0bg" id="(0.0,0.49206349206349204)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_mlWnYCtnEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_lXbbsCtnEeeLDNWa-Yk0bg" target="_mkymsCtnEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_mlXOcCtnEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_n0Z0cCtnEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mlXOcStnEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mlXOcitnEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_n0hJMCtnEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mlXOcytnEeeLDNWa-Yk0bg" x="-20" y="-12"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_mlWnYStnEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_ipdZkCtnEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mlWnYitnEeeLDNWa-Yk0bg" points="[482, 537, -643984, -643984]$[604, 537, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n0qTICtnEeeLDNWa-Yk0bg" id="(1.0,0.6675461741424802)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n0qTIStnEeeLDNWa-Yk0bg" id="(0.0,0.49206349206349204)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_mmJ4oCtnEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_lXbbsCtnEeeLDNWa-Yk0bg" target="_mlfKQCtnEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_mmJ4oytnEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_nrRGkCtnEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mmJ4pCtnEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_mmJ4pStnEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_nrgXICtnEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_mmJ4pitnEeeLDNWa-Yk0bg" x="-20" y="-16"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_mmJ4oStnEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_Zxbo8CtnEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mmJ4oitnEeeLDNWa-Yk0bg" points="[482, 633, -643984, -643984]$[604, 633, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nro6ACtnEeeLDNWa-Yk0bg" id="(1.0,0.920844327176781)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nro6AStnEeeLDNWa-Yk0bg" id="(0.0,0.49206349206349204)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_MJ4_wCtoEeeLDNWa-Yk0bg" type="PapyrusUMLProfileDiagram" name="Ntework" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_OpZIECtoEeeLDNWa-Yk0bg" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_OpZvICtoEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_OpZvIStoEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_OpZvIitoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_OpZvIytoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_OpZvJCtoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OpZvJStoEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_OpZvJitoEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_OpZvJytoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_OpZvKCtoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_OpZvKStoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OpZvKitoEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_OpOwACtoEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OpZIEStoEeeLDNWa-Yk0bg" x="189" y="199" width="156" height="56"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_O9oSsCtoEeeLDNWa-Yk0bg" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_O9oSsitoEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_O9oSsytoEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_O9oStCtoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_O9o5wCtoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_O9o5wStoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_O9o5witoEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_O9o5wytoEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_O9o5xCtoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_O9o5xStoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_O9o5xitoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_O9o5xytoEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_O9fv0CtoEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_O9oSsStoEeeLDNWa-Yk0bg" x="94" y="350" width="156" height="56"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_PQgycCtoEeeLDNWa-Yk0bg" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_PQgycitoEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_PQgycytoEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_PQgydCtoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_PQgydStoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_PQgyditoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PQgydytoEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_PQgyeCtoEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_PQgyeStoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_PQgyeitoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_PQgyeytoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PQgyfCtoEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_PQZdsCtoEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PQgycStoEeeLDNWa-Yk0bg" x="299" y="350" width="156" height="56"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_cVFcACtoEeeLDNWa-Yk0bg" type="Stereotype_Shape" fillColor="8047085">
+      <children xmi:type="notation:DecorationNode" xmi:id="_cVGDECtoEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_cVGDEStoEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_cVGDEitoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_cVGDEytoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_cVGDFCtoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cVGDFStoEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_cVGDFitoEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_cVGDFytoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_cVGDGCtoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_cVGDGStoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cVGDGitoEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_tE4T4BJ9EdyT_7R0WVpWAw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cVFcAStoEeeLDNWa-Yk0bg" x="189" y="93" width="156" height="56"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_jbwjwCtoEeeLDNWa-Yk0bg" type="Stereotype_Shape" fillColor="8047085">
+      <children xmi:type="notation:DecorationNode" xmi:id="_jbxK0CtoEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_jbxK0StoEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_jbxK0itoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_jbxK0ytoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_jbxK1CtoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jbxK1StoEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_jbxK1itoEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_jbxK1ytoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_jbxK2CtoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_jbxK2StoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jbxK2itoEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_NrpywBJzEdygQ5HMNSpiZw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jbwjwStoEeeLDNWa-Yk0bg" x="189" y="481" width="156" height="56"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_MJ4_wStoEeeLDNWa-Yk0bg" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_MJ4_witoEeeLDNWa-Yk0bg"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_MJ4_wytoEeeLDNWa-Yk0bg">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_JQEXICthEeepEtCwqDnj2w"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_JQEXICthEeepEtCwqDnj2w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_YSfJQCtoEeeLDNWa-Yk0bg" type="Generalization_Edge" source="_O9oSsCtoEeeLDNWa-Yk0bg" target="_OpZIECtoEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_YSfwUCtoEeeLDNWa-Yk0bg" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_rD4ywCtoEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_YSfwUStoEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_YSfJQStoEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_YScF8CtoEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YSfJQitoEeeLDNWa-Yk0bg" points="[214, 350, -643984, -643984]$[214, 255, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YSmeACtoEeeLDNWa-Yk0bg" id="(0.7692307692307693,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YSmeAStoEeeLDNWa-Yk0bg" id="(0.16025641025641027,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_ZB-FcCtoEeeLDNWa-Yk0bg" type="Generalization_Edge" source="_PQgycCtoEeeLDNWa-Yk0bg" target="_OpZIECtoEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_ZB-FcytoEeeLDNWa-Yk0bg" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_rEAukCtoEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_ZB-FdCtoEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_ZB-FcStoEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_ZB6bECtoEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZB-FcitoEeeLDNWa-Yk0bg" points="[328, 350, -643984, -643984]$[328, 255, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZCGoUCtoEeeLDNWa-Yk0bg" id="(0.1858974358974359,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZCGoUStoEeeLDNWa-Yk0bg" id="(0.8910256410256411,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_fy3KcCtoEeeLDNWa-Yk0bg" type="Generalization_Edge" source="_OpZIECtoEeeLDNWa-Yk0bg" target="_cVFcACtoEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_fy3KcytoEeeLDNWa-Yk0bg" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_gPD-QCtoEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_fy3KdCtoEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_fy3KcStoEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_fyyR8CtoEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fy3KcitoEeeLDNWa-Yk0bg" points="[261, 199, -643984, -643984]$[261, 107, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fzA7cCtoEeeLDNWa-Yk0bg" id="(0.46153846153846156,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fzA7cStoEeeLDNWa-Yk0bg" id="(0.46153846153846156,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_n9CWkCtoEeeLDNWa-Yk0bg" type="Generalization_Edge" source="_O9oSsCtoEeeLDNWa-Yk0bg" target="_jbwjwCtoEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_n9C9oCtoEeeLDNWa-Yk0bg" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_rEIqYCtoEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_n9C9oStoEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_n9CWkStoEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_n883ACtoEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_n9CWkitoEeeLDNWa-Yk0bg" points="[210, 406, -643984, -643984]$[210, 481, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n9N8wCtoEeeLDNWa-Yk0bg" id="(0.7435897435897436,1.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n9Oj0CtoEeeLDNWa-Yk0bg" id="(0.1346153846153846,0.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_ogqBACtoEeeLDNWa-Yk0bg" type="Generalization_Edge" source="_PQgycCtoEeeLDNWa-Yk0bg" target="_jbwjwCtoEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_ogqBAytoEeeLDNWa-Yk0bg" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_rEMUwCtoEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_ogqoECtoEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_ogqBAStoEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_oggQACtoEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ogqBAitoEeeLDNWa-Yk0bg" points="[317, 406, -643984, -643984]$[317, 481, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_og3cYCtoEeeLDNWa-Yk0bg" id="(0.11538461538461539,1.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_og3cYStoEeeLDNWa-Yk0bg" id="(0.8205128205128205,0.0)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_yEa2QCtoEeeLDNWa-Yk0bg" type="PapyrusUMLClassDiagram" name="Sensor package" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_1V7qUCtoEeeLDNWa-Yk0bg" type="Package_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_1V8RYCtoEeeLDNWa-Yk0bg" type="Package_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_1V8RYStoEeeLDNWa-Yk0bg" type="Package_PackagedElementCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_1V8RYitoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1V8RYytoEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_INCz4CthEeepEtCwqDnj2w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1V7qUStoEeeLDNWa-Yk0bg" x="60" y="330" height="202"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_9Op6ECtoEeeLDNWa-Yk0bg" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_FXMHcCtpEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_FXMHcStpEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_9Op6EitoEeeLDNWa-Yk0bg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_9Op6EytoEeeLDNWa-Yk0bg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_9Op6FCtoEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_9OqhICtoEeeLDNWa-Yk0bg" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_9OqhIStoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_9OqhIitoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_9OqhIytoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9OqhJCtoEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_9OqhJStoEeeLDNWa-Yk0bg" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_9OqhJitoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_9OqhJytoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_9OqhKCtoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9OqhKStoEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_9OqhKitoEeeLDNWa-Yk0bg" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_9OqhKytoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_9OqhLCtoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_9OqhLStoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9OqhLitoEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_PzqFcBKREdyCSNtdGzMSGg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9Op6EStoEeeLDNWa-Yk0bg" x="382" y="372" width="152" height="53"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_-JJzcCtoEeeLDNWa-Yk0bg" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_FXLgYCtpEeeLDNWa-Yk0bg" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_FXLgYStpEeeLDNWa-Yk0bg" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_-JKagCtoEeeLDNWa-Yk0bg" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_-JKagStoEeeLDNWa-Yk0bg" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_-JKagitoEeeLDNWa-Yk0bg" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_-JKagytoEeeLDNWa-Yk0bg" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_-JKahCtoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_-JKahStoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_-JKahitoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-JKahytoEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_-JKaiCtoEeeLDNWa-Yk0bg" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_-JKaiStoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_-JKaiitoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_-JKaiytoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-JKajCtoEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_-JLBkCtoEeeLDNWa-Yk0bg" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_-JLBkStoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_-JLBkitoEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_-JLBkytoEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-JLBlCtoEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_SuQccDL2Ed2HYNz2hI9A2g"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-JJzcStoEeeLDNWa-Yk0bg" x="382" y="478" width="152" height="53"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_atEDYCtqEeeZI6rMTYV60w" type="Class_Shape" fillColor="10011046">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ekzxACtqEeeZI6rMTYV60w" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ekzxAStqEeeZI6rMTYV60w" key="QualifiedNameDepth" value="0"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_atFRgCtqEeeZI6rMTYV60w" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_atF4kCtqEeeZI6rMTYV60w" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_atF4kStqEeeZI6rMTYV60w" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_atGfoCtqEeeZI6rMTYV60w" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_atGfoStqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_atGfoitqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_atGfoytqEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_atGfpCtqEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_atGfpStqEeeZI6rMTYV60w" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_atGfpitqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_atGfpytqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_atGfqCtqEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_atGfqStqEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_atGfqitqEeeZI6rMTYV60w" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_atGfqytqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_atGfrCtqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_atGfrStqEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_atGfritqEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Blocks.stereotype_packagedElement_ValueType"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_atEDYStqEeeZI6rMTYV60w" x="84" y="632" width="152" height="53"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_yEa2QStoEeeLDNWa-Yk0bg" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_yEa2QitoEeeLDNWa-Yk0bg"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_yEa2QytoEeeLDNWa-Yk0bg">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_INCz4CthEeepEtCwqDnj2w"/>
+      <configuration xmi:type="configuration:PapyrusDiagram" href="platform:/plugin/org.eclipse.papyrus.uml.diagram.clazz/model/clazzdiagram.configuration#_zzf4cXDtEeWh-MssWmCB_A"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_INCz4CthEeepEtCwqDnj2w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_9PNTsCtoEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_1V7qUCtoEeeLDNWa-Yk0bg" target="_9Op6ECtoEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_9PNTsytoEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_-3ijcCtoEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_9PNTtCtoEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_9PNTtStoEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_-3oqECtoEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_9PN6wCtoEeeLDNWa-Yk0bg" x="-29" y="-15"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_9PNTsStoEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_6o1uYCtoEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9PNTsitoEeeLDNWa-Yk0bg" points="[260, 398, -643984, -643984]$[381, 398, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-3uJoCtoEeeLDNWa-Yk0bg" id="(1.0,0.33663366336633666)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-3uwsCtoEeeLDNWa-Yk0bg" id="(0.0,0.49056603773584906)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_-JxegCtoEeeLDNWa-Yk0bg" type="ElementImport_Edge" source="_1V7qUCtoEeeLDNWa-Yk0bg" target="_-JJzcCtoEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_-JxegytoEeeLDNWa-Yk0bg" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_BBf5kCtpEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_-JxehCtoEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_-JxehStoEeeLDNWa-Yk0bg" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_BBmnQCtpEeeLDNWa-Yk0bg" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_-JxehitoEeeLDNWa-Yk0bg" x="-29" y="-15"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_-JxegStoEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_2-IXMCtoEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-JxegitoEeeLDNWa-Yk0bg" points="[260, 504, -643984, -643984]$[381, 504, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BBw_UCtpEeeLDNWa-Yk0bg" id="(1.0,0.8613861386138614)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BBw_UStpEeeLDNWa-Yk0bg" id="(0.0,0.49056603773584906)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_at-CUCtqEeeZI6rMTYV60w" type="ElementImport_Edge" source="_1V7qUCtoEeeLDNWa-Yk0bg" target="_atEDYCtqEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_at-pYCtqEeeZI6rMTYV60w" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_e21VICtqEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_at-pYStqEeeZI6rMTYV60w" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_at-pYitqEeeZI6rMTYV60w" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_e28p4CtqEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_at-pYytqEeeZI6rMTYV60w" y="60"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_at-CUStqEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_MZiTYCtqEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_at-CUitqEeeZI6rMTYV60w" points="[160, 532, -643984, -643984]$[160, 558, -643984, -643984]$[336, 558, -643984, -643984]$[336, 659, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_e3MhgCtqEeeZI6rMTYV60w" id="(0.5,1.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_e3MhgStqEeeZI6rMTYV60w" id="(0.5,0.0)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_HrdQICtpEeeLDNWa-Yk0bg" type="PapyrusUMLProfileDiagram" name="Sensor" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_IZT0oCtpEeeLDNWa-Yk0bg" type="Stereotype_Shape" fillColor="8047085">
+      <children xmi:type="notation:DecorationNode" xmi:id="_IZT0oitpEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_IZT0oytpEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_IZT0pCtpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_IZT0pStpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_IZT0pitpEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IZT0pytpEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_IZT0qCtpEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_IZT0qStpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_IZT0qitpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_IZT0qytpEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IZT0rCtpEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_PzqFcBKREdyCSNtdGzMSGg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IZT0oStpEeeLDNWa-Yk0bg" x="197" y="105" width="187" height="58"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_Isi5sCtpEeeLDNWa-Yk0bg" type="Stereotype_Shape" fillColor="8047085">
+      <children xmi:type="notation:DecorationNode" xmi:id="_Isi5sitpEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_IsjgwCtpEeeLDNWa-Yk0bg" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_IsjgwStpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_IsjgwitpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_IsjgwytpEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IsjgxCtpEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_IsjgxStpEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_IsjgxitpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_IsjgxytpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_IsjgyCtpEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IsjgyStpEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_SuQccDL2Ed2HYNz2hI9A2g"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Isi5sStpEeeLDNWa-Yk0bg" x="945" y="105" width="187" height="130"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_TODwoCtpEeeLDNWa-Yk0bg" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_TODwoitpEeeLDNWa-Yk0bg" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_TOEXsCtpEeeLDNWa-Yk0bg" type="Stereotype_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_hxiywCtqEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_hxd6QCtqEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_hxiywStqEeeZI6rMTYV60w"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_iXPg0CtqEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_iXFIwCtqEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_iXPg0StqEeeZI6rMTYV60w"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_uyAGcCtsEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_uxw14CtsEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_uyAGcStsEeeZI6rMTYV60w"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_TOEXsStpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_TOEXsitpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_TOEXsytpEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TOEXtCtpEeeLDNWa-Yk0bg"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_TOEXtStpEeeLDNWa-Yk0bg" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_TOEXtitpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_TOEXtytpEeeLDNWa-Yk0bg"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_TOEXuCtpEeeLDNWa-Yk0bg"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TOEXuStpEeeLDNWa-Yk0bg"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_TN_fMCtpEeeLDNWa-Yk0bg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TODwoStpEeeLDNWa-Yk0bg" x="945" y="317" width="187" height="91"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_s-LDQCtqEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_s-LqUCtqEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_s-LqUStqEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_s-LqUitqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_s-LqUytqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_s-LqVCtqEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s-LqVStqEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_s-LqVitqEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_s-LqVytqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_s-LqWCtqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_s-LqWStqEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s-LqWitqEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_s94vYCtqEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s-LDQStqEeeZI6rMTYV60w" x="626" y="317" width="187" height="91"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_8732ECtqEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_8732EitqEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_874dICtqEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_PPRU8CtrEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_PPHj8CtrEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_PPRU8StrEeeZI6rMTYV60w"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_874dIStqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_874dIitqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_874dIytqEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_874dJCtqEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_874dJStqEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_874dJitqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_874dJytqEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_874dKCtqEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_874dKStqEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_87v6QCtqEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8732EStqEeeZI6rMTYV60w" x="183" y="317" width="217" height="91"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_HrdQIStpEeeLDNWa-Yk0bg" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_HrdQIitpEeeLDNWa-Yk0bg"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_HrdQIytpEeeLDNWa-Yk0bg">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_INCz4CthEeepEtCwqDnj2w"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_INCz4CthEeepEtCwqDnj2w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_Z-39ICtpEeeLDNWa-Yk0bg" type="Generalization_Edge" source="_TODwoCtpEeeLDNWa-Yk0bg" target="_Isi5sCtpEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_Z-39IytpEeeLDNWa-Yk0bg" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_1aE4kCtqEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_Z-39JCtpEeeLDNWa-Yk0bg" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_Z-39IStpEeeLDNWa-Yk0bg"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_Z-woYCtpEeeLDNWa-Yk0bg"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Z-39IitpEeeLDNWa-Yk0bg" points="[1037, 272, -643984, -643984]$[1037, 163, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Z--DwCtpEeeLDNWa-Yk0bg" id="(0.4919786096256685,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Z--DwStpEeeLDNWa-Yk0bg" id="(0.4919786096256685,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_5t1z0CtqEeeZI6rMTYV60w" type="Generalization_Edge" source="_s-LDQCtqEeeZI6rMTYV60w" target="_TODwoCtpEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_5t1z0ytqEeeZI6rMTYV60w" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_7nnY4CtqEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_5t2a4CtqEeeZI6rMTYV60w" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_5t1z0StqEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_5to_gCtqEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5t1z0itqEeeZI6rMTYV60w" points="[691, 364, -643984, -643984]$[945, 364, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5uFEYCtqEeeZI6rMTYV60w" id="(1.0,0.5164835164835165)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5uFEYStqEeeZI6rMTYV60w" id="(0.0,0.5164835164835165)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_A_T2UCtrEeeZI6rMTYV60w" type="Generalization_Edge" source="_8732ECtqEeeZI6rMTYV60w" target="_IZT0oCtpEeeLDNWa-Yk0bg">
+      <children xmi:type="notation:DecorationNode" xmi:id="_A_T2UytrEeeZI6rMTYV60w" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_dmZLgCtrEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_A_T2VCtrEeeZI6rMTYV60w" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_A_T2UStrEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_A_AUUCtrEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_A_T2UitrEeeZI6rMTYV60w" points="[287, 317, -643984, -643984]$[287, 240, -643984, -643984]$[273, 240, -643984, -643984]$[273, 163, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_A_hRsCtrEeeZI6rMTYV60w" id="(0.4792626728110599,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_A_hRsStrEeeZI6rMTYV60w" id="(0.48128342245989303,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_DyGHACtrEeeZI6rMTYV60w" type="Association_Edge" source="_s-LDQCtqEeeZI6rMTYV60w" target="_8732ECtqEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_DyGHAytrEeeZI6rMTYV60w" type="Association_StereotypeLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_DyGHBCtrEeeZI6rMTYV60w" y="-20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_DyGHBStrEeeZI6rMTYV60w" type="Association_NameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_DyGHBitrEeeZI6rMTYV60w" y="20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_DyGHBytrEeeZI6rMTYV60w" type="Association_TargetRoleLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_DyGHCCtrEeeZI6rMTYV60w" x="18" y="25"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_DyGHCStrEeeZI6rMTYV60w" type="Association_SourceRoleLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_DyGHCitrEeeZI6rMTYV60w" x="8" y="-14"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_DyGHCytrEeeZI6rMTYV60w" type="Association_SourceMultiplicityLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_DyGHDCtrEeeZI6rMTYV60w" x="-19" y="-29"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_DyGHDStrEeeZI6rMTYV60w" type="Association_TargetMultiplicityLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_DyGHDitrEeeZI6rMTYV60w" x="6" y="13"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_DyGHAStrEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Association" href="IoT-ML.profile.uml#_DxvhsCtrEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DyGHAitrEeeZI6rMTYV60w" points="[626, 367, -643984, -643984]$[370, 367, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DydTYCtrEeeZI6rMTYV60w" id="(0.0,0.5494505494505495)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DydTYStrEeeZI6rMTYV60w" id="(1.0,0.5494505494505495)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_D1inICtsEeeZI6rMTYV60w" type="PapyrusUMLProfileDiagram" name="Hybrid" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_EhKXACtsEeeZI6rMTYV60w" type="Stereotype_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_IXmdECtsEeeZI6rMTYV60w" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_IXmdEStsEeeZI6rMTYV60w" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_EhK-ECtsEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_EhLlICtsEeeZI6rMTYV60w" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_EhLlIStsEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_EhLlIitsEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_EhLlIytsEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EhLlJCtsEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_EhLlJStsEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_EhLlJitsEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_EhLlJytsEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_EhLlKCtsEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EhLlKStsEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_LDER0BJxEdygQ5HMNSpiZw"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EhKXAStsEeeZI6rMTYV60w" x="265" y="202" width="190" height="59"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_PEHYYCtsEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_PEH_cCtsEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_PEH_cStsEeeZI6rMTYV60w" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_PEH_citsEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_PEH_cytsEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_PEH_dCtsEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PEH_dStsEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_PEH_ditsEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_PEH_dytsEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_PEH_eCtsEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_PEH_eStsEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PEH_eitsEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_PEDG8CtsEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PEHYYStsEeeZI6rMTYV60w" x="265" y="324" width="190" height="59"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_D1inIStsEeeZI6rMTYV60w" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_D1inIitsEeeZI6rMTYV60w"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_D1inIytsEeeZI6rMTYV60w">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_iuTggCtrEeeZI6rMTYV60w"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_iuTggCtrEeeZI6rMTYV60w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_T-fnsCtsEeeZI6rMTYV60w" type="Generalization_Edge" source="_PEHYYCtsEeeZI6rMTYV60w" target="_EhKXACtsEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_T-gOwCtsEeeZI6rMTYV60w" type="Generalization_StereotypeLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_T-gOwStsEeeZI6rMTYV60w" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_T-fnsStsEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_T-b9UCtsEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_T-fnsitsEeeZI6rMTYV60w" points="[356, 324, -643984, -643984]$[356, 261, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_T-qm0CtsEeeZI6rMTYV60w" id="(0.4789473684210526,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_T-qm0StsEeeZI6rMTYV60w" id="(0.4789473684210526,1.0)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_ZAiv0CttEeeZI6rMTYV60w" type="PapyrusUMLProfileDiagram" name="Virtual Entity" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_f7OqACttEeeZI6rMTYV60w" type="Class_MetaclassShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_f7OqAittEeeZI6rMTYV60w" type="Class_MetaclassNameLabel"/>
+      <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f7OqASttEeeZI6rMTYV60w" x="90" y="91" width="172"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_f7jaIyttEeeZI6rMTYV60w" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_f7jaJCttEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_f7jaJittEeeZI6rMTYV60w" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_f7jaJSttEeeZI6rMTYV60w" x="200"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_mZ5WkCttEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_mZ6ksCttEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mZ9oACttEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_ujLK0CttEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_ujD2ECttEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_ujLK0SttEeeZI6rMTYV60w"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mZ9oASttEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mZ9oAittEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mZ9oAyttEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mZ9oBCttEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mZ9oBSttEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mZ9oBittEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mZ9oByttEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mZ9oCCttEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mZ9oCSttEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_mZu-gCttEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mZ5WkSttEeeZI6rMTYV60w" x="90" y="256" width="172"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_-vXsoCttEeeZI6rMTYV60w" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_-vXsoittEeeZI6rMTYV60w" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_-vXsoyttEeeZI6rMTYV60w" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#_-vUpUCttEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-vXsoSttEeeZI6rMTYV60w" x="313" y="200" width="303"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="__Py5ICttEeeZI6rMTYV60w" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="__Py5IittEeeZI6rMTYV60w" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="__PzgMCttEeeZI6rMTYV60w" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#__PuAoCttEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="__Py5ISttEeeZI6rMTYV60w" x="312" y="286" width="303"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="__1TZ8CttEeeZI6rMTYV60w" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="__1UBACttEeeZI6rMTYV60w" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="__1UBASttEeeZI6rMTYV60w" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#__1PvkCttEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="__1TZ8SttEeeZI6rMTYV60w" x="312" y="383" width="303"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_fN3_UCtuEeeZI6rMTYV60w" type="Class_MetaclassShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_fN4mYCtuEeeZI6rMTYV60w" type="Class_MetaclassNameLabel"/>
+      <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fN3_UStuEeeZI6rMTYV60w" x="821" y="96" width="172"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_fOGo0CtuEeeZI6rMTYV60w" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_fOGo0StuEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_fOGo0ytuEeeZI6rMTYV60w" 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="_fOGo0ituEeeZI6rMTYV60w" x="200"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_gpPKECtuEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_gpPKEituEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_gpPKEytuEeeZI6rMTYV60w" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_gpPKFCtuEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_gpPKFStuEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_gpPKFituEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gpPKFytuEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_gpPKGCtuEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_gpPKGStuEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_gpPKGituEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_gpPKGytuEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gpPKHCtuEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_gpMGwCtuEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gpPKEStuEeeZI6rMTYV60w" x="821" y="220" width="172" height="50"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_mxT7kCtuEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_mxUioCtuEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mxUioStuEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_y3nmECtuEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_y3iGgCtuEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_y3nmEStuEeeZI6rMTYV60w"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mxUioituEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mxUioytuEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mxUipCtuEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mxUipStuEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_mxUipituEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_mxUipytuEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_mxUiqCtuEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_mxUiqStuEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mxUiqituEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_mxPqICtuEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mxT7kStuEeeZI6rMTYV60w" x="769" y="324" width="276"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_KQLn8CtvEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_KQLn8itvEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_KQLn8ytvEeeZI6rMTYV60w" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_KQLn9CtvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_KQLn9StvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_KQLn9itvEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KQLn9ytvEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_KQLn-CtvEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_KQLn-StvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_KQLn-itvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_KQLn-ytvEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KQLn_CtvEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_PEDG8CtsEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KQLn8StvEeeZI6rMTYV60w" x="1351" y="345" width="174" height="54"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_ZAiv0SttEeeZI6rMTYV60w" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_ZAiv0ittEeeZI6rMTYV60w"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_ZAiv0yttEeeZI6rMTYV60w">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_VGlbsCttEeeZI6rMTYV60w"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_VGlbsCttEeeZI6rMTYV60w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_f7kBMCttEeeZI6rMTYV60w" type="StereotypeCommentLink" source="_f7OqACttEeeZI6rMTYV60w" target="_f7jaIyttEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_f7kBMSttEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_f7kBNSttEeeZI6rMTYV60w" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f7kBMittEeeZI6rMTYV60w" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f7kBMyttEeeZI6rMTYV60w"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f7kBNCttEeeZI6rMTYV60w"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_sITq4CttEeeZI6rMTYV60w" type="Extension_Edge" source="_mZ5WkCttEeeZI6rMTYV60w" target="_f7OqACttEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_sITq4SttEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_sIFocCttEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sITq4ittEeeZI6rMTYV60w" points="[173, 256, -643984, -643984]$[173, 141, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sIa_oCttEeeZI6rMTYV60w" id="(0.48255813953488375,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sIa_oSttEeeZI6rMTYV60w" id="(0.48255813953488375,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_-7v7wCttEeeZI6rMTYV60w" type="Constraint_ContextEdge" source="_-vXsoCttEeeZI6rMTYV60w" target="_mZ5WkCttEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_-7v7wyttEeeZI6rMTYV60w" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_GfcWsCtuEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_-7v7xCttEeeZI6rMTYV60w" y="15"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_-7v7wSttEeeZI6rMTYV60w"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-7v7wittEeeZI6rMTYV60w" points="[313, 226, -643984, -643984]$[208, 226, -643984, -643984]$[208, 256, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-77h8CttEeeZI6rMTYV60w" id="(0.0,0.45)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-77h8SttEeeZI6rMTYV60w" id="(0.686046511627907,0.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="__alM0CttEeeZI6rMTYV60w" type="Constraint_ContextEdge" source="__Py5ICttEeeZI6rMTYV60w" target="_mZ5WkCttEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="__alM0yttEeeZI6rMTYV60w" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_E1BcQCtuEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="__alM1CttEeeZI6rMTYV60w" x="21" y="16"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="__alM0SttEeeZI6rMTYV60w"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__alM0ittEeeZI6rMTYV60w" points="[313, 333, -643984, -643984]$[295, 333, -643984, -643984]$[295, 329, -643984, -643984]$[262, 329, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__au90CttEeeZI6rMTYV60w" id="(0.0,0.6)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__au90SttEeeZI6rMTYV60w" id="(1.0,0.73)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_ACMmcCtuEeeZI6rMTYV60w" type="Constraint_ContextEdge" source="__1TZ8CttEeeZI6rMTYV60w" target="_mZ5WkCttEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_ACMmcytuEeeZI6rMTYV60w" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_AmjQsCtuEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_ACMmdCtuEeeZI6rMTYV60w" y="15"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_ACMmcStuEeeZI6rMTYV60w"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ACMmcituEeeZI6rMTYV60w" points="[313, 423, -643984, -643984]$[181, 423, -643984, -643984]$[181, 356, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ACYMoCtuEeeZI6rMTYV60w" id="(0.0,0.4666666666666667)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ACYMoStuEeeZI6rMTYV60w" id="(0.5290697674418605,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_fOGo1CtuEeeZI6rMTYV60w" type="StereotypeCommentLink" source="_fN3_UCtuEeeZI6rMTYV60w" target="_fOGo0CtuEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_fOGo1StuEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_fOGo2StuEeeZI6rMTYV60w" 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="_fOGo1ituEeeZI6rMTYV60w" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fOGo1ytuEeeZI6rMTYV60w"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fOGo2CtuEeeZI6rMTYV60w"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_l45s4CtuEeeZI6rMTYV60w" type="Extension_Edge" source="_gpPKECtuEeeZI6rMTYV60w" target="_fN3_UCtuEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_l45s4StuEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_l4utwCtuEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_l45s4ituEeeZI6rMTYV60w" points="[904, 220, -643984, -643984]$[904, 146, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_l5KyoCtuEeeZI6rMTYV60w" id="(0.48255813953488375,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_l5KyoStuEeeZI6rMTYV60w" id="(0.48255813953488375,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_vg3FoCtuEeeZI6rMTYV60w" type="Generalization_Edge" source="_mxT7kCtuEeeZI6rMTYV60w" target="_gpPKECtuEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_vg3ssCtuEeeZI6rMTYV60w" type="Generalization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_yZaAECtuEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_vg3ssStuEeeZI6rMTYV60w" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_vg3FoStuEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_vgstkCtuEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vg3FoituEeeZI6rMTYV60w" points="[909, 324, -643984, -643984]$[909, 297, -643984, -643984]$[907, 297, -643984, -643984]$[907, 270, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vhIycCtuEeeZI6rMTYV60w" id="(0.5,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vhIycStuEeeZI6rMTYV60w" id="(0.5,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_Msbn8CtvEeeZI6rMTYV60w" type="Association_Edge" source="_mxT7kCtuEeeZI6rMTYV60w" target="_KQLn8CtvEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_MscPACtvEeeZI6rMTYV60w" type="Association_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_NL_40CtvEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_MscPAStvEeeZI6rMTYV60w" y="-20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_MscPAitvEeeZI6rMTYV60w" type="Association_NameLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_NMPwcCtvEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_MscPAytvEeeZI6rMTYV60w" y="20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_MscPBCtvEeeZI6rMTYV60w" type="Association_TargetRoleLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_NMYTUCtvEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_MscPBStvEeeZI6rMTYV60w" x="-91" y="-29"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_MscPBitvEeeZI6rMTYV60w" type="Association_SourceRoleLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_NMfoECtvEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_MscPBytvEeeZI6rMTYV60w" x="12" y="20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_MscPCCtvEeeZI6rMTYV60w" type="Association_SourceMultiplicityLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_NMlusCtvEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_MscPCStvEeeZI6rMTYV60w" x="25" y="36"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_MscPCitvEeeZI6rMTYV60w" type="Association_TargetMultiplicityLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_NMscYCtvEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_MscPCytvEeeZI6rMTYV60w" x="-37" y="-13"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_Msbn8StvEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Association" href="IoT-ML.profile.uml#_MsOMkCtvEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Msbn8itvEeeZI6rMTYV60w" points="[1045, 377, -643984, -643984]$[1293, 377, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MsxmMCtvEeeZI6rMTYV60w" id="(1.0,0.53)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MsxmMStvEeeZI6rMTYV60w" id="(0.0,0.5925925925925926)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_Yse5cCtvEeeZI6rMTYV60w" type="PapyrusUMLProfileDiagram" name="Service" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_au1ywCtvEeeZI6rMTYV60w" type="Class_MetaclassShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_au2Z0CtvEeeZI6rMTYV60w" type="Class_MetaclassNameLabel"/>
+      <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_au1ywStvEeeZI6rMTYV60w" x="537" y="252" width="211" height="148"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_avGRcCtvEeeZI6rMTYV60w" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_avGRcStvEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_avGRcytvEeeZI6rMTYV60w" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_avGRcitvEeeZI6rMTYV60w" x="200"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_cUrIICtvEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_cUrvMCtvEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_cUrvMStvEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_cUrvMitvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_cUrvMytvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_cUrvNCtvEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cUrvNStvEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_cUrvNitvEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_cUrvNytvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_cUrvOCtvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_cUrvOStvEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cUrvOitvEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_cUpS8CtvEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cUrIIStvEeeZI6rMTYV60w" x="204" y="252" width="164" height="59"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_emlgYCtvEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_emmHcCtvEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_emmHcStvEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_emmHcitvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_emmHcytvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_emmHdCtvEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_emmHdStvEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_emmHditvEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_emmHdytvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_emmHeCtvEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_emmHeStvEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_emmHeitvEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_emjrMCtvEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_emlgYStvEeeZI6rMTYV60w" x="204" y="341" width="164" height="59"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_slaLsCtvEeeZI6rMTYV60w" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_slaLsitvEeeZI6rMTYV60w" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_slaLsytvEeeZI6rMTYV60w" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#_slVTMCtvEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_slaLsStvEeeZI6rMTYV60w" x="42" y="472" width="293"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_tlVXoCtvEeeZI6rMTYV60w" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_tlV-sCtvEeeZI6rMTYV60w" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_tlV-sStvEeeZI6rMTYV60w" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#_tlTicCtvEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tlVXoStvEeeZI6rMTYV60w" x="42" y="559" width="295"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_-oYo8CtvEeeZI6rMTYV60w" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_-oZQACtvEeeZI6rMTYV60w" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_-oZQAStvEeeZI6rMTYV60w" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#_-oWzwCtvEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-oYo8StvEeeZI6rMTYV60w" x="42" y="145" width="293"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="__TCIcCtvEeeZI6rMTYV60w" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="__TCvgCtvEeeZI6rMTYV60w" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="__TCvgStvEeeZI6rMTYV60w" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#__S_sMCtvEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="__TCIcStvEeeZI6rMTYV60w" x="42" y="65" width="293"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_WG_BYCtwEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_WG_ocCtwEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_WG_ocStwEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_jc22UCtwEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_jcr3MCtwEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_jc22UStwEeeZI6rMTYV60w"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_WG_ocitwEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_WG_ocytwEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_WG_odCtwEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WG_odStwEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_WG_oditwEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_WG_odytwEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_WG_oeCtwEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_WG_oeStwEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WG_oeitwEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_WG8lICtwEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WG_BYStwEeeZI6rMTYV60w" x="934" y="252" width="207" height="75"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_XfPNwCtwEeeZI6rMTYV60w" type="Class_MetaclassShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_XfPNwitwEeeZI6rMTYV60w" type="Class_MetaclassNameLabel"/>
+      <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Interface"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XfPNwStwEeeZI6rMTYV60w" x="934" y="108" width="207"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_XffscytwEeeZI6rMTYV60w" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_XffsdCtwEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_XffsditwEeeZI6rMTYV60w" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Interface"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XffsdStwEeeZI6rMTYV60w" x="200"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_6t4s0CtwEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_6t4s0itwEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_6t4s0ytwEeeZI6rMTYV60w" visible="false" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_6t4s1CtwEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_6t4s1StwEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_6t4s1itwEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6t4s1ytwEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_6t5T4CtwEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_6t5T4StwEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_6t5T4itwEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_6t5T4ytwEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6t5T5CtwEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_gpMGwCtuEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6t4s0StwEeeZI6rMTYV60w" x="1302" y="108" width="207" height="50"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="__nYyYCtwEeeZI6rMTYV60w" type="Class_MetaclassShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="__nYyYitwEeeZI6rMTYV60w" type="Class_MetaclassNameLabel"/>
+      <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="__nYyYStwEeeZI6rMTYV60w" x="1300" y="16" width="207"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="__nkYkytwEeeZI6rMTYV60w" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="__nkYlCtwEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="__nkYlitwEeeZI6rMTYV60w" 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="__nkYlStwEeeZI6rMTYV60w" x="200"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_END9ACtxEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_END9AitxEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_END9AytxEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_END9BCtxEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_END9BStxEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_END9BitxEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_END9BytxEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_ENEkECtxEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_ENEkEStxEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_ENEkEitxEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_ENEkEytxEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ENEkFCtxEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_ENBgwCtxEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_END9AStxEeeZI6rMTYV60w" x="1302" y="252" width="207" height="75"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_K0-sMCtxEeeZI6rMTYV60w" type="Constraint_PackagedElementShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_K0-sMitxEeeZI6rMTYV60w" type="Constraint_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_K0_TQCtxEeeZI6rMTYV60w" type="Constraint_BodyLabel"/>
+      <element xmi:type="uml:Constraint" href="IoT-ML.profile.uml#_K07B0CtxEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_K0-sMStxEeeZI6rMTYV60w" x="1259" y="472" width="293"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_Yse5cStvEeeZI6rMTYV60w" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_Yse5citvEeeZI6rMTYV60w"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_Yse5cytvEeeZI6rMTYV60w">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_VGlbsCttEeeZI6rMTYV60w"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_VGlbsCttEeeZI6rMTYV60w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_avGRdCtvEeeZI6rMTYV60w" type="StereotypeCommentLink" source="_au1ywCtvEeeZI6rMTYV60w" target="_avGRcCtvEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_avGRdStvEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_avGReStvEeeZI6rMTYV60w" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_avGRditvEeeZI6rMTYV60w" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_avGRdytvEeeZI6rMTYV60w"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_avGReCtvEeeZI6rMTYV60w"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_odUU8CtvEeeZI6rMTYV60w" type="Extension_Edge" source="_cUrIICtvEeeZI6rMTYV60w" target="_au1ywCtvEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_odUU8StvEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_odIuwCtvEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_odUU8itvEeeZI6rMTYV60w" points="[368, 281, -643984, -643984]$[537, 281, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_odde4CtvEeeZI6rMTYV60w" id="(1.0,0.4915254237288136)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_odde4StvEeeZI6rMTYV60w" id="(0.0,0.19594594594594594)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_pGtQMCtvEeeZI6rMTYV60w" type="Extension_Edge" source="_emlgYCtvEeeZI6rMTYV60w" target="_au1ywCtvEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_pGtQMStvEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_pGlUYCtvEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pGtQMitvEeeZI6rMTYV60w" points="[368, 369, -643984, -643984]$[537, 369, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pG3oQCtvEeeZI6rMTYV60w" id="(1.0,0.4745762711864407)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pG3oQStvEeeZI6rMTYV60w" id="(0.0,0.7905405405405406)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_tFh2MCtvEeeZI6rMTYV60w" type="Constraint_ContextEdge" source="_slaLsCtvEeeZI6rMTYV60w" target="_emlgYCtvEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_tFh2MytvEeeZI6rMTYV60w" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_xj6GACtvEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_tFh2NCtvEeeZI6rMTYV60w" y="15"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_tFh2MStvEeeZI6rMTYV60w"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_tFh2MitvEeeZI6rMTYV60w" points="[259, 472, -643984, -643984]$[259, 400, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tFpK8CtvEeeZI6rMTYV60w" id="(0.7406143344709898,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tFpK8StvEeeZI6rMTYV60w" id="(0.3353658536585366,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_uHm-QCtvEeeZI6rMTYV60w" type="Constraint_ContextEdge" source="_tlVXoCtvEeeZI6rMTYV60w" target="_emlgYCtvEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_uHnlUCtvEeeZI6rMTYV60w" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_vUPJcCtvEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_uHnlUStvEeeZI6rMTYV60w" y="15"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_uHm-QStvEeeZI6rMTYV60w"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uHm-QitvEeeZI6rMTYV60w" points="[337, 591, -643984, -643984]$[351, 591, -643984, -643984]$[351, 400, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uHwIMCtvEeeZI6rMTYV60w" id="(1.0,0.5333333333333333)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uHwvQCtvEeeZI6rMTYV60w" id="(0.8963414634146342,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_-2J_MCtvEeeZI6rMTYV60w" type="Constraint_ContextEdge" source="_-oYo8CtvEeeZI6rMTYV60w" target="_cUrIICtvEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_-2J_MytvEeeZI6rMTYV60w" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_A-tAECtwEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_-2J_NCtvEeeZI6rMTYV60w" x="21" y="45"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_-2J_MStvEeeZI6rMTYV60w"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-2J_MitvEeeZI6rMTYV60w" points="[335, 195, -643984, -643984]$[375, 195, -643984, -643984]$[375, 266, -643984, -643984]$[368, 266, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-2TJICtvEeeZI6rMTYV60w" id="(1.0,0.5)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-2TJIStvEeeZI6rMTYV60w" id="(1.0,0.22033898305084745)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="__l9EcCtvEeeZI6rMTYV60w" type="Constraint_ContextEdge" source="__TCIcCtvEeeZI6rMTYV60w" target="_cUrIICtvEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="__l9EcytvEeeZI6rMTYV60w" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_BjUJACtwEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="__l9EdCtvEeeZI6rMTYV60w" x="-14" y="49"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="__l9EcStvEeeZI6rMTYV60w"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__l9EcitvEeeZI6rMTYV60w" points="[335, 104, -643984, -643984]$[400, 104, -643984, -643984]$[400, 273, -643984, -643984]$[368, 273, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__mG1cCtvEeeZI6rMTYV60w" id="(1.0,0.6333333333333333)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__mG1cStvEeeZI6rMTYV60w" id="(1.0,0.3559322033898305)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_XffsdytwEeeZI6rMTYV60w" type="StereotypeCommentLink" source="_XfPNwCtwEeeZI6rMTYV60w" target="_XffscytwEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_XffseCtwEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_XfgTgCtwEeeZI6rMTYV60w" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Interface"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_XffseStwEeeZI6rMTYV60w" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_XffseitwEeeZI6rMTYV60w"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_XffseytwEeeZI6rMTYV60w"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_gn0i4CtwEeeZI6rMTYV60w" type="Extension_Edge" source="_WG_BYCtwEeeZI6rMTYV60w" target="_XfPNwCtwEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_gn0i4StwEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_gnl5YCtwEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gn0i4itwEeeZI6rMTYV60w" points="[1032, 266, -643984, -643984]$[1032, 158, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_goAJECtwEeeZI6rMTYV60w" id="(0.47342995169082125,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_goAJEStwEeeZI6rMTYV60w" id="(0.47342995169082125,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="__nkYlytwEeeZI6rMTYV60w" type="StereotypeCommentLink" source="__nYyYCtwEeeZI6rMTYV60w" target="__nkYkytwEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="__nkYmCtwEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="__nkYnCtwEeeZI6rMTYV60w" 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="__nkYmStwEeeZI6rMTYV60w" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__nkYmitwEeeZI6rMTYV60w"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__nkYmytwEeeZI6rMTYV60w"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="__nxz8CtwEeeZI6rMTYV60w" type="Extension_Edge" source="_6t4s0CtwEeeZI6rMTYV60w" target="__nYyYCtwEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="__nxz8StwEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_l4utwCtuEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__nxz8itwEeeZI6rMTYV60w" points="[1404, 108, -643984, -643984]$[1404, 87, -643984, -643984]$[1404, 66, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ABy2cCtxEeeZI6rMTYV60w" id="(0.4927536231884058,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ABy2cStxEeeZI6rMTYV60w" id="(0.5024154589371981,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_H-cj8CtxEeeZI6rMTYV60w" type="Generalization_Edge" source="_END9ACtxEeeZI6rMTYV60w" target="_6t4s0CtwEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_H-cj8ytxEeeZI6rMTYV60w" type="Generalization_StereotypeLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_H-cj9CtxEeeZI6rMTYV60w" y="40"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_H-cj8StxEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Generalization" href="IoT-ML.profile.uml#_H-SL4CtxEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_H-cj8itxEeeZI6rMTYV60w" points="[1405, 252, -643984, -643984]$[1405, 158, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_H-u30CtxEeeZI6rMTYV60w" id="(0.4975845410628019,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_H-u30StxEeeZI6rMTYV60w" id="(0.4975845410628019,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_LLzQwCtxEeeZI6rMTYV60w" type="Constraint_ContextEdge" source="_K0-sMCtxEeeZI6rMTYV60w" target="_END9ACtxEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_LLzQwytxEeeZI6rMTYV60w" type="Constraint_KeywordLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_OvbvkCtxEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_LLzQxCtxEeeZI6rMTYV60w" y="15"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_LLzQwStxEeeZI6rMTYV60w"/>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LLzQwitxEeeZI6rMTYV60w" points="[1403, 472, -643984, -643984]$[1403, 327, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LMDvcCtxEeeZI6rMTYV60w" id="(0.49146757679180886,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LMDvcStxEeeZI6rMTYV60w" id="(0.48792270531400966,1.0)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_lXlBICtxEeeZI6rMTYV60w" type="PapyrusUMLProfileDiagram" name="Structure" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_qDFuACtxEeeZI6rMTYV60w" type="Class_MetaclassShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_qDGVECtxEeeZI6rMTYV60w" type="Class_MetaclassNameLabel"/>
+      <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#ValueSpecification"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qDFuAStxEeeZI6rMTYV60w" x="51" y="65" width="621"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_qDQtIytxEeeZI6rMTYV60w" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_qDQtJCtxEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_qDQtJitxEeeZI6rMTYV60w" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#ValueSpecification"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qDQtJStxEeeZI6rMTYV60w" x="200"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_rm8tcCtxEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_rm8tcitxEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_rm9UgCtxEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_2Hn24CtxEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_2HkMgCtxEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_2Hn24StxEeeZI6rMTYV60w"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_BbszMCtyEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_Bbpv4CtyEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_BbszMStyEeeZI6rMTYV60w"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_rm9UgStxEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_rm9UgitxEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_rm9UgytxEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rm9UhCtxEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_rm9UhStxEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_rm9UhitxEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_rm9UhytxEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_rm9UiCtxEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rm9UiStxEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_rm64QCtxEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rm8tcStxEeeZI6rMTYV60w" x="51" y="258" width="202" height="82"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_Fw-KUCtyEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_Fw-xYCtyEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_Fw-xYStyEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_Fw-xYityEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_Fw-xYytyEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_Fw-xZCtyEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fw-xZStyEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_Fw-xZityEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_Fw-xZytyEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_Fw-xaCtyEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_Fw-xaStyEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fw-xaityEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_Fw88MCtyEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fw-KUStyEeeZI6rMTYV60w" x="470" y="258" width="202" height="82"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_lXloMCtxEeeZI6rMTYV60w" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_lXloMStxEeeZI6rMTYV60w"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_lXloMitxEeeZI6rMTYV60w">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_hrtzYCtxEeeZI6rMTYV60w"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_hrtzYCtxEeeZI6rMTYV60w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_qDRUMCtxEeeZI6rMTYV60w" type="StereotypeCommentLink" source="_qDFuACtxEeeZI6rMTYV60w" target="_qDQtIytxEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_qDRUMStxEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_qDRUNStxEeeZI6rMTYV60w" name="BASE_ELEMENT">
+        <eObjectValue xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#ValueSpecification"/>
+      </styles>
+      <element xsi:nil="true"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qDRUMitxEeeZI6rMTYV60w" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qDRUMytxEeeZI6rMTYV60w"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qDRUNCtxEeeZI6rMTYV60w"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_1Jn9kCtxEeeZI6rMTYV60w" type="Extension_Edge" source="_rm8tcCtxEeeZI6rMTYV60w" target="_qDFuACtxEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_1Jn9kStxEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_1JgBwCtxEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1Jn9kitxEeeZI6rMTYV60w" points="[151, 258, -643984, -643984]$[151, 115, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1Jv5YCtxEeeZI6rMTYV60w" id="(0.49504950495049505,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1Jv5YStxEeeZI6rMTYV60w" id="(0.1610305958132045,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_JPA-gCtyEeeZI6rMTYV60w" type="Extension_Edge" source="_Fw-KUCtyEeeZI6rMTYV60w" target="_qDFuACtxEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_JPA-gStyEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_JO6Q0CtyEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JPA-gityEeeZI6rMTYV60w" points="[572, 258, -643984, -643984]$[572, 115, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JPI6UCtyEeeZI6rMTYV60w" id="(0.504950495049505,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JPI6UStyEeeZI6rMTYV60w" id="(0.8389694041867954,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_OMovECtyEeeZI6rMTYV60w" type="Association_Edge" source="_Fw-KUCtyEeeZI6rMTYV60w" target="_rm8tcCtxEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_OMovEytyEeeZI6rMTYV60w" type="Association_StereotypeLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_OMovFCtyEeeZI6rMTYV60w" y="-20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_OMovFStyEeeZI6rMTYV60w" type="Association_NameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_OMovFityEeeZI6rMTYV60w" y="20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_OMovFytyEeeZI6rMTYV60w" type="Association_TargetRoleLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_OMpWICtyEeeZI6rMTYV60w" x="25" y="-20"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_OMpWIStyEeeZI6rMTYV60w" type="Association_SourceRoleLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_OMpWIityEeeZI6rMTYV60w" x="74" y="28"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_OMpWIytyEeeZI6rMTYV60w" type="Association_SourceMultiplicityLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_OMpWJCtyEeeZI6rMTYV60w" x="-11" y="13"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_OMpWJStyEeeZI6rMTYV60w" type="Association_TargetMultiplicityLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_OMpWJityEeeZI6rMTYV60w" x="13" y="-34"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_OMovEStyEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Association" href="IoT-ML.profile.uml#_OMj2kCtyEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_OMovEityEeeZI6rMTYV60w" points="[470, 306, -643984, -643984]$[253, 306, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OM4msCtyEeeZI6rMTYV60w" id="(0.0,0.5853658536585366)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OM4msStyEeeZI6rMTYV60w" id="(1.0,0.5853658536585366)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_v_8RgCtyEeeZI6rMTYV60w" type="PapyrusUMLClassDiagram" name="Resource package" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_zIq9ACtyEeeZI6rMTYV60w" type="Package_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_zIrkECtyEeeZI6rMTYV60w" type="Package_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_zIrkEStyEeeZI6rMTYV60w" type="Package_PackagedElementCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_zIrkEityEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zIrkEytyEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_skdpICtyEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zIq9AStyEeeZI6rMTYV60w" x="282" y="304" height="187"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_BsFjICtzEeeZI6rMTYV60w" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_FdGWoCtzEeeZI6rMTYV60w" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_FdGWoStzEeeZI6rMTYV60w" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_BsFjIitzEeeZI6rMTYV60w" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_BsFjIytzEeeZI6rMTYV60w" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_BsFjJCtzEeeZI6rMTYV60w" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_BsFjJStzEeeZI6rMTYV60w" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_BsFjJitzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_BsFjJytzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_BsFjKCtzEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BsFjKStzEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_BsFjKitzEeeZI6rMTYV60w" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_BsFjKytzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_BsFjLCtzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_BsFjLStzEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BsFjLitzEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_BsFjLytzEeeZI6rMTYV60w" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_BsFjMCtzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_BsFjMStzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_BsFjMitzEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BsFjMytzEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_IXI-cBJuEdyNBsnA2HLmgg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BsFjIStzEeeZI6rMTYV60w" x="655" y="341" width="146" height="53"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_Bsl5cCtzEeeZI6rMTYV60w" type="Class_Shape" fillColor="8047085">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_FdG9sCtzEeeZI6rMTYV60w" source="QualifiedName">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_FdG9sStzEeeZI6rMTYV60w" key="QualifiedNameDepth" value="2"/>
+      </eAnnotations>
+      <children xmi:type="notation:DecorationNode" xmi:id="_Bsl5citzEeeZI6rMTYV60w" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_Bsl5cytzEeeZI6rMTYV60w" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_Bsl5dCtzEeeZI6rMTYV60w" y="5"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_Bsl5dStzEeeZI6rMTYV60w" visible="false" type="Class_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_Bsl5ditzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_Bsl5dytzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_Bsl5eCtzEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Bsl5eStzEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_Bsl5eitzEeeZI6rMTYV60w" visible="false" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_Bsl5eytzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_Bsl5fCtzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_Bsl5fStzEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Bsl5fitzEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_Bsl5fytzEeeZI6rMTYV60w" visible="false" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_Bsl5gCtzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_Bsl5gStzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_Bsl5gitzEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Bsl5gytzEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_ovMq4BJuEdyNBsnA2HLmgg"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Bsl5cStzEeeZI6rMTYV60w" x="655" y="436" width="146" height="53"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_v_8RgStyEeeZI6rMTYV60w" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_v_8RgityEeeZI6rMTYV60w"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_v_8RgytyEeeZI6rMTYV60w">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_skdpICtyEeeZI6rMTYV60w"/>
+      <configuration xmi:type="configuration:PapyrusDiagram" href="platform:/plugin/org.eclipse.papyrus.uml.diagram.clazz/model/clazzdiagram.configuration#_zzf4cXDtEeWh-MssWmCB_A"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_skdpICtyEeeZI6rMTYV60w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_Bsfy0CtzEeeZI6rMTYV60w" type="ElementImport_Edge" source="_zIq9ACtyEeeZI6rMTYV60w" target="_BsFjICtzEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_Bsfy0ytzEeeZI6rMTYV60w" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_CDzfkCtzEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_Bsfy1CtzEeeZI6rMTYV60w" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_BsgZ4CtzEeeZI6rMTYV60w" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_CD5mMCtzEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_BsgZ4StzEeeZI6rMTYV60w" x="-20" y="-18"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_Bsfy0StzEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_13Nm4CtyEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Bsfy0itzEeeZI6rMTYV60w" points="[482, 367, -643984, -643984]$[655, 367, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_CECJECtzEeeZI6rMTYV60w" id="(1.0,0.33689839572192515)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_CECJEStzEeeZI6rMTYV60w" id="(0.0,0.49056603773584906)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_BtDMcCtzEeeZI6rMTYV60w" type="ElementImport_Edge" source="_zIq9ACtyEeeZI6rMTYV60w" target="_Bsl5cCtzEeeZI6rMTYV60w">
+      <children xmi:type="notation:DecorationNode" xmi:id="_BtDMcytzEeeZI6rMTYV60w" type="ElementImport_AliasLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_ChL_ICtzEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_BtDMdCtzEeeZI6rMTYV60w" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_BtDMdStzEeeZI6rMTYV60w" type="ElementImport_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_ChSFwCtzEeeZI6rMTYV60w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_BtDMditzEeeZI6rMTYV60w" x="-25" y="-20"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_BtDMcStzEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:ElementImport" href="IoT-ML.profile.uml#_-xvR4CtyEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_BtDMcitzEeeZI6rMTYV60w" points="[482, 462, -643984, -643984]$[655, 462, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ChZagCtzEeeZI6rMTYV60w" id="(1.0,0.8449197860962567)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ChZagStzEeeZI6rMTYV60w" id="(0.0,0.49056603773584906)"/>
+    </edges>
+  </notation:Diagram>
+  <notation:Diagram xmi:id="_mYGYECtzEeeZI6rMTYV60w" type="PapyrusUMLProfileDiagram" name="Resource" measurementUnit="Pixel">
+    <children xmi:type="notation:Shape" xmi:id="_o4JS8CtzEeeZI6rMTYV60w" type="Class_MetaclassShape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_o4J6ACtzEeeZI6rMTYV60w" type="Class_MetaclassNameLabel"/>
+      <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_o4JS8StzEeeZI6rMTYV60w" x="364" y="150" width="633"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_o4aYsCtzEeeZI6rMTYV60w" type="StereotypeComment">
+      <styles xmi:type="notation:TitleStyle" xmi:id="_o4aYsStzEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_o4aYsytzEeeZI6rMTYV60w" 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="_o4aYsitzEeeZI6rMTYV60w" x="200"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_qMNi4CtzEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_qMNi4itzEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_qMNi4ytzEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_qMNi5CtzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_qMNi5StzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_qMNi5itzEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qMNi5ytzEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_qMNi6CtzEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_qMNi6StzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_qMNi6itzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_qMNi6ytzEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qMNi7CtzEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_qMEY8CtzEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qMNi4StzEeeZI6rMTYV60w" x="364" y="277" width="179" height="77"/>
+    </children>
+    <children xmi:type="notation:Shape" xmi:id="_veNoACtzEeeZI6rMTYV60w" type="Stereotype_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_veNoAitzEeeZI6rMTYV60w" type="Stereotype_NameLabel"/>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_veNoAytzEeeZI6rMTYV60w" type="Stereotype_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_3d9FwCtzEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_3d40UCtzEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_3d9FwStzEeeZI6rMTYV60w"/>
+        </children>
+        <children xmi:type="notation:Shape" xmi:id="_4Ks3ACtzEeeZI6rMTYV60w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="IoT-ML.profile.uml#_4KpMoCtzEeeZI6rMTYV60w"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_4Ks3AStzEeeZI6rMTYV60w"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_veNoBCtzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_veNoBStzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_veNoBitzEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_veNoBytzEeeZI6rMTYV60w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_veNoCCtzEeeZI6rMTYV60w" visible="false" type="Stereotype_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_veNoCStzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_veNoCitzEeeZI6rMTYV60w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_veNoCytzEeeZI6rMTYV60w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_veNoDCtzEeeZI6rMTYV60w"/>
+      </children>
+      <element xmi:type="uml:Stereotype" href="IoT-ML.profile.uml#_veD3ACtzEeeZI6rMTYV60w"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_veNoAStzEeeZI6rMTYV60w" x="752" y="277" width="245" height="77"/>
+    </children>
+    <styles xmi:type="notation:StringValueStyle" xmi:id="_mYGYEStzEeeZI6rMTYV60w" name="diagram_compatibility_version" stringValue="1.2.0"/>
+    <styles xmi:type="notation:DiagramStyle" xmi:id="_mYGYEitzEeeZI6rMTYV60w"/>
+    <styles xmi:type="style:PapyrusViewStyle" xmi:id="_mYGYEytzEeeZI6rMTYV60w">
+      <owner xmi:type="uml:Package" href="IoT-ML.profile.uml#_skdpICtyEeeZI6rMTYV60w"/>
+    </styles>
+    <element xmi:type="uml:Package" href="IoT-ML.profile.uml#_skdpICtyEeeZI6rMTYV60w"/>
+    <edges xmi:type="notation:Connector" xmi:id="_o4aYtCtzEeeZI6rMTYV60w" type="StereotypeCommentLink" source="_o4JS8CtzEeeZI6rMTYV60w" target="_o4aYsCtzEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_o4aYtStzEeeZI6rMTYV60w"/>
+      <styles xmi:type="notation:EObjectValueStyle" xmi:id="_o4a_wCtzEeeZI6rMTYV60w" 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="_o4aYtitzEeeZI6rMTYV60w" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_o4aYtytzEeeZI6rMTYV60w"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_o4aYuCtzEeeZI6rMTYV60w"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_ux1qMCtzEeeZI6rMTYV60w" type="Extension_Edge" source="_qMNi4CtzEeeZI6rMTYV60w" target="_o4JS8CtzEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_ux1qMStzEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_uxrSICtzEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ux1qMitzEeeZI6rMTYV60w" points="[455, 277, -643984, -643984]$[455, 238, -643984, -643984]$[454, 238, -643984, -643984]$[454, 200, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ux6isCtzEeeZI6rMTYV60w" id="(0.5027932960893855,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ux6isStzEeeZI6rMTYV60w" id="(0.14218009478672985,1.0)"/>
+    </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_2VMG4CtzEeeZI6rMTYV60w" type="Extension_Edge" source="_veNoACtzEeeZI6rMTYV60w" target="_o4JS8CtzEeeZI6rMTYV60w">
+      <styles xmi:type="notation:FontStyle" xmi:id="_2VMG4StzEeeZI6rMTYV60w"/>
+      <element xmi:type="uml:Extension" href="IoT-ML.profile.uml#_2VDkACtzEeeZI6rMTYV60w"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2VMG4itzEeeZI6rMTYV60w" points="[876, 277, -643984, -643984]$[876, 200, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2VTboCtzEeeZI6rMTYV60w" id="(0.5083798882681564,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2VTboStzEeeZI6rMTYV60w" id="(0.8088467614533965,1.0)"/>
+    </edges>
+  </notation:Diagram>
+</xmi:XMI>
diff --git a/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.uml b/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.uml
new file mode 100644
index 0000000..be820d2
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/model/IoT-ML.profile.uml
@@ -0,0 +1,1446 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<uml:Profile xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_gF1qcCtgEeepEtCwqDnj2w" name="IoT-ML">
+  <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4Rb8Ct1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML">
+    <contents xmi:type="ecore:EPackage" xmi:id="_MfaQ4Ct1EeeZI6rMTYV60w" name="IoTML" nsURI="http:///schemas/IoTML/_MfZCwCt1EeeZI6rMTYV60w/1" nsPrefix="IoTML">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaQ4St1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaQ4it1EeeZI6rMTYV60w" key="originalName" value="IoT-ML"/>
+      </eAnnotations>
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaQ4yt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.1.0/UML">
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwDevice"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//blocks"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwCommunication"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwComputing"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//Alloc"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwGeneral"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//SRM/SW_Brokering"/>
+      </eAnnotations>
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfctICt1EeeZI6rMTYV60w" source="PapyrusVersion">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfctISt1EeeZI6rMTYV60w" key="Version" value="0.0.2"/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfctIit1EeeZI6rMTYV60w" key="Comment" value=""/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfctIyt1EeeZI6rMTYV60w" key="Copyright" value=""/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfctJCt1EeeZI6rMTYV60w" key="Date" value="2017-04-27"/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfctJSt1EeeZI6rMTYV60w" key="Author" value=""/>
+      </eAnnotations>
+      <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaQ5Ct1EeeZI6rMTYV60w" name="Animate" nsURI="http:///IoTML/Animate.ecore" nsPrefix="IoTML.Animate">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaQ5St1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_qEMJ8CtgEeepEtCwqDnj2w"/>
+        <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaQ5it1EeeZI6rMTYV60w" name="HumanUser">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaQ5yt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_9sK2ICtgEeepEtCwqDnj2w"/>
+          <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaQ6Ct1EeeZI6rMTYV60w" name="base_Actor" ordered="false" lowerBound="1">
+            <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Actor"/>
+          </eStructuralFeatures>
+        </eClassifiers>
+      </eSubpackages>
+      <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaQ6it1EeeZI6rMTYV60w" name="Hardware" nsURI="http:///IoTML/Hardware.ecore" nsPrefix="IoTML.Hardware">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaQ6yt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_FSypQCthEeepEtCwqDnj2w"/>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaQ7Ct1EeeZI6rMTYV60w" name="Actuator" nsURI="http:///IoTML/Hardware/Actuator.ecore" nsPrefix="IoTML.Hardware.Actuator">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaQ7St1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_GsMsMCthEeepEtCwqDnj2w"/>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaQ7it1EeeZI6rMTYV60w" name="HwCommonActuator">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaQ7yt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_ymw1sCtlEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwDevice/HWActuator"/>
+            <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_MfaQ8Ct1EeeZI6rMTYV60w" name="energyKind" ordered="false" eType="_MfaQ9yt1EeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_MfaQ8it1EeeZI6rMTYV60w" name="movementKind" ordered="false" eType="_MfaQ_it1EeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_MfaQ9Ct1EeeZI6rMTYV60w" name="isPowered" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EEnum" xmi:id="_MfaQ9yt1EeeZI6rMTYV60w" name="EnergyKind">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaQ-Ct1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_EU2BACtmEeeLDNWa-Yk0bg"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_MfaQ-St1EeeZI6rMTYV60w" name="Electrical"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_MfaQ-it1EeeZI6rMTYV60w" name="Mechanical" value="1"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_MfaQ-yt1EeeZI6rMTYV60w" name="Pneumatical" value="2"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_MfaQ_Ct1EeeZI6rMTYV60w" name="Hydraulic" value="3"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_MfaQ_St1EeeZI6rMTYV60w" name="None" value="4"/>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EEnum" xmi:id="_MfaQ_it1EeeZI6rMTYV60w" name="MovementKind">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaQ_yt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_cErTYCtmEeeLDNWa-Yk0bg"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_MfaRACt1EeeZI6rMTYV60w" name="Linear"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_MfaRASt1EeeZI6rMTYV60w" name="Rotational" value="1"/>
+          </eClassifiers>
+        </eSubpackages>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaRAit1EeeZI6rMTYV60w" name="Sensor" nsURI="http:///IoTML/Hardware/Sensor.ecore" nsPrefix="IoTML.Hardware.Sensor">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRAyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_INCz4CthEeepEtCwqDnj2w"/>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRBCt1EeeZI6rMTYV60w" name="HwCommonSensor">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRBSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_TN_fMCtpEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwDevice/HWSensor"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRBit1EeeZI6rMTYV60w" name="inputValueType" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//blocks/ValueType"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRCCt1EeeZI6rMTYV60w" name="outputValueType" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//blocks/ValueType"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRCit1EeeZI6rMTYV60w" name="hwcommonsensor" ordered="false" lowerBound="1" eType="_MfaRBCt1EeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRDCt1EeeZI6rMTYV60w" name="transferFunction" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Behavior"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRDyt1EeeZI6rMTYV60w" name="HwRFIDReaderSensor" eSuperTypes="_MfaRBCt1EeeZI6rMTYV60w">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRECt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_s94vYCtqEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRESt1EeeZI6rMTYV60w" name="tag" ordered="false" upperBound="-1" eType="_MfaRFCt1EeeZI6rMTYV60w"/>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRFCt1EeeZI6rMTYV60w" name="HwTag">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRFSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_87v6QCtqEeeZI6rMTYV60w"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwDevice/HwI_O"/>
+            <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_MfaRFit1EeeZI6rMTYV60w" name="tageFrequency" ordered="false">
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Real"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+        </eSubpackages>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaRGSt1EeeZI6rMTYV60w" name="Network" nsURI="http:///IoTML/Hardware/Network.ecore" nsPrefix="IoTML.Hardware.Network">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRGit1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_JQEXICthEeepEtCwqDnj2w"/>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRGyt1EeeZI6rMTYV60w" name="ConnectedDevice">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRHCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_OpOwACtoEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwCommunication/HwCommunicationResource"/>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRHit1EeeZI6rMTYV60w" name="Gateway">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRHyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_O9fv0CtoEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="#_MfaRGyt1EeeZI6rMTYV60w"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwComputing/HwComputingResource"/>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRIit1EeeZI6rMTYV60w" name="Server">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRIyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_PQZdsCtoEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="#_MfaRGyt1EeeZI6rMTYV60w"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwComputing/HwComputingResource"/>
+          </eClassifiers>
+        </eSubpackages>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaRJit1EeeZI6rMTYV60w" name="Core" nsURI="http:///IoTML/Hardware/Core.ecore" nsPrefix="IoTML.Hardware.Core">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRJyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_Ko050CthEeepEtCwqDnj2w"/>
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRKCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore">
+            <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRKSt1EeeZI6rMTYV60w" key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL"/>
+          </eAnnotations>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRKit1EeeZI6rMTYV60w" name="AllocateResource">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRKyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_Gb9JYCtkEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//Alloc/Allocate"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaRLCt1EeeZI6rMTYV60w" name="AllocateResource_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRLSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRLit1EeeZI6rMTYV60w" key="body" value="self.base_Abstraction.client.oclIsKindOf(DeviceBroker) and self.base_Abstraction.supplier.oclIsKindOf(...)"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRMCt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRMSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRMit1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRNCt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRNSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRNit1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaRNyt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaROCt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaROSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaROyt1EeeZI6rMTYV60w" name="HasService">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRPCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_eyhroCtkEeeLDNWa-Yk0bg"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaRPSt1EeeZI6rMTYV60w" name="HasDevice_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRPit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRPyt1EeeZI6rMTYV60w" key="body" value="self.base_Association.ownedEnd->one(p | p.oclIsKindOf(PhisicalEntity) and self.base_Association.ownedEnd->size() = 1"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRQSt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRQit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRQyt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRRSt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRRit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRRyt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaRSCt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRSSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRSit1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaRSyt1EeeZI6rMTYV60w" name="HasDevice_C2">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRTCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRTSt1EeeZI6rMTYV60w" key="body" value="self.baseAssociation.memberEnd->one(p | p.oclIskIndOf(HwDevice) and p.aggregationKind = UML::AggregationKind:shared)"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRTyt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRUCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRUSt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRUyt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRVCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRVSt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaRVit1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRVyt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRWCt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRWSt1EeeZI6rMTYV60w" name="base_Association" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Association"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+        </eSubpackages>
+      </eSubpackages>
+      <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaRWyt1EeeZI6rMTYV60w" name="Hybrid" nsURI="http:///IoTML/Hybrid.ecore" nsPrefix="IoTML.Hybrid">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRXCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_iuTggCtrEeeZI6rMTYV60w"/>
+        <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRXSt1EeeZI6rMTYV60w" name="PhysicalEntity">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRXit1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_PEDG8CtsEeeZI6rMTYV60w"/>
+          <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwGeneral/HwResource"/>
+        </eClassifiers>
+      </eSubpackages>
+      <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaRYCt1EeeZI6rMTYV60w" name="Software" nsURI="http:///IoTML/Software.ecore" nsPrefix="IoTML.Software">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRYSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_WWmukCtsEeeZI6rMTYV60w"/>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaRYit1EeeZI6rMTYV60w" name="Artefact" nsURI="http:///IoTML/Software/Artefact.ecore" nsPrefix="IoTML.Software.Artefact">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRYyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_VGlbsCttEeeZI6rMTYV60w"/>
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRZCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore">
+            <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRZSt1EeeZI6rMTYV60w" key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL"/>
+          </eAnnotations>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRZit1EeeZI6rMTYV60w" name="PropertyAccess">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRZyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_mZu-gCttEeeZI6rMTYV60w"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaRaCt1EeeZI6rMTYV60w" name="PropertyAccess_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRaSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRait1EeeZI6rMTYV60w" key="body" value="self.accessedProperty.type.oclIsKindOf(VirtualEntity)"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRbCt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRbSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRbit1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRcCt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRcSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRcit1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaRcyt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRdCt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRdSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaRdit1EeeZI6rMTYV60w" name="PropertyAccess_C2">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRdyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaReCt1EeeZI6rMTYV60w" key="body" value="self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(VirtualEntity)) and self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(PhysicalEntity))"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaReit1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaReyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRfCt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRfit1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRfyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRgCt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaRgSt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRgit1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRgyt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaRhCt1EeeZI6rMTYV60w" name="propertyAccess_C3">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRhSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRhit1EeeZI6rMTYV60w" key="body" value="self.base_Association.navigableOwnedEnd->one(p | p.type.oclIsKindOf(PhysicalEntity))"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRiCt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRiSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRiit1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRjCt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRjSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRjit1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaRjyt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRkCt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRkSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRkit1EeeZI6rMTYV60w" name="base_Association" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Association"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRlCt1EeeZI6rMTYV60w" name="accessedProperty" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Property"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRlit1EeeZI6rMTYV60w" name="DigitalArtefact">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRlyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_gpMGwCtuEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRmCt1EeeZI6rMTYV60w" name="base_Class" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRmit1EeeZI6rMTYV60w" name="VirtualEntity" eSuperTypes="_MfaRlit1EeeZI6rMTYV60w">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRmyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_mxPqICtuEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRnCt1EeeZI6rMTYV60w" name="phisicalEntitySpecification" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//InstanceSpecification"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRnit1EeeZI6rMTYV60w" name="physicalEntity" ordered="false" eType="_MfaRXSt1EeeZI6rMTYV60w"/>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRoSt1EeeZI6rMTYV60w" name="ProvideService">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRoit1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_cUpS8CtvEeeZI6rMTYV60w"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaRoyt1EeeZI6rMTYV60w" name="ProvideService_C2">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRpCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRpSt1EeeZI6rMTYV60w" key="body" value="self.base_Association.memberEnd->one(p | p.type.oclIsKindOf(Service) and p.owningAssociation = null and and p.aggregationKind = UML::AggregationKind::shared)"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRpyt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRqCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRqSt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRqyt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRrCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRrSt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaRrit1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRryt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRsCt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaRsSt1EeeZI6rMTYV60w" name="ProvideService_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRsit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRsyt1EeeZI6rMTYV60w" key="body" value="self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(VirtualEntity))"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRtSt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRtit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRtyt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRuSt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRuit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRuyt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaRvCt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRvSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRvit1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaRvyt1EeeZI6rMTYV60w" name="base_Association" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Association"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaRwSt1EeeZI6rMTYV60w" name="ProvideResource">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRwit1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_emjrMCtvEeeZI6rMTYV60w"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaRwyt1EeeZI6rMTYV60w" name="ProvideResource_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRxCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRxSt1EeeZI6rMTYV60w" key="body" value="self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(ServiceDescription))"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRxyt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRyCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRySt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaRyyt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaRzCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaRzSt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaRzit1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaRzyt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaR0Ct1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaR0St1EeeZI6rMTYV60w" name="ProvideResource_C2">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR0it1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaR0yt1EeeZI6rMTYV60w" key="body" value="self.base_Association.memberEnd->one(p | p.type.oclIsKindOf(ResourceDescription) and p.owningAssociation = null and and p.aggregationKind = UML::AggregationKind::shared)"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaR1St1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR1it1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaR1yt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaR2St1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR2it1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaR2yt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaR3Ct1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaR3St1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaR3it1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaR3yt1EeeZI6rMTYV60w" name="base_Association" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Association"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaR4St1EeeZI6rMTYV60w" name="ServiceDescription">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR4it1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_WG8lICtwEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaR4yt1EeeZI6rMTYV60w" name="base_Interface" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Interface"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaR5St1EeeZI6rMTYV60w" name="resourceGetSet" ordered="false" upperBound="-1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Operation"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaR5yt1EeeZI6rMTYV60w" name="Service" eSuperTypes="_MfaRlit1EeeZI6rMTYV60w">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR6Ct1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_ENBgwCtxEeeZI6rMTYV60w"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_MfaR6St1EeeZI6rMTYV60w" name="Service_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR6it1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaR6yt1EeeZI6rMTYV60w" key="body" value="not self.base_Class.classifierBehavior.oclIsUndefined() and self.base_Class.isActive = true"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaR7St1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR7it1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaR7yt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_MfaR8St1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR8it1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MfaR8yt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_MfaR9Ct1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaR9St1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_MfaR9it1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+          </eClassifiers>
+        </eSubpackages>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaR-Ct1EeeZI6rMTYV60w" name="Core" nsURI="http:///IoTML/Software/Core.ecore" nsPrefix="IoTML.Software.Core">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR-St1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_aILwgCtxEeeZI6rMTYV60w"/>
+          <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaR-it1EeeZI6rMTYV60w" name="Structure" nsURI="http:///IoTML/Software/Core/Structure.ecore" nsPrefix="IoTML.Software.Core.Structure">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR-yt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_hrtzYCtxEeeZI6rMTYV60w"/>
+            <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaR_Ct1EeeZI6rMTYV60w" name="MetaValueSpecification">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaR_St1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_rm64QCtxEeeZI6rMTYV60w"/>
+              <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaR_it1EeeZI6rMTYV60w" name="base_ValueSpecification" ordered="false" lowerBound="1">
+                <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//ValueSpecification"/>
+              </eStructuralFeatures>
+              <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaSACt1EeeZI6rMTYV60w" name="type" ordered="false" derived="true">
+                <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Type"/>
+              </eStructuralFeatures>
+              <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_MfaSAit1EeeZI6rMTYV60w" name="description" ordered="false">
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+              </eStructuralFeatures>
+            </eClassifiers>
+            <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaSBCt1EeeZI6rMTYV60w" name="DetailedValueSpecification">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaSBSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_Fw88MCtyEeeZI6rMTYV60w"/>
+              <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaSBit1EeeZI6rMTYV60w" name="base_ValueSpecification" ordered="false" lowerBound="1">
+                <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//ValueSpecification"/>
+              </eStructuralFeatures>
+              <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaSCCt1EeeZI6rMTYV60w" name="metaSpecification" ordered="false" upperBound="-1" eType="_MfaR_Ct1EeeZI6rMTYV60w" containment="true"/>
+            </eClassifiers>
+          </eSubpackages>
+        </eSubpackages>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_MfaSCit1EeeZI6rMTYV60w" name="Resource" nsURI="http:///IoTML/Software/Resource.ecore" nsPrefix="IoTML.Software.Resource">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaSCyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_skdpICtyEeeZI6rMTYV60w"/>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaSDCt1EeeZI6rMTYV60w" name="NetworkResource">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaSDSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_qMEY8CtzEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaSDit1EeeZI6rMTYV60w" name="base_Class" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_MfaSECt1EeeZI6rMTYV60w" name="OnDeviceResource">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MfaSESt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_veD3ACtzEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaSEit1EeeZI6rMTYV60w" name="base_Class" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaSFCt1EeeZI6rMTYV60w" name="deviceBroker" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//SRM/SW_Brokering/DeviceBroker"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_MfaSFit1EeeZI6rMTYV60w" name="memoryBroker" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//SRM/SW_Brokering/MemoryBroker"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+        </eSubpackages>
+      </eSubpackages>
+    </contents>
+    <contents xmi:type="ecore:EPackage" xmi:id="_D4Rb8St1EeeZI6rMTYV60w" name="IoTML" nsURI="http:///schemas/IoTML/_D4QN0Ct1EeeZI6rMTYV60w/0" nsPrefix="IoTML">
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4Rb8it1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4Rb8yt1EeeZI6rMTYV60w" key="originalName" value="IoT-ML"/>
+      </eAnnotations>
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4Rb9Ct1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.1.0/UML">
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwDevice"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//blocks"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwCommunication"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwComputing"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//Alloc"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwGeneral"/>
+        <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/MARTE/1#//SRM/SW_Brokering"/>
+      </eAnnotations>
+      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4TRICt1EeeZI6rMTYV60w" source="PapyrusVersion">
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4TRISt1EeeZI6rMTYV60w" key="Version" value="0.0.1"/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4TRIit1EeeZI6rMTYV60w" key="Comment" value=""/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4TRIyt1EeeZI6rMTYV60w" key="Copyright" value=""/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4TRJCt1EeeZI6rMTYV60w" key="Date" value="2017-04-27"/>
+        <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4TRJSt1EeeZI6rMTYV60w" key="Author" value=""/>
+      </eAnnotations>
+      <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4Rb9St1EeeZI6rMTYV60w" name="Animate" nsURI="http:///IoTML/Animate.ecore" nsPrefix="IoTML.Animate">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4Rb9it1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_qEMJ8CtgEeepEtCwqDnj2w"/>
+        <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4Rb9yt1EeeZI6rMTYV60w" name="HumanUser">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4Rb-Ct1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_9sK2ICtgEeepEtCwqDnj2w"/>
+          <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4Rb-St1EeeZI6rMTYV60w" name="base_Actor" ordered="false" lowerBound="1">
+            <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Actor"/>
+          </eStructuralFeatures>
+        </eClassifiers>
+      </eSubpackages>
+      <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4Rb-yt1EeeZI6rMTYV60w" name="Hardware" nsURI="http:///IoTML/Hardware.ecore" nsPrefix="IoTML.Hardware">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4Rb_Ct1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_FSypQCthEeepEtCwqDnj2w"/>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4Rb_St1EeeZI6rMTYV60w" name="Actuator" nsURI="http:///IoTML/Hardware/Actuator.ecore" nsPrefix="IoTML.Hardware.Actuator">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4Rb_it1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_GsMsMCthEeepEtCwqDnj2w"/>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4Rb_yt1EeeZI6rMTYV60w" name="HwCommonActuator">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcACt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_ymw1sCtlEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwDevice/HWActuator"/>
+            <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_D4RcASt1EeeZI6rMTYV60w" name="energyKind" ordered="false" eType="_D4RcCCt1EeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_D4RcAyt1EeeZI6rMTYV60w" name="movementKind" ordered="false" eType="_D4RcDyt1EeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_D4RcBSt1EeeZI6rMTYV60w" name="isPowered" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EEnum" xmi:id="_D4RcCCt1EeeZI6rMTYV60w" name="EnergyKind">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcCSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_EU2BACtmEeeLDNWa-Yk0bg"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_D4RcCit1EeeZI6rMTYV60w" name="Electrical"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_D4RcCyt1EeeZI6rMTYV60w" name="Mechanical" value="1"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_D4RcDCt1EeeZI6rMTYV60w" name="Pneumatical" value="2"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_D4RcDSt1EeeZI6rMTYV60w" name="Hydraulic" value="3"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_D4RcDit1EeeZI6rMTYV60w" name="None" value="4"/>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EEnum" xmi:id="_D4RcDyt1EeeZI6rMTYV60w" name="MovementKind">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcECt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_cErTYCtmEeeLDNWa-Yk0bg"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_D4RcESt1EeeZI6rMTYV60w" name="Linear"/>
+            <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_D4RcEit1EeeZI6rMTYV60w" name="Rotational" value="1"/>
+          </eClassifiers>
+        </eSubpackages>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4RcEyt1EeeZI6rMTYV60w" name="Sensor" nsURI="http:///IoTML/Hardware/Sensor.ecore" nsPrefix="IoTML.Hardware.Sensor">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcFCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_INCz4CthEeepEtCwqDnj2w"/>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4RcFSt1EeeZI6rMTYV60w" name="HwCommonSensor">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcFit1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_TN_fMCtpEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwDevice/HWSensor"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4RcFyt1EeeZI6rMTYV60w" name="inputValueType" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//blocks/ValueType"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4RcGSt1EeeZI6rMTYV60w" name="outputValueType" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//blocks/ValueType"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4RcGyt1EeeZI6rMTYV60w" name="hwcommonsensor" ordered="false" lowerBound="1" eType="_D4RcFSt1EeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4RcHSt1EeeZI6rMTYV60w" name="transferFunction" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Behavior"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4RcICt1EeeZI6rMTYV60w" name="HwRFIDReaderSensor" eSuperTypes="_D4RcFSt1EeeZI6rMTYV60w">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcISt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_s94vYCtqEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4RcIit1EeeZI6rMTYV60w" name="tag" ordered="false" upperBound="-1" eType="_D4RcJSt1EeeZI6rMTYV60w"/>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4RcJSt1EeeZI6rMTYV60w" name="HwTag">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcJit1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_87v6QCtqEeeZI6rMTYV60w"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwDevice/HwI_O"/>
+            <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_D4RcJyt1EeeZI6rMTYV60w" name="tageFrequency" ordered="false">
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Real"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+        </eSubpackages>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4RcKit1EeeZI6rMTYV60w" name="Network" nsURI="http:///IoTML/Hardware/Network.ecore" nsPrefix="IoTML.Hardware.Network">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcKyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_JQEXICthEeepEtCwqDnj2w"/>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4RcLCt1EeeZI6rMTYV60w" name="ConnectedDevice">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcLSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_OpOwACtoEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwCommunication/HwCommunicationResource"/>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4RcLyt1EeeZI6rMTYV60w" name="Gateway">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcMCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_O9fv0CtoEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="#_D4RcLCt1EeeZI6rMTYV60w"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwComputing/HwComputingResource"/>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4RcMyt1EeeZI6rMTYV60w" name="Server">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcNCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_PQZdsCtoEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="#_D4RcLCt1EeeZI6rMTYV60w"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwLogical/HwComputing/HwComputingResource"/>
+          </eClassifiers>
+        </eSubpackages>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4RcNyt1EeeZI6rMTYV60w" name="Core" nsURI="http:///IoTML/Hardware/Core.ecore" nsPrefix="IoTML.Hardware.Core">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcOCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_Ko050CthEeepEtCwqDnj2w"/>
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcOSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore">
+            <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4RcOit1EeeZI6rMTYV60w" key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL"/>
+          </eAnnotations>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4RcOyt1EeeZI6rMTYV60w" name="AllocateResource">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcPCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_Gb9JYCtkEeeLDNWa-Yk0bg"/>
+            <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//Alloc/Allocate"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4RcPSt1EeeZI6rMTYV60w" name="AllocateResource_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcPit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4RcPyt1EeeZI6rMTYV60w" key="body" value="self.base_Abstraction.client.oclIsKindOf(DeviceBroker) and self.base_Abstraction.supplier.oclIsKindOf(...)"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4RcQSt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcQit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4RcQyt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4RcRSt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcRit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4RcRyt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4RcSCt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4RcSSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4RcSit1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4RcTCt1EeeZI6rMTYV60w" name="HasService">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcTSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_eyhroCtkEeeLDNWa-Yk0bg"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4RcTit1EeeZI6rMTYV60w" name="HasDevice_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4RcTyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4RcUCt1EeeZI6rMTYV60w" key="body" value="self.base_Association.ownedEnd->one(p | p.oclIsKindOf(PhisicalEntity) and self.base_Association.ownedEnd->size() = 1"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDASt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDAit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDAyt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDBSt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDBit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDByt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4SDCCt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDCSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDCit1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4SDCyt1EeeZI6rMTYV60w" name="HasDevice_C2">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDDCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDDSt1EeeZI6rMTYV60w" key="body" value="self.baseAssociation.memberEnd->one(p | p.oclIskIndOf(HwDevice) and p.aggregationKind = UML::AggregationKind:shared)"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDDyt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDECt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDESt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDEyt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDFCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDFSt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4SDFit1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDFyt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDGCt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDGSt1EeeZI6rMTYV60w" name="base_Association" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Association"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+        </eSubpackages>
+      </eSubpackages>
+      <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4SDGyt1EeeZI6rMTYV60w" name="Hybrid" nsURI="http:///IoTML/Hybrid.ecore" nsPrefix="IoTML.Hybrid">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDHCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_iuTggCtrEeeZI6rMTYV60w"/>
+        <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDHSt1EeeZI6rMTYV60w" name="PhysicalEntity">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDHit1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_PEDG8CtsEeeZI6rMTYV60w"/>
+          <eSuperTypes xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//HRM/HwGeneral/HwResource"/>
+        </eClassifiers>
+      </eSubpackages>
+      <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4SDICt1EeeZI6rMTYV60w" name="Software" nsURI="http:///IoTML/Software.ecore" nsPrefix="IoTML.Software">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDISt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_WWmukCtsEeeZI6rMTYV60w"/>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4SDIit1EeeZI6rMTYV60w" name="Artefact" nsURI="http:///IoTML/Software/Artefact.ecore" nsPrefix="IoTML.Software.Artefact">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDIyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_VGlbsCttEeeZI6rMTYV60w"/>
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDJCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore">
+            <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDJSt1EeeZI6rMTYV60w" key="validationDelegates" value="http://www.eclipse.org/emf/2002/Ecore/OCL"/>
+          </eAnnotations>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDJit1EeeZI6rMTYV60w" name="PropertyAccess">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDJyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_mZu-gCttEeeZI6rMTYV60w"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4SDKCt1EeeZI6rMTYV60w" name="PropertyAccess_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDKSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDKit1EeeZI6rMTYV60w" key="body" value="self.accessedProperty.type.oclIsKindOf(VirtualEntity)"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDLCt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDLSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDLit1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDMCt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDMSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDMit1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4SDMyt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDNCt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDNSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4SDNit1EeeZI6rMTYV60w" name="PropertyAccess_C2">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDNyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDOCt1EeeZI6rMTYV60w" key="body" value="self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(VirtualEntity)) and self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(PhysicalEntity))"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDOit1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDOyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDPCt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDPit1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDPyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDQCt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4SDQSt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDQit1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDQyt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4SDRCt1EeeZI6rMTYV60w" name="propertyAccess_C3">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDRSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDRit1EeeZI6rMTYV60w" key="body" value="self.base_Association.navigableOwnedEnd->one(p | p.type.oclIsKindOf(PhysicalEntity))"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDSCt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDSSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDSit1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDTCt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDTSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDTit1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4SDTyt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDUCt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDUSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDUit1EeeZI6rMTYV60w" name="base_Association" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Association"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDVCt1EeeZI6rMTYV60w" name="accessedProperty" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Property"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDVit1EeeZI6rMTYV60w" name="DigitalArtefact">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDVyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_gpMGwCtuEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDWCt1EeeZI6rMTYV60w" name="base_Class" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDWit1EeeZI6rMTYV60w" name="VirtualEntity" eSuperTypes="_D4SDVit1EeeZI6rMTYV60w">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDWyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_mxPqICtuEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDXCt1EeeZI6rMTYV60w" name="phisicalEntitySpecification" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//InstanceSpecification"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDXit1EeeZI6rMTYV60w" name="physicalEntity" ordered="false" eType="_D4SDHSt1EeeZI6rMTYV60w"/>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDYSt1EeeZI6rMTYV60w" name="ProvideService">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDYit1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_cUpS8CtvEeeZI6rMTYV60w"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4SDYyt1EeeZI6rMTYV60w" name="ProvideService_C2">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDZCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDZSt1EeeZI6rMTYV60w" key="body" value="self.base_Association.memberEnd->one(p | p.type.oclIsKindOf(Service) and p.owningAssociation = null and and p.aggregationKind = UML::AggregationKind::shared)"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDZyt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDaCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDaSt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDayt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDbCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDbSt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4SDbit1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDbyt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDcCt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4SDcSt1EeeZI6rMTYV60w" name="ProvideService_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDcit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDcyt1EeeZI6rMTYV60w" key="body" value="self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(VirtualEntity))"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDdSt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDdit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDdyt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDeSt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDeit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDeyt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4SDfCt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDfSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDfit1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDfyt1EeeZI6rMTYV60w" name="base_Association" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Association"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDgSt1EeeZI6rMTYV60w" name="ProvideResource">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDgit1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_emjrMCtvEeeZI6rMTYV60w"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4SDgyt1EeeZI6rMTYV60w" name="ProvideResource_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDhCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDhSt1EeeZI6rMTYV60w" key="body" value="self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(ServiceDescription))"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDhyt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDiCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDiSt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDiyt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDjCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDjSt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4SDjit1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDjyt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDkCt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4SDkSt1EeeZI6rMTYV60w" name="ProvideResource_C2">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDkit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDkyt1EeeZI6rMTYV60w" key="body" value="self.base_Association.memberEnd->one(p | p.type.oclIsKindOf(ResourceDescription) and p.owningAssociation = null and and p.aggregationKind = UML::AggregationKind::shared)"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDlSt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDlit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDlyt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDmSt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDmit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDmyt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4SDnCt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDnSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDnit1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDnyt1EeeZI6rMTYV60w" name="base_Association" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Association"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDoSt1EeeZI6rMTYV60w" name="ServiceDescription">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDoit1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_WG8lICtwEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDoyt1EeeZI6rMTYV60w" name="base_Interface" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Interface"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDpSt1EeeZI6rMTYV60w" name="resourceGetSet" ordered="false" upperBound="-1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Operation"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDpyt1EeeZI6rMTYV60w" name="Service" eSuperTypes="_D4SDVit1EeeZI6rMTYV60w">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDqCt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_ENBgwCtxEeeZI6rMTYV60w"/>
+            <eOperations xmi:type="ecore:EOperation" xmi:id="_D4SDqSt1EeeZI6rMTYV60w" name="Service_C1">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDqit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/Ecore/OCL">
+                <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDqyt1EeeZI6rMTYV60w" key="body" value="not self.base_Class.classifierBehavior.oclIsUndefined() and self.base_Class.isActive = true"/>
+              </eAnnotations>
+              <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDrSt1EeeZI6rMTYV60w" name="diagnostics">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDrit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDryt1EeeZI6rMTYV60w" key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+                </eAnnotations>
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain"/>
+              </eParameters>
+              <eParameters xmi:type="ecore:EParameter" xmi:id="_D4SDsSt1EeeZI6rMTYV60w" name="context">
+                <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDsit1EeeZI6rMTYV60w" source="http://www.eclipse.org/emf/2002/GenModel">
+                  <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_D4SDsyt1EeeZI6rMTYV60w" key="documentation" value="The cache of context-specific information."/>
+                </eAnnotations>
+                <eGenericType xmi:type="ecore:EGenericType" xmi:id="_D4SDtCt1EeeZI6rMTYV60w">
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDtSt1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eTypeArguments xmi:type="ecore:EGenericType" xmi:id="_D4SDtit1EeeZI6rMTYV60w">
+                    <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+                  </eTypeArguments>
+                  <eClassifier xmi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EMap"/>
+                </eGenericType>
+              </eParameters>
+            </eOperations>
+          </eClassifiers>
+        </eSubpackages>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4SDuCt1EeeZI6rMTYV60w" name="Core" nsURI="http:///IoTML/Software/Core.ecore" nsPrefix="IoTML.Software.Core">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDuSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_aILwgCtxEeeZI6rMTYV60w"/>
+          <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4SDuit1EeeZI6rMTYV60w" name="Structure" nsURI="http:///IoTML/Software/Core/Structure.ecore" nsPrefix="IoTML.Software.Core.Structure">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDuyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_hrtzYCtxEeeZI6rMTYV60w"/>
+            <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDvCt1EeeZI6rMTYV60w" name="MetaValueSpecification">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDvSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_rm64QCtxEeeZI6rMTYV60w"/>
+              <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDvit1EeeZI6rMTYV60w" name="base_ValueSpecification" ordered="false" lowerBound="1">
+                <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//ValueSpecification"/>
+              </eStructuralFeatures>
+              <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDwCt1EeeZI6rMTYV60w" name="type" ordered="false" derived="true">
+                <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Type"/>
+              </eStructuralFeatures>
+              <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_D4SDwit1EeeZI6rMTYV60w" name="description" ordered="false">
+                <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+              </eStructuralFeatures>
+            </eClassifiers>
+            <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDxCt1EeeZI6rMTYV60w" name="DetailedValueSpecification">
+              <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDxSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_Fw88MCtyEeeZI6rMTYV60w"/>
+              <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDxit1EeeZI6rMTYV60w" name="base_ValueSpecification" ordered="false" lowerBound="1">
+                <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//ValueSpecification"/>
+              </eStructuralFeatures>
+              <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDyCt1EeeZI6rMTYV60w" name="metaSpecification" ordered="false" upperBound="-1" eType="_D4SDvCt1EeeZI6rMTYV60w" containment="true"/>
+            </eClassifiers>
+          </eSubpackages>
+        </eSubpackages>
+        <eSubpackages xmi:type="ecore:EPackage" xmi:id="_D4SDyit1EeeZI6rMTYV60w" name="Resource" nsURI="http:///IoTML/Software/Resource.ecore" nsPrefix="IoTML.Software.Resource">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDyyt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/4.0.0/UML" references="_skdpICtyEeeZI6rMTYV60w"/>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SDzCt1EeeZI6rMTYV60w" name="NetworkResource">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SDzSt1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_qMEY8CtzEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SDzit1EeeZI6rMTYV60w" name="base_Class" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+          <eClassifiers xmi:type="ecore:EClass" xmi:id="_D4SD0Ct1EeeZI6rMTYV60w" name="OnDeviceResource">
+            <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D4SD0St1EeeZI6rMTYV60w" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_veD3ACtzEeeZI6rMTYV60w"/>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SD0it1EeeZI6rMTYV60w" name="base_Class" ordered="false" lowerBound="1">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SD1Ct1EeeZI6rMTYV60w" name="deviceBroker" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//SRM/SW_Brokering/DeviceBroker"/>
+            </eStructuralFeatures>
+            <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_D4SD1it1EeeZI6rMTYV60w" name="memoryBroker" ordered="false">
+              <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/papyrus/MARTE/1#//SRM/SW_Brokering/MemoryBroker"/>
+            </eStructuralFeatures>
+          </eClassifiers>
+        </eSubpackages>
+      </eSubpackages>
+    </contents>
+  </eAnnotations>
+  <packageImport xmi:type="uml:PackageImport" xmi:id="_gRWW4CtgEeepEtCwqDnj2w">
+    <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
+  </packageImport>
+  <packageImport xmi:type="uml:PackageImport" xmi:id="_gRYzICtgEeepEtCwqDnj2w">
+    <importedPackage xmi:type="uml:Model" href="pathmap://UML_METAMODELS/UML.metamodel.uml#_0"/>
+  </packageImport>
+  <packageImport xmi:type="uml:PackageImport" xmi:id="_7KJ2QCtpEeeZI6rMTYV60w">
+    <importedPackage xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML"/>
+  </packageImport>
+  <packagedElement xmi:type="uml:Package" xmi:id="_qEMJ8CtgEeepEtCwqDnj2w" name="Animate">
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="_9sK2ICtgEeepEtCwqDnj2w" name="HumanUser">
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_BR4_oCthEeepEtCwqDnj2w" name="base_Actor" association="_BR0uMCthEeepEtCwqDnj2w">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Actor"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Extension" xmi:id="_BR0uMCthEeepEtCwqDnj2w" name="E_HumanUser_Actor1" memberEnd="_BR4YkCthEeepEtCwqDnj2w _BR4_oCthEeepEtCwqDnj2w">
+      <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_BR4YkCthEeepEtCwqDnj2w" name="extension_HumanUser" type="_9sK2ICtgEeepEtCwqDnj2w" aggregation="composite" association="_BR0uMCthEeepEtCwqDnj2w"/>
+    </packagedElement>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Package" xmi:id="_FSypQCthEeepEtCwqDnj2w" name="Hardware">
+    <packagedElement xmi:type="uml:Package" xmi:id="_GsMsMCthEeepEtCwqDnj2w" name="Actuator">
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_GJm_sCtlEeeLDNWa-Yk0bg">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_PHH9sDL2Ed2HYNz2hI9A2g"/>
+      </elementImport>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_ymw1sCtlEeeLDNWa-Yk0bg" name="HwCommonActuator">
+        <generalization xmi:type="uml:Generalization" xmi:id="_2NfEwCtlEeeLDNWa-Yk0bg">
+          <general xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_PHH9sDL2Ed2HYNz2hI9A2g"/>
+        </generalization>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_SUvqYCtmEeeLDNWa-Yk0bg" name="energyKind" type="_EU2BACtmEeeLDNWa-Yk0bg" association="_SUpjwCtmEeeLDNWa-Yk0bg">
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_X49g4CtmEeeLDNWa-Yk0bg"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_X5UGMCtmEeeLDNWa-Yk0bg" value="1"/>
+        </ownedAttribute>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_iyYhgCtmEeeLDNWa-Yk0bg" name="movementKind" type="_cErTYCtmEeeLDNWa-Yk0bg" association="_iyXTYCtmEeeLDNWa-Yk0bg">
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lf53sCtmEeeLDNWa-Yk0bg"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_lgJvUCtmEeeLDNWa-Yk0bg" value="1"/>
+        </ownedAttribute>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_oLZ0oCtmEeeLDNWa-Yk0bg" name="isPowered">
+          <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Enumeration" xmi:id="_EU2BACtmEeeLDNWa-Yk0bg" name="EnergyKind">
+        <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_Gbj14CtmEeeLDNWa-Yk0bg" name="Electrical"/>
+        <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_Gvk-ECtmEeeLDNWa-Yk0bg" name="Mechanical"/>
+        <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_HC4UkCtmEeeLDNWa-Yk0bg" name="Pneumatical"/>
+        <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_H6D0MCtmEeeLDNWa-Yk0bg" name="Hydraulic"/>
+        <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_INrTwCtmEeeLDNWa-Yk0bg" name="None"/>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Association" xmi:id="_SUpjwCtmEeeLDNWa-Yk0bg" memberEnd="_SUvqYCtmEeeLDNWa-Yk0bg _SUwRcCtmEeeLDNWa-Yk0bg">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_SUtOICtmEeeLDNWa-Yk0bg" source="org.eclipse.papyrus">
+          <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_SUt1MCtmEeeLDNWa-Yk0bg" key="nature" value="UML_Nature"/>
+        </eAnnotations>
+        <ownedEnd xmi:type="uml:Property" xmi:id="_SUwRcCtmEeeLDNWa-Yk0bg" name="hwcommonactuator" type="_ymw1sCtlEeeLDNWa-Yk0bg" association="_SUpjwCtmEeeLDNWa-Yk0bg"/>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Enumeration" xmi:id="_cErTYCtmEeeLDNWa-Yk0bg" name="MovementKind">
+        <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_fpuHcCtmEeeLDNWa-Yk0bg" name="Linear"/>
+        <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_guUYACtmEeeLDNWa-Yk0bg" name="Rotational"/>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Association" xmi:id="_iyXTYCtmEeeLDNWa-Yk0bg" memberEnd="_iyYhgCtmEeeLDNWa-Yk0bg _iyYhgStmEeeLDNWa-Yk0bg">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_iyX6cCtmEeeLDNWa-Yk0bg" source="org.eclipse.papyrus">
+          <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_iyX6cStmEeeLDNWa-Yk0bg" key="nature" value="UML_Nature"/>
+        </eAnnotations>
+        <ownedEnd xmi:type="uml:Property" xmi:id="_iyYhgStmEeeLDNWa-Yk0bg" name="hwcommonactuator" type="_ymw1sCtlEeeLDNWa-Yk0bg" association="_iyXTYCtmEeeLDNWa-Yk0bg"/>
+      </packagedElement>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Package" xmi:id="_INCz4CthEeepEtCwqDnj2w" name="Sensor">
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_2-IXMCtoEeeLDNWa-Yk0bg">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_SuQccDL2Ed2HYNz2hI9A2g"/>
+      </elementImport>
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_6o1uYCtoEeeLDNWa-Yk0bg">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_PzqFcBKREdyCSNtdGzMSGg"/>
+      </elementImport>
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_MZiTYCtqEeeZI6rMTYV60w">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Blocks.stereotype_packagedElement_ValueType"/>
+      </elementImport>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_TN_fMCtpEeeLDNWa-Yk0bg" name="HwCommonSensor">
+        <generalization xmi:type="uml:Generalization" xmi:id="_Z-woYCtpEeeLDNWa-Yk0bg">
+          <general xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_SuQccDL2Ed2HYNz2hI9A2g"/>
+        </generalization>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_hxd6QCtqEeeZI6rMTYV60w" name="inputValueType">
+          <type xmi:type="uml:Stereotype" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Blocks.stereotype_packagedElement_ValueType"/>
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_m727gCtqEeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_m8DIwCtqEeeZI6rMTYV60w" value="1"/>
+        </ownedAttribute>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_iXFIwCtqEeeZI6rMTYV60w" name="outputValueType">
+          <type xmi:type="uml:Stereotype" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Blocks.stereotype_packagedElement_ValueType"/>
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_qBU3oCtqEeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_qBa-QCtqEeeZI6rMTYV60w" value="1"/>
+        </ownedAttribute>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_rk4qMCtsEeeZI6rMTYV60w" name="hwcommonsensor" type="_TN_fMCtpEeeLDNWa-Yk0bg" association="_rk3cECtsEeeZI6rMTYV60w"/>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_uxw14CtsEeeZI6rMTYV60w" name="transferFunction">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Behavior"/>
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_21QyQCtsEeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_21VDsCtsEeeZI6rMTYV60w" value="1"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_s94vYCtqEeeZI6rMTYV60w" name="HwRFIDReaderSensor">
+        <generalization xmi:type="uml:Generalization" xmi:id="_5to_gCtqEeeZI6rMTYV60w" general="_TN_fMCtpEeeLDNWa-Yk0bg"/>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_Dxx98CtrEeeZI6rMTYV60w" name="tag" type="_87v6QCtqEeeZI6rMTYV60w" association="_DxvhsCtrEeeZI6rMTYV60w">
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_F_SXUCtrEeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_F_fysCtrEeeZI6rMTYV60w" value="*"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_87v6QCtqEeeZI6rMTYV60w" name="HwTag">
+        <generalization xmi:type="uml:Generalization" xmi:id="_A_AUUCtrEeeZI6rMTYV60w">
+          <general xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_PzqFcBKREdyCSNtdGzMSGg"/>
+        </generalization>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_PPHj8CtrEeeZI6rMTYV60w" name="tageFrequency">
+          <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Real"/>
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_c5DkYCtrEeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_c5GnsCtrEeeZI6rMTYV60w" value="1"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Association" xmi:id="_DxvhsCtrEeeZI6rMTYV60w" memberEnd="_Dxx98CtrEeeZI6rMTYV60w _DxylACtrEeeZI6rMTYV60w">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DxxW4CtrEeeZI6rMTYV60w" source="org.eclipse.papyrus">
+          <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DxxW4StrEeeZI6rMTYV60w" key="nature" value="UML_Nature"/>
+        </eAnnotations>
+        <ownedEnd xmi:type="uml:Property" xmi:id="_DxylACtrEeeZI6rMTYV60w" name="reader" type="_s94vYCtqEeeZI6rMTYV60w" association="_DxvhsCtrEeeZI6rMTYV60w">
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Mp08sCtrEeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_MqVTACtrEeeZI6rMTYV60w" value="*"/>
+        </ownedEnd>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Association" xmi:id="_rk3cECtsEeeZI6rMTYV60w" memberEnd="_rk4qMCtsEeeZI6rMTYV60w _rk4qMStsEeeZI6rMTYV60w">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_rk4DICtsEeeZI6rMTYV60w" source="org.eclipse.papyrus">
+          <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_rk4DIStsEeeZI6rMTYV60w" key="nature" value="UML_Nature"/>
+        </eAnnotations>
+        <ownedEnd xmi:type="uml:Property" xmi:id="_rk4qMStsEeeZI6rMTYV60w" name="hwcommonsensor" type="_TN_fMCtpEeeLDNWa-Yk0bg" association="_rk3cECtsEeeZI6rMTYV60w"/>
+      </packagedElement>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Package" xmi:id="_JQEXICthEeepEtCwqDnj2w" name="Network">
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_VSRWACtnEeeLDNWa-Yk0bg" alias="">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_NrpywBJzEdygQ5HMNSpiZw"/>
+      </elementImport>
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_Zxbo8CtnEeeLDNWa-Yk0bg">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_Q4QQoBJ-EdyT_7R0WVpWAw"/>
+      </elementImport>
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_eIpg0CtnEeeLDNWa-Yk0bg">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_tE4T4BJ9EdyT_7R0WVpWAw"/>
+      </elementImport>
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_ipdZkCtnEeeLDNWa-Yk0bg">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_-ZhPABJ-EdyT_7R0WVpWAw"/>
+      </elementImport>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_OpOwACtoEeeLDNWa-Yk0bg" name="ConnectedDevice">
+        <generalization xmi:type="uml:Generalization" xmi:id="_fyyR8CtoEeeLDNWa-Yk0bg">
+          <general xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_tE4T4BJ9EdyT_7R0WVpWAw"/>
+        </generalization>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_O9fv0CtoEeeLDNWa-Yk0bg" name="Gateway">
+        <generalization xmi:type="uml:Generalization" xmi:id="_YScF8CtoEeeLDNWa-Yk0bg" general="_OpOwACtoEeeLDNWa-Yk0bg"/>
+        <generalization xmi:type="uml:Generalization" xmi:id="_n883ACtoEeeLDNWa-Yk0bg">
+          <general xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_NrpywBJzEdygQ5HMNSpiZw"/>
+        </generalization>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_PQZdsCtoEeeLDNWa-Yk0bg" name="Server">
+        <generalization xmi:type="uml:Generalization" xmi:id="_ZB6bECtoEeeLDNWa-Yk0bg" general="_OpOwACtoEeeLDNWa-Yk0bg"/>
+        <generalization xmi:type="uml:Generalization" xmi:id="_oggQACtoEeeLDNWa-Yk0bg">
+          <general xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_NrpywBJzEdygQ5HMNSpiZw"/>
+        </generalization>
+      </packagedElement>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Package" xmi:id="_Ko050CthEeepEtCwqDnj2w" name="Core">
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_JXnesCtjEeeLDNWa-Yk0bg">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_kzoXABHbEdyWC5IKDhzksw"/>
+      </elementImport>
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_MQnsICtjEeeLDNWa-Yk0bg" alias="">
+        <importedElement xmi:type="uml:Enumeration" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_VxKdYBHbEdyWC5IKDhzksw"/>
+      </elementImport>
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_QaQbACtjEeeLDNWa-Yk0bg">
+        <importedElement xmi:type="uml:Enumeration" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_9MtaUECmEd6UTJZnztgOLw"/>
+      </elementImport>
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_4YKT8CtiEeeLDNWa-Yk0bg" alias="">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_Ljw9kBKREdyCSNtdGzMSGg"/>
+      </elementImport>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_Gb9JYCtkEeeLDNWa-Yk0bg" name="AllocateResource">
+        <ownedRule xmi:type="uml:Constraint" xmi:id="_O699ECtkEeeLDNWa-Yk0bg" name="AllocateResource_C1">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_Wh6gUCtkEeeLDNWa-Yk0bg">
+            <language>OCL</language>
+            <body>self.base_Abstraction.client.oclIsKindOf(DeviceBroker) and self.base_Abstraction.supplier.oclIsKindOf(...)</body>
+          </specification>
+        </ownedRule>
+        <generalization xmi:type="uml:Generalization" xmi:id="_lg6PMCtkEeeLDNWa-Yk0bg">
+          <general xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_kzoXABHbEdyWC5IKDhzksw"/>
+        </generalization>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_eyhroCtkEeeLDNWa-Yk0bg" name="HasService">
+        <ownedRule xmi:type="uml:Constraint" xmi:id="_nSIVMCtkEeeLDNWa-Yk0bg" name="HasDevice_C1">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_00WkECtkEeeLDNWa-Yk0bg">
+            <language>OCL</language>
+            <body>self.base_Association.ownedEnd->one(p | p.oclIsKindOf(PhisicalEntity) and self.base_Association.ownedEnd->size() = 1</body>
+          </specification>
+        </ownedRule>
+        <ownedRule xmi:type="uml:Constraint" xmi:id="_n6FGACtkEeeLDNWa-Yk0bg" name="HasDevice_C2">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_37kMoCtkEeeLDNWa-Yk0bg">
+            <language>OCL</language>
+            <body>self.baseAssociation.memberEnd->one(p | p.oclIskIndOf(HwDevice) and p.aggregationKind = UML::AggregationKind:shared)</body>
+          </specification>
+        </ownedRule>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_kVQ7cCtkEeeLDNWa-Yk0bg" name="base_Association" association="_kVPGQCtkEeeLDNWa-Yk0bg">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Extension" xmi:id="_kVPGQCtkEeeLDNWa-Yk0bg" name="E_HasService_Association1" memberEnd="_kVPtUCtkEeeLDNWa-Yk0bg _kVQ7cCtkEeeLDNWa-Yk0bg">
+        <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_kVPtUCtkEeeLDNWa-Yk0bg" name="extension_HasService" type="_eyhroCtkEeeLDNWa-Yk0bg" aggregation="composite" association="_kVPGQCtkEeeLDNWa-Yk0bg"/>
+      </packagedElement>
+    </packagedElement>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Package" xmi:id="_iuTggCtrEeeZI6rMTYV60w" name="Hybrid">
+    <elementImport xmi:type="uml:ElementImport" xmi:id="_1S3n4CtrEeeZI6rMTYV60w" alias="">
+      <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_LDER0BJxEdygQ5HMNSpiZw"/>
+    </elementImport>
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="_PEDG8CtsEeeZI6rMTYV60w" name="PhysicalEntity">
+      <generalization xmi:type="uml:Generalization" xmi:id="_T-b9UCtsEeeZI6rMTYV60w">
+        <general xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_LDER0BJxEdygQ5HMNSpiZw"/>
+      </generalization>
+    </packagedElement>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Package" xmi:id="_WWmukCtsEeeZI6rMTYV60w" name="Software">
+    <packagedElement xmi:type="uml:Package" xmi:id="_VGlbsCttEeeZI6rMTYV60w" name="Artefact">
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_mZu-gCttEeeZI6rMTYV60w" name="PropertyAccess">
+        <ownedRule xmi:type="uml:Constraint" xmi:id="_-vUpUCttEeeZI6rMTYV60w" name="PropertyAccess_C1">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_QbFgcCtuEeeZI6rMTYV60w">
+            <language>OCL</language>
+            <body>self.accessedProperty.type.oclIsKindOf(VirtualEntity)</body>
+          </specification>
+        </ownedRule>
+        <ownedRule xmi:type="uml:Constraint" xmi:id="__PuAoCttEeeZI6rMTYV60w" name="PropertyAccess_C2">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_UKP50CtuEeeZI6rMTYV60w">
+            <language>OCL</language>
+            <body>self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(VirtualEntity)) and self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(PhysicalEntity))</body>
+          </specification>
+        </ownedRule>
+        <ownedRule xmi:type="uml:Constraint" xmi:id="__1PvkCttEeeZI6rMTYV60w" name="propertyAccess_C3">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_XcyooCtuEeeZI6rMTYV60w">
+            <language>OCL</language>
+            <body>self.base_Association.navigableOwnedEnd->one(p | p.type.oclIsKindOf(PhysicalEntity))</body>
+          </specification>
+        </ownedRule>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_sIIEsSttEeeZI6rMTYV60w" name="base_Association" association="_sIFocCttEeeZI6rMTYV60w">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+        </ownedAttribute>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_ujD2ECttEeeZI6rMTYV60w" name="accessedProperty">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_96J74CttEeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_96ONUCttEeeZI6rMTYV60w" value="1"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Extension" xmi:id="_sIFocCttEeeZI6rMTYV60w" name="E_PropertyAccess_Association1" memberEnd="_sIIEsCttEeeZI6rMTYV60w _sIIEsSttEeeZI6rMTYV60w">
+        <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_sIIEsCttEeeZI6rMTYV60w" name="extension_PropertyAccess" type="_mZu-gCttEeeZI6rMTYV60w" aggregation="composite" association="_sIFocCttEeeZI6rMTYV60w"/>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_gpMGwCtuEeeZI6rMTYV60w" name="DigitalArtefact">
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_l4v74StuEeeZI6rMTYV60w" name="base_Class" association="_l4utwCtuEeeZI6rMTYV60w">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Extension" xmi:id="_l4utwCtuEeeZI6rMTYV60w" name="E_DigitalArtefact_Class1" memberEnd="_l4v74CtuEeeZI6rMTYV60w _l4v74StuEeeZI6rMTYV60w">
+        <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_l4v74CtuEeeZI6rMTYV60w" name="extension_DigitalArtefact" type="_gpMGwCtuEeeZI6rMTYV60w" aggregation="composite" association="_l4utwCtuEeeZI6rMTYV60w"/>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_mxPqICtuEeeZI6rMTYV60w" name="VirtualEntity">
+        <generalization xmi:type="uml:Generalization" xmi:id="_vgstkCtuEeeZI6rMTYV60w" general="_gpMGwCtuEeeZI6rMTYV60w"/>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_y3iGgCtuEeeZI6rMTYV60w" name="phisicalEntitySpecification">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#InstanceSpecification"/>
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_D4ZmgCtvEeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_D4cp0CtvEeeZI6rMTYV60w" value="1"/>
+        </ownedAttribute>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_MsOzoitvEeeZI6rMTYV60w" name="physicalEntity" type="_PEDG8CtsEeeZI6rMTYV60w" association="_MsOMkCtvEeeZI6rMTYV60w">
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_P7m5sCtvEeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_P7zG8CtvEeeZI6rMTYV60w" value="1"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Association" xmi:id="_MsOMkCtvEeeZI6rMTYV60w" memberEnd="_MsOzoitvEeeZI6rMTYV60w _MsOzoytvEeeZI6rMTYV60w">
+        <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MsOzoCtvEeeZI6rMTYV60w" source="org.eclipse.papyrus">
+          <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_MsOzoStvEeeZI6rMTYV60w" key="nature" value="UML_Nature"/>
+        </eAnnotations>
+        <ownedEnd xmi:type="uml:Property" xmi:id="_MsOzoytvEeeZI6rMTYV60w" name="virtualentity" type="_mxPqICtuEeeZI6rMTYV60w" association="_MsOMkCtvEeeZI6rMTYV60w">
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_SYl5gCtvEeeZI6rMTYV60w" value="1"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_SY73wCtvEeeZI6rMTYV60w" value="*"/>
+        </ownedEnd>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_cUpS8CtvEeeZI6rMTYV60w" name="ProvideService">
+        <ownedRule xmi:type="uml:Constraint" xmi:id="_-oWzwCtvEeeZI6rMTYV60w" name="ProvideService_C2">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_Qpp2ACtwEeeZI6rMTYV60w">
+            <language>OCL</language>
+            <body>self.base_Association.memberEnd->one(p | p.type.oclIsKindOf(Service) and p.owningAssociation = null and and p.aggregationKind = UML::AggregationKind::shared)</body>
+          </specification>
+        </ownedRule>
+        <ownedRule xmi:type="uml:Constraint" xmi:id="__S_sMCtvEeeZI6rMTYV60w" name="ProvideService_C1">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_NOFuECtwEeeZI6rMTYV60w">
+            <language>OCL</language>
+            <body>self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(VirtualEntity))</body>
+          </specification>
+        </ownedRule>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_odJ84CtvEeeZI6rMTYV60w" name="base_Association" association="_odIuwCtvEeeZI6rMTYV60w">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_emjrMCtvEeeZI6rMTYV60w" name="ProvideResource">
+        <ownedRule xmi:type="uml:Constraint" xmi:id="_slVTMCtvEeeZI6rMTYV60w" name="ProvideResource_C1">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_3ukRcCtvEeeZI6rMTYV60w">
+            <language>OCL</language>
+            <body>self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(ServiceDescription))</body>
+          </specification>
+        </ownedRule>
+        <ownedRule xmi:type="uml:Constraint" xmi:id="_tlTicCtvEeeZI6rMTYV60w" name="ProvideResource_C2">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_9bvPoCtvEeeZI6rMTYV60w">
+            <language>OCL</language>
+            <body>self.base_Association.memberEnd->one(p | p.type.oclIsKindOf(ResourceDescription) and p.owningAssociation = null and and p.aggregationKind = UML::AggregationKind::shared)</body>
+          </specification>
+        </ownedRule>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_pGmigCtvEeeZI6rMTYV60w" name="base_Association" association="_pGlUYCtvEeeZI6rMTYV60w">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Association"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Extension" xmi:id="_odIuwCtvEeeZI6rMTYV60w" name="E_ProvideService_Association1" memberEnd="_odJV0CtvEeeZI6rMTYV60w _odJ84CtvEeeZI6rMTYV60w">
+        <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_odJV0CtvEeeZI6rMTYV60w" name="extension_ProvideService" type="_cUpS8CtvEeeZI6rMTYV60w" aggregation="composite" association="_odIuwCtvEeeZI6rMTYV60w"/>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Extension" xmi:id="_pGlUYCtvEeeZI6rMTYV60w" name="E_ProvideResource_Association1" memberEnd="_pGl7cCtvEeeZI6rMTYV60w _pGmigCtvEeeZI6rMTYV60w">
+        <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_pGl7cCtvEeeZI6rMTYV60w" name="extension_ProvideResource" type="_emjrMCtvEeeZI6rMTYV60w" aggregation="composite" association="_pGlUYCtvEeeZI6rMTYV60w"/>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_WG8lICtwEeeZI6rMTYV60w" name="ServiceDescription">
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_gnmgcStwEeeZI6rMTYV60w" name="base_Interface" association="_gnl5YCtwEeeZI6rMTYV60w">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Interface"/>
+        </ownedAttribute>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_jcr3MCtwEeeZI6rMTYV60w" name="resourceGetSet">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Operation"/>
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_pJH1kCtwEeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_pJMHACtwEeeZI6rMTYV60w" value="*"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Extension" xmi:id="_gnl5YCtwEeeZI6rMTYV60w" name="E_ServiceDescription_Interface1" memberEnd="_gnmgcCtwEeeZI6rMTYV60w _gnmgcStwEeeZI6rMTYV60w">
+        <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_gnmgcCtwEeeZI6rMTYV60w" name="extension_ServiceDescription" type="_WG8lICtwEeeZI6rMTYV60w" aggregation="composite" association="_gnl5YCtwEeeZI6rMTYV60w"/>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_ENBgwCtxEeeZI6rMTYV60w" name="Service">
+        <ownedRule xmi:type="uml:Constraint" xmi:id="_K07B0CtxEeeZI6rMTYV60w" name="Service_C1">
+          <specification xmi:type="uml:OpaqueExpression" xmi:id="_TlLWgCtxEeeZI6rMTYV60w">
+            <language>OCL</language>
+            <body>not self.base_Class.classifierBehavior.oclIsUndefined() and self.base_Class.isActive = true</body>
+          </specification>
+        </ownedRule>
+        <generalization xmi:type="uml:Generalization" xmi:id="_H-SL4CtxEeeZI6rMTYV60w" general="_gpMGwCtuEeeZI6rMTYV60w"/>
+      </packagedElement>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Package" xmi:id="_aILwgCtxEeeZI6rMTYV60w" name="Core">
+      <packagedElement xmi:type="uml:Package" xmi:id="_hrtzYCtxEeeZI6rMTYV60w" name="Structure">
+        <packagedElement xmi:type="uml:Stereotype" xmi:id="_rm64QCtxEeeZI6rMTYV60w" name="MetaValueSpecification">
+          <ownedAttribute xmi:type="uml:Property" xmi:id="_1JhP4CtxEeeZI6rMTYV60w" name="base_ValueSpecification" association="_1JgBwCtxEeeZI6rMTYV60w">
+            <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#ValueSpecification"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:type="uml:Property" xmi:id="_2HkMgCtxEeeZI6rMTYV60w" name="type" isDerived="true">
+            <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Type"/>
+            <lowerValue xmi:type="uml:LiteralInteger" xmi:id="__PdlICtxEeeZI6rMTYV60w"/>
+            <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="__PidoCtxEeeZI6rMTYV60w" value="1"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:type="uml:Property" xmi:id="_Bbpv4CtyEeeZI6rMTYV60w" name="description">
+            <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+            <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_EVH3YCtyEeeZI6rMTYV60w"/>
+            <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_EVMI0CtyEeeZI6rMTYV60w" value="1"/>
+          </ownedAttribute>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Extension" xmi:id="_1JgBwCtxEeeZI6rMTYV60w" name="E_MetaValueSpecification_ValueSpecification1" memberEnd="_1Jgo0CtxEeeZI6rMTYV60w _1JhP4CtxEeeZI6rMTYV60w">
+          <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_1Jgo0CtxEeeZI6rMTYV60w" name="extension_MetaValueSpecification" type="_rm64QCtxEeeZI6rMTYV60w" aggregation="composite" association="_1JgBwCtxEeeZI6rMTYV60w"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Stereotype" xmi:id="_Fw88MCtyEeeZI6rMTYV60w" name="DetailedValueSpecification">
+          <ownedAttribute xmi:type="uml:Property" xmi:id="_JO7e8StyEeeZI6rMTYV60w" name="base_ValueSpecification" association="_JO6Q0CtyEeeZI6rMTYV60w">
+            <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#ValueSpecification"/>
+          </ownedAttribute>
+          <ownedAttribute xmi:type="uml:Property" xmi:id="_OMkdoityEeeZI6rMTYV60w" name="metaSpecification" type="_rm64QCtxEeeZI6rMTYV60w" aggregation="composite" association="_OMj2kCtyEeeZI6rMTYV60w">
+            <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_cWMqwCtyEeeZI6rMTYV60w"/>
+            <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_cWha4CtyEeeZI6rMTYV60w" value="*"/>
+          </ownedAttribute>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Extension" xmi:id="_JO6Q0CtyEeeZI6rMTYV60w" name="E_DetailedValueSpecification_ValueSpecification1" memberEnd="_JO7e8CtyEeeZI6rMTYV60w _JO7e8StyEeeZI6rMTYV60w">
+          <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_JO7e8CtyEeeZI6rMTYV60w" name="extension_DetailedValueSpecification" type="_Fw88MCtyEeeZI6rMTYV60w" aggregation="composite" association="_JO6Q0CtyEeeZI6rMTYV60w"/>
+        </packagedElement>
+        <packagedElement xmi:type="uml:Association" xmi:id="_OMj2kCtyEeeZI6rMTYV60w" memberEnd="_OMkdoityEeeZI6rMTYV60w _OMlEsCtyEeeZI6rMTYV60w" navigableOwnedEnd="_OMlEsCtyEeeZI6rMTYV60w">
+          <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_OMkdoCtyEeeZI6rMTYV60w" source="org.eclipse.papyrus">
+            <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_OMkdoStyEeeZI6rMTYV60w" key="nature" value="UML_Nature"/>
+          </eAnnotations>
+          <ownedEnd xmi:type="uml:Property" xmi:id="_OMlEsCtyEeeZI6rMTYV60w" name="preciseSpecification" type="_Fw88MCtyEeeZI6rMTYV60w" association="_OMj2kCtyEeeZI6rMTYV60w"/>
+        </packagedElement>
+      </packagedElement>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Package" xmi:id="_skdpICtyEeeZI6rMTYV60w" name="Resource">
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_13Nm4CtyEeeZI6rMTYV60w" alias="">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_IXI-cBJuEdyNBsnA2HLmgg"/>
+      </elementImport>
+      <elementImport xmi:type="uml:ElementImport" xmi:id="_-xvR4CtyEeeZI6rMTYV60w">
+        <importedElement xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_ovMq4BJuEdyNBsnA2HLmgg"/>
+      </elementImport>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_qMEY8CtzEeeZI6rMTYV60w" name="NetworkResource">
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_uxr5MStzEeeZI6rMTYV60w" name="base_Class" association="_uxrSICtzEeeZI6rMTYV60w">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Extension" xmi:id="_uxrSICtzEeeZI6rMTYV60w" name="E_NetworkResource_Class1" memberEnd="_uxr5MCtzEeeZI6rMTYV60w _uxr5MStzEeeZI6rMTYV60w">
+        <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_uxr5MCtzEeeZI6rMTYV60w" name="extension_NetworkResource" type="_qMEY8CtzEeeZI6rMTYV60w" aggregation="composite" association="_uxrSICtzEeeZI6rMTYV60w"/>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Stereotype" xmi:id="_veD3ACtzEeeZI6rMTYV60w" name="OnDeviceResource">
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_2VELEStzEeeZI6rMTYV60w" name="base_Class" association="_2VDkACtzEeeZI6rMTYV60w">
+          <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+        </ownedAttribute>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_3d40UCtzEeeZI6rMTYV60w" name="deviceBroker">
+          <type xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_IXI-cBJuEdyNBsnA2HLmgg"/>
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_CEnicCt0EeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_CEzIoCt0EeeZI6rMTYV60w" value="1"/>
+        </ownedAttribute>
+        <ownedAttribute xmi:type="uml:Property" xmi:id="_4KpMoCtzEeeZI6rMTYV60w" name="memoryBroker">
+          <type xmi:type="uml:Stereotype" href="pathmap://Papyrus_PROFILES/MARTE.profile.uml#_ovMq4BJuEdyNBsnA2HLmgg"/>
+          <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_DyZS4Ct0EeeZI6rMTYV60w"/>
+          <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_DyeLYCt0EeeZI6rMTYV60w" value="1"/>
+        </ownedAttribute>
+      </packagedElement>
+      <packagedElement xmi:type="uml:Extension" xmi:id="_2VDkACtzEeeZI6rMTYV60w" name="E_OnDeviceResource_Class1" memberEnd="_2VELECtzEeeZI6rMTYV60w _2VELEStzEeeZI6rMTYV60w">
+        <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_2VELECtzEeeZI6rMTYV60w" name="extension_OnDeviceResource" type="_veD3ACtzEeeZI6rMTYV60w" aggregation="composite" association="_2VDkACtzEeeZI6rMTYV60w"/>
+      </packagedElement>
+    </packagedElement>
+  </packagedElement>
+</uml:Profile>
diff --git a/org.eclipse.papyrus.iotml.profile/model/IoTML.ecore b/org.eclipse.papyrus.iotml.profile/model/IoTML.ecore
new file mode 100644
index 0000000..61bbcac
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/model/IoTML.ecore
@@ -0,0 +1,352 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="IoTML" nsURI="http:///IoTML.ecore" nsPrefix="IoTML">
+  <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML">
+    <details key="originalName" value="IoT-ML"/>
+  </eAnnotations>
+  <eSubpackages name="Animate" nsURI="http:///IoTML/Animate.ecore" nsPrefix="IoTML.Animate">
+    <eClassifiers xsi:type="ecore:EClass" name="HumanUser">
+      <eStructuralFeatures xsi:type="ecore:EReference" name="base_Actor" ordered="false"
+          lowerBound="1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Actor"/>
+    </eClassifiers>
+  </eSubpackages>
+  <eSubpackages name="Hardware" nsURI="http:///IoTML/Hardware.ecore" nsPrefix="IoTML.Hardware">
+    <eSubpackages name="Actuator" nsURI="http:///IoTML/Hardware/Actuator.ecore" nsPrefix="IoTML.Hardware.Actuator">
+      <eClassifiers xsi:type="ecore:EClass" name="HwCommonActuator" eSuperTypes="../org.eclipse.papyrus.marte.static.profile/resources/MARTE.ecore#//MARTE_DesignModel/HRM/HwLogical/HwDevice/HWActuator">
+        <eStructuralFeatures xsi:type="ecore:EAttribute" name="energyKind" ordered="false"
+            eType="#//Hardware/Actuator/EnergyKind"/>
+        <eStructuralFeatures xsi:type="ecore:EAttribute" name="movementKind" ordered="false"
+            eType="#//Hardware/Actuator/MovementKind"/>
+        <eStructuralFeatures xsi:type="ecore:EAttribute" name="isPowered" ordered="false"
+            lowerBound="1" eType="ecore:EDataType ../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EEnum" name="EnergyKind">
+        <eLiterals name="Electrical"/>
+        <eLiterals name="Mechanical" value="1"/>
+        <eLiterals name="Pneumatical" value="2"/>
+        <eLiterals name="Hydraulic" value="3"/>
+        <eLiterals name="None" value="4"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EEnum" name="MovementKind">
+        <eLiterals name="Linear"/>
+        <eLiterals name="Rotational" value="1"/>
+      </eClassifiers>
+    </eSubpackages>
+    <eSubpackages name="Sensor" nsURI="http:///IoTML/Hardware/Sensor.ecore" nsPrefix="IoTML.Hardware.Sensor">
+      <eClassifiers xsi:type="ecore:EClass" name="HwCommonSensor" eSuperTypes="../org.eclipse.papyrus.marte.static.profile/resources/MARTE.ecore#//MARTE_DesignModel/HRM/HwLogical/HwDevice/HWSensor">
+        <eStructuralFeatures xsi:type="ecore:EReference" name="inputValueType" ordered="false"
+            eType="ecore:EClass ../org.eclipse.papyrus.sysml14/resources/profile/sysml.ecore#//blocks/ValueType"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="outputValueType" ordered="false"
+            eType="ecore:EClass ../org.eclipse.papyrus.sysml14/resources/profile/sysml.ecore#//blocks/ValueType"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="hwcommonsensor" ordered="false"
+            lowerBound="1" eType="#//Hardware/Sensor/HwCommonSensor"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="transferFunction" ordered="false"
+            eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Behavior"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EClass" name="HwRFIDReaderSensor" eSuperTypes="#//Hardware/Sensor/HwCommonSensor">
+        <eStructuralFeatures xsi:type="ecore:EReference" name="tag" ordered="false"
+            upperBound="-1" eType="#//Hardware/Sensor/HwTag"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EClass" name="HwTag" eSuperTypes="../org.eclipse.papyrus.marte.static.profile/resources/MARTE.ecore#//MARTE_DesignModel/HRM/HwLogical/HwDevice/HwI_O">
+        <eStructuralFeatures xsi:type="ecore:EAttribute" name="tageFrequency" ordered="false"
+            eType="ecore:EDataType ../org.eclipse.uml2.types/model/Types.ecore#//Real"/>
+      </eClassifiers>
+    </eSubpackages>
+    <eSubpackages name="Network" nsURI="http:///IoTML/Hardware/Network.ecore" nsPrefix="IoTML.Hardware.Network">
+      <eClassifiers xsi:type="ecore:EClass" name="ConnectedDevice" eSuperTypes="../org.eclipse.papyrus.marte.static.profile/resources/MARTE.ecore#//MARTE_DesignModel/HRM/HwLogical/HwCommunication/HwCommunicationResource"/>
+      <eClassifiers xsi:type="ecore:EClass" name="Gateway" eSuperTypes="../org.eclipse.papyrus.marte.static.profile/resources/MARTE.ecore#//MARTE_DesignModel/HRM/HwLogical/HwComputing/HwComputingResource #//Hardware/Network/ConnectedDevice"/>
+      <eClassifiers xsi:type="ecore:EClass" name="Server" eSuperTypes="../org.eclipse.papyrus.marte.static.profile/resources/MARTE.ecore#//MARTE_DesignModel/HRM/HwLogical/HwComputing/HwComputingResource #//Hardware/Network/ConnectedDevice"/>
+    </eSubpackages>
+    <eSubpackages name="Core" nsURI="http:///IoTML/Hardware/Core.ecore" nsPrefix="IoTML.Hardware.Core">
+      <eClassifiers xsi:type="ecore:EClass" name="AllocateResource" eSuperTypes="../org.eclipse.papyrus.marte.static.profile/resources/MARTE.ecore#//MARTE_Foundations/Alloc/Allocate">
+        <eOperations name="AllocateResource_C1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="self.base_Abstraction.client.oclIsKindOf(DeviceBroker) and self.base_Abstraction.supplier.oclIsKindOf(...)"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EClass" name="HasService">
+        <eOperations name="HasDevice_C1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="self.base_Association.ownedEnd->one(p | p.oclIsKindOf(PhisicalEntity) and self.base_Association.ownedEnd->size() = 1"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+        <eOperations name="HasDevice_C2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="self.baseAssociation.memberEnd->one(p | p.oclIskIndOf(HwDevice) and p.aggregationKind = UML::AggregationKind:shared)"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="base_Association" ordered="false"
+            lowerBound="1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Association"/>
+      </eClassifiers>
+    </eSubpackages>
+  </eSubpackages>
+  <eSubpackages name="Hybrid" nsURI="http:///IoTML/Hybrid.ecore" nsPrefix="IoTML.Hybrid">
+    <eClassifiers xsi:type="ecore:EClass" name="PhysicalEntity" eSuperTypes="../org.eclipse.papyrus.marte.static.profile/resources/MARTE.ecore#//MARTE_DesignModel/HRM/HwGeneral/HwResource"/>
+  </eSubpackages>
+  <eSubpackages name="Software" nsURI="http:///IoTML/Software.ecore" nsPrefix="IoTML.Software">
+    <eSubpackages name="Artefact" nsURI="http:///IoTML/Software/Artefact.ecore" nsPrefix="IoTML.Software.Artefact">
+      <eClassifiers xsi:type="ecore:EClass" name="PropertyAccess">
+        <eOperations name="PropertyAccess_C1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="self.accessedProperty.type.oclIsKindOf(VirtualEntity)"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+        <eOperations name="PropertyAccess_C2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(VirtualEntity)) and self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(PhysicalEntity))"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+        <eOperations name="propertyAccess_C3" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="self.base_Association.navigableOwnedEnd->one(p | p.type.oclIsKindOf(PhysicalEntity))"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="base_Association" ordered="false"
+            lowerBound="1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Association"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="accessedProperty" ordered="false"
+            eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Property"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EClass" name="DigitalArtefact">
+        <eStructuralFeatures xsi:type="ecore:EReference" name="base_Class" ordered="false"
+            lowerBound="1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Class"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EClass" name="VirtualEntity" eSuperTypes="#//Software/Artefact/DigitalArtefact">
+        <eStructuralFeatures xsi:type="ecore:EReference" name="phisicalEntitySpecification"
+            ordered="false" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//InstanceSpecification"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="physicalEntity" ordered="false"
+            eType="#//Hybrid/PhysicalEntity"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EClass" name="ProvideService">
+        <eOperations name="ProvideService_C2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="self.base_Association.memberEnd->one(p | p.type.oclIsKindOf(Service) and p.owningAssociation = null and and p.aggregationKind = UML::AggregationKind::shared)"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+        <eOperations name="ProvideService_C1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(VirtualEntity))"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="base_Association" ordered="false"
+            lowerBound="1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Association"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EClass" name="ProvideResource">
+        <eOperations name="ProvideResource_C1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(ServiceDescription))"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+        <eOperations name="ProvideResource_C2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="self.base_Association.memberEnd->one(p | p.type.oclIsKindOf(ResourceDescription) and p.owningAssociation = null and and p.aggregationKind = UML::AggregationKind::shared)"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="base_Association" ordered="false"
+            lowerBound="1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Association"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EClass" name="ServiceDescription">
+        <eStructuralFeatures xsi:type="ecore:EReference" name="base_Interface" ordered="false"
+            lowerBound="1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Interface"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="resourceGetSet" ordered="false"
+            upperBound="-1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Operation"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EClass" name="Service" eSuperTypes="#//Software/Artefact/DigitalArtefact">
+        <eOperations name="Service_C1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
+          <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+            <details key="documentation" value="not self.base_Class.classifierBehavior.oclIsUndefined() and self.base_Class.isActive = true"/>
+          </eAnnotations>
+          <eParameters name="diagnostics" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The chain of diagnostics to which problems are to be appended."/>
+            </eAnnotations>
+          </eParameters>
+          <eParameters name="context">
+            <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+              <details key="documentation" value="The cache of context-specific information."/>
+            </eAnnotations>
+            <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap">
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+              <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+            </eGenericType>
+          </eParameters>
+        </eOperations>
+      </eClassifiers>
+    </eSubpackages>
+    <eSubpackages name="Core" nsURI="http:///IoTML/Software/Core.ecore" nsPrefix="IoTML.Software.Core">
+      <eSubpackages name="Structure" nsURI="http:///IoTML/Software/Core/Structure.ecore"
+          nsPrefix="IoTML.Software.Core.Structure">
+        <eClassifiers xsi:type="ecore:EClass" name="MetaValueSpecification">
+          <eStructuralFeatures xsi:type="ecore:EReference" name="base_ValueSpecification"
+              ordered="false" lowerBound="1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//ValueSpecification"/>
+          <eStructuralFeatures xsi:type="ecore:EReference" name="type" ordered="false"
+              eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Type"
+              volatile="true" transient="true" derived="true"/>
+          <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+              eType="ecore:EDataType ../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+        </eClassifiers>
+        <eClassifiers xsi:type="ecore:EClass" name="DetailedValueSpecification">
+          <eStructuralFeatures xsi:type="ecore:EReference" name="base_ValueSpecification"
+              ordered="false" lowerBound="1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//ValueSpecification"/>
+          <eStructuralFeatures xsi:type="ecore:EReference" name="metaSpecification"
+              ordered="false" upperBound="-1" eType="#//Software/Core/Structure/MetaValueSpecification"
+              containment="true"/>
+        </eClassifiers>
+      </eSubpackages>
+    </eSubpackages>
+    <eSubpackages name="Resource" nsURI="http:///IoTML/Software/Resource.ecore" nsPrefix="IoTML.Software.Resource">
+      <eClassifiers xsi:type="ecore:EClass" name="NetworkResource">
+        <eStructuralFeatures xsi:type="ecore:EReference" name="base_Class" ordered="false"
+            lowerBound="1" eType="ecore:EClass ../org.eclipse.uml2.uml/model/UML.ecore#//Class"/>
+      </eClassifiers>
+      <eClassifiers xsi:type="ecore:EClass" name="OnDeviceResource">
+        <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:EReference" name="deviceBroker" ordered="false"
+            eType="ecore:EClass ../org.eclipse.papyrus.marte.static.profile/resources/MARTE.ecore#//MARTE_DesignModel/SRM/SW_Brokering/DeviceBroker"/>
+        <eStructuralFeatures xsi:type="ecore:EReference" name="memoryBroker" ordered="false"
+            eType="ecore:EClass ../org.eclipse.papyrus.marte.static.profile/resources/MARTE.ecore#//MARTE_DesignModel/SRM/SW_Brokering/MemoryBroker"/>
+      </eClassifiers>
+    </eSubpackages>
+  </eSubpackages>
+</ecore:EPackage>
diff --git a/org.eclipse.papyrus.iotml.profile/model/model-style.css b/org.eclipse.papyrus.iotml.profile/model/model-style.css
new file mode 100644
index 0000000..d267c53
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/model/model-style.css
@@ -0,0 +1,87 @@
+/* Apply to all elements */
+*{
+	fillColor: white;
+	fontName: Arial;
+	elementIcon:false;
+	gradient:none;
+	fontHeight: 7;
+}
+
+/* Structure related style */
+
+Model {
+	bold: true;
+	fillColor: white;
+	gradient: white;
+}
+
+Package{
+	bold: true;
+	qualifiedNameDepth:full;
+}
+
+Class{
+	bold: true;
+}
+
+Class > Compartment[kind="attributes"] {
+    visible:true;
+}
+
+Class > Compartment[kind="nestedclassifiers"] {
+    visible:false;
+}
+
+[appliedStereotypes~="Metaclass"]{
+	bold: true;
+	fillColor: lightgrey;
+}
+
+Property{
+	bold: false;
+	maskLabel:name,
+	type,
+	multiplicity,
+	visibility,
+	defaultValue;
+}
+
+Comment{
+	fillColor: beige;
+}
+
+Operation{
+	maskLabel: name,
+	return multiplicity,
+	return type,
+	parametersdirection,
+	parametersname,
+	parametersmultiplicity,
+	parameterstype,
+	visibility;
+	fontName: Arial;
+}
+
+Constraint{
+	fillColor: beige;
+}
+
+Extension, Association, Generalization, Dependency, Connector, Abstraction, PackageImport, ElementImport, PackageMerge, Usage{
+	routing: Rectilinear;
+}
+
+Abstraction{
+	lineColor: #9bc7cc;
+}
+
+DataType{
+	bold: true;
+}
+
+Enumeration{
+	bold: true;
+}
+
+EnumerationLiteral{
+	bold: false;
+}
diff --git a/org.eclipse.papyrus.iotml.profile/plugin.properties b/org.eclipse.papyrus.iotml.profile/plugin.properties
new file mode 100644
index 0000000..59f89b7
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = IoT-ML Model
+providerName = www.example.org
diff --git a/org.eclipse.papyrus.iotml.profile/plugin.xml b/org.eclipse.papyrus.iotml.profile/plugin.xml
new file mode 100644
index 0000000..33b293c
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/plugin.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated IoT-ML.profile -->
+      <package
+            uri="http:///IoTML/Animate.ecore"
+            class="IoTML.Animate.AnimatePackage"
+            genModel="model/IoT-ML.profile.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated IoT-ML.profile -->
+      <package
+            uri="http:///IoTML/Hardware/Actuator.ecore"
+            class="IoTML.Hardware.Actuator.ActuatorPackage"
+            genModel="model/IoT-ML.profile.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated IoT-ML.profile -->
+      <package
+            uri="http:///IoTML/Hardware/Sensor.ecore"
+            class="IoTML.Hardware.Sensor.SensorPackage"
+            genModel="model/IoT-ML.profile.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated IoT-ML.profile -->
+      <package
+            uri="http:///IoTML/Hardware/Network.ecore"
+            class="IoTML.Hardware.Network.NetworkPackage"
+            genModel="model/IoT-ML.profile.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated IoT-ML.profile -->
+      <package
+            uri="http:///IoTML/Hardware/Core.ecore"
+            class="IoTML.Hardware.Core.CorePackage"
+            genModel="model/IoT-ML.profile.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated IoT-ML.profile -->
+      <package
+            uri="http:///IoTML/Hybrid.ecore"
+            class="IoTML.Hybrid.HybridPackage"
+            genModel="model/IoT-ML.profile.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated IoT-ML.profile -->
+      <package
+            uri="http:///IoTML/Software/Artefact.ecore"
+            class="IoTML.Software.Artefact.ArtefactPackage"
+            genModel="model/IoT-ML.profile.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated IoT-ML.profile -->
+      <package
+            uri="http:///IoTML/Software/Core/Structure.ecore"
+            class="IoTML.Software.Core.Structure.StructurePackage"
+            genModel="model/IoT-ML.profile.genmodel"/>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated IoT-ML.profile -->
+      <package
+            uri="http:///IoTML/Software/Resource.ecore"
+            class="IoTML.Software.Resource.ResourcePackage"
+            genModel="model/IoT-ML.profile.genmodel"/>
+   </extension>
+   <extension
+         point="org.eclipse.emf.ecore.uri_mapping">
+      <mapping
+            source="pathmap://IOTML_PROFILE/"
+            target="platform:/plugin/org.eclipse.papyrus.iotml.profile/model/">
+      </mapping>
+   </extension>
+   <extension
+         point="org.eclipse.papyrus.uml.extensionpoints.UMLProfile">
+      <profile
+            description="UML pofile for the IoT"
+            name="IoTML"
+            path="pathmap://IOTML_PROFILE/IoT-ML.profile.uml"
+            provider="Eclipse Modeling Project">
+      </profile>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/AnimateFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/AnimateFactory.java
new file mode 100644
index 0000000..687b86d
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/AnimateFactory.java
@@ -0,0 +1,42 @@
+/**
+ */
+package IoTML.Animate;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Animate.AnimatePackage
+ * @generated
+ */
+public interface AnimateFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	AnimateFactory eINSTANCE = IoTML.Animate.impl.AnimateFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Human User</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Human User</em>'.
+	 * @generated
+	 */
+	HumanUser createHumanUser();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	AnimatePackage getAnimatePackage();
+
+} //AnimateFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/AnimatePackage.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/AnimatePackage.java
new file mode 100644
index 0000000..3b6c9b2
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/AnimatePackage.java
@@ -0,0 +1,149 @@
+/**
+ */
+package IoTML.Animate;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see IoTML.Animate.AnimateFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface AnimatePackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "Animate";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///IoTML/Animate.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "IoTML.Animate";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	AnimatePackage eINSTANCE = IoTML.Animate.impl.AnimatePackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link IoTML.Animate.impl.HumanUserImpl <em>Human User</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Animate.impl.HumanUserImpl
+	 * @see IoTML.Animate.impl.AnimatePackageImpl#getHumanUser()
+	 * @generated
+	 */
+	int HUMAN_USER = 0;
+
+	/**
+	 * The feature id for the '<em><b>Base Actor</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HUMAN_USER__BASE_ACTOR = 0;
+
+	/**
+	 * The number of structural features of the '<em>Human User</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HUMAN_USER_FEATURE_COUNT = 1;
+
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Animate.HumanUser <em>Human User</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Human User</em>'.
+	 * @see IoTML.Animate.HumanUser
+	 * @generated
+	 */
+	EClass getHumanUser();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Animate.HumanUser#getBase_Actor <em>Base Actor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Actor</em>'.
+	 * @see IoTML.Animate.HumanUser#getBase_Actor()
+	 * @see #getHumanUser()
+	 * @generated
+	 */
+	EReference getHumanUser_Base_Actor();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	AnimateFactory getAnimateFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link IoTML.Animate.impl.HumanUserImpl <em>Human User</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Animate.impl.HumanUserImpl
+		 * @see IoTML.Animate.impl.AnimatePackageImpl#getHumanUser()
+		 * @generated
+		 */
+		EClass HUMAN_USER = eINSTANCE.getHumanUser();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Actor</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference HUMAN_USER__BASE_ACTOR = eINSTANCE.getHumanUser_Base_Actor();
+
+	}
+
+} //AnimatePackage
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/HumanUser.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/HumanUser.java
new file mode 100644
index 0000000..e26526b
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/HumanUser.java
@@ -0,0 +1,52 @@
+/**
+ */
+package IoTML.Animate;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Actor;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Human User</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Animate.HumanUser#getBase_Actor <em>Base Actor</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Animate.AnimatePackage#getHumanUser()
+ * @model
+ * @generated
+ */
+public interface HumanUser extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Actor</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Actor</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Actor</em>' reference.
+	 * @see #setBase_Actor(Actor)
+	 * @see IoTML.Animate.AnimatePackage#getHumanUser_Base_Actor()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	Actor getBase_Actor();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Animate.HumanUser#getBase_Actor <em>Base Actor</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Actor</em>' reference.
+	 * @see #getBase_Actor()
+	 * @generated
+	 */
+	void setBase_Actor(Actor value);
+
+} // HumanUser
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/impl/AnimateFactoryImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/impl/AnimateFactoryImpl.java
new file mode 100644
index 0000000..516c5a9
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/impl/AnimateFactoryImpl.java
@@ -0,0 +1,93 @@
+/**
+ */
+package IoTML.Animate.impl;
+
+import IoTML.Animate.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AnimateFactoryImpl extends EFactoryImpl implements AnimateFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static AnimateFactory init() {
+		try {
+			AnimateFactory theAnimateFactory = (AnimateFactory)EPackage.Registry.INSTANCE.getEFactory(AnimatePackage.eNS_URI);
+			if (theAnimateFactory != null) {
+				return theAnimateFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new AnimateFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AnimateFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case AnimatePackage.HUMAN_USER: return createHumanUser();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HumanUser createHumanUser() {
+		HumanUserImpl humanUser = new HumanUserImpl();
+		return humanUser;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AnimatePackage getAnimatePackage() {
+		return (AnimatePackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static AnimatePackage getPackage() {
+		return AnimatePackage.eINSTANCE;
+	}
+
+} //AnimateFactoryImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/impl/AnimatePackageImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/impl/AnimatePackageImpl.java
new file mode 100644
index 0000000..aa021fd
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/impl/AnimatePackageImpl.java
@@ -0,0 +1,268 @@
+/**
+ */
+package IoTML.Animate.impl;
+
+import IoTML.Animate.AnimateFactory;
+import IoTML.Animate.AnimatePackage;
+import IoTML.Animate.HumanUser;
+
+import IoTML.Hardware.Actuator.ActuatorPackage;
+
+import IoTML.Hardware.Actuator.impl.ActuatorPackageImpl;
+
+import IoTML.Hardware.Core.CorePackage;
+
+import IoTML.Hardware.Core.impl.CorePackageImpl;
+
+import IoTML.Hardware.Network.NetworkPackage;
+
+import IoTML.Hardware.Network.impl.NetworkPackageImpl;
+
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import IoTML.Hardware.Sensor.impl.SensorPackageImpl;
+
+import IoTML.Hybrid.HybridPackage;
+
+import IoTML.Hybrid.impl.HybridPackageImpl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+
+import IoTML.Software.Artefact.impl.ArtefactPackageImpl;
+
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import IoTML.Software.Core.Structure.impl.StructurePackageImpl;
+
+import IoTML.Software.Resource.ResourcePackage;
+
+import IoTML.Software.Resource.impl.ResourcePackageImpl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.MARTE.MARTEPackage;
+
+import org.eclipse.papyrus.MARTE_Library.BasicNFP_Types.BasicNFP_TypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.GRM_BasicTypes.GRM_BasicTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_DataTypes.MARTE_DataTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_PrimitivesTypes.MARTE_PrimitivesTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MeasurementUnits.MeasurementUnitsPackage;
+
+import org.eclipse.papyrus.MARTE_Library.RS_Library.RS_LibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeLibrary.TimeLibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeTypesLibrary.TimeTypesLibraryPackage;
+
+import org.eclipse.papyrus.sysml14.sysmlPackage;
+
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AnimatePackageImpl extends EPackageImpl implements AnimatePackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass humanUserEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see IoTML.Animate.AnimatePackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private AnimatePackageImpl() {
+		super(eNS_URI, AnimateFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link AnimatePackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static AnimatePackage init() {
+		if (isInited) return (AnimatePackage)EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI);
+
+		// Obtain or create and register package
+		AnimatePackageImpl theAnimatePackage = (AnimatePackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof AnimatePackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new AnimatePackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		MARTEPackage.eINSTANCE.eClass();
+		MeasurementUnitsPackage.eINSTANCE.eClass();
+		GRM_BasicTypesPackage.eINSTANCE.eClass();
+		MARTE_DataTypesPackage.eINSTANCE.eClass();
+		BasicNFP_TypesPackage.eINSTANCE.eClass();
+		TimeTypesLibraryPackage.eINSTANCE.eClass();
+		TimeLibraryPackage.eINSTANCE.eClass();
+		RS_LibraryPackage.eINSTANCE.eClass();
+		MARTE_PrimitivesTypesPackage.eINSTANCE.eClass();
+		sysmlPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		ActuatorPackageImpl theActuatorPackage = (ActuatorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) instanceof ActuatorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) : ActuatorPackage.eINSTANCE);
+		SensorPackageImpl theSensorPackage = (SensorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) instanceof SensorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) : SensorPackage.eINSTANCE);
+		NetworkPackageImpl theNetworkPackage = (NetworkPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) instanceof NetworkPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) : NetworkPackage.eINSTANCE);
+		CorePackageImpl theCorePackage = (CorePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) instanceof CorePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) : CorePackage.eINSTANCE);
+		HybridPackageImpl theHybridPackage = (HybridPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) instanceof HybridPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) : HybridPackage.eINSTANCE);
+		ArtefactPackageImpl theArtefactPackage = (ArtefactPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) instanceof ArtefactPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) : ArtefactPackage.eINSTANCE);
+		StructurePackageImpl theStructurePackage = (StructurePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) instanceof StructurePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) : StructurePackage.eINSTANCE);
+		ResourcePackageImpl theResourcePackage = (ResourcePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) instanceof ResourcePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) : ResourcePackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theAnimatePackage.createPackageContents();
+		theActuatorPackage.createPackageContents();
+		theSensorPackage.createPackageContents();
+		theNetworkPackage.createPackageContents();
+		theCorePackage.createPackageContents();
+		theHybridPackage.createPackageContents();
+		theArtefactPackage.createPackageContents();
+		theStructurePackage.createPackageContents();
+		theResourcePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theAnimatePackage.initializePackageContents();
+		theActuatorPackage.initializePackageContents();
+		theSensorPackage.initializePackageContents();
+		theNetworkPackage.initializePackageContents();
+		theCorePackage.initializePackageContents();
+		theHybridPackage.initializePackageContents();
+		theArtefactPackage.initializePackageContents();
+		theStructurePackage.initializePackageContents();
+		theResourcePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theAnimatePackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(AnimatePackage.eNS_URI, theAnimatePackage);
+		return theAnimatePackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getHumanUser() {
+		return humanUserEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getHumanUser_Base_Actor() {
+		return (EReference)humanUserEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AnimateFactory getAnimateFactory() {
+		return (AnimateFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		humanUserEClass = createEClass(HUMAN_USER);
+		createEReference(humanUserEClass, HUMAN_USER__BASE_ACTOR);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
+
+		// Add supertypes to classes
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(humanUserEClass, HumanUser.class, "HumanUser", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getHumanUser_Base_Actor(), theUMLPackage.getActor(), null, "base_Actor", null, 1, 1, HumanUser.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //AnimatePackageImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/impl/HumanUserImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/impl/HumanUserImpl.java
new file mode 100644
index 0000000..7cdf585
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/impl/HumanUserImpl.java
@@ -0,0 +1,153 @@
+/**
+ */
+package IoTML.Animate.impl;
+
+import IoTML.Animate.AnimatePackage;
+import IoTML.Animate.HumanUser;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.uml2.uml.Actor;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Human User</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Animate.impl.HumanUserImpl#getBase_Actor <em>Base Actor</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class HumanUserImpl extends MinimalEObjectImpl.Container implements HumanUser {
+	/**
+	 * The cached value of the '{@link #getBase_Actor() <em>Base Actor</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Actor()
+	 * @generated
+	 * @ordered
+	 */
+	protected Actor base_Actor;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected HumanUserImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return AnimatePackage.Literals.HUMAN_USER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Actor getBase_Actor() {
+		if (base_Actor != null && base_Actor.eIsProxy()) {
+			InternalEObject oldBase_Actor = (InternalEObject)base_Actor;
+			base_Actor = (Actor)eResolveProxy(oldBase_Actor);
+			if (base_Actor != oldBase_Actor) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, AnimatePackage.HUMAN_USER__BASE_ACTOR, oldBase_Actor, base_Actor));
+			}
+		}
+		return base_Actor;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Actor basicGetBase_Actor() {
+		return base_Actor;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Actor(Actor newBase_Actor) {
+		Actor oldBase_Actor = base_Actor;
+		base_Actor = newBase_Actor;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AnimatePackage.HUMAN_USER__BASE_ACTOR, oldBase_Actor, base_Actor));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case AnimatePackage.HUMAN_USER__BASE_ACTOR:
+				if (resolve) return getBase_Actor();
+				return basicGetBase_Actor();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case AnimatePackage.HUMAN_USER__BASE_ACTOR:
+				setBase_Actor((Actor)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case AnimatePackage.HUMAN_USER__BASE_ACTOR:
+				setBase_Actor((Actor)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case AnimatePackage.HUMAN_USER__BASE_ACTOR:
+				return base_Actor != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //HumanUserImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/util/AnimateAdapterFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/util/AnimateAdapterFactory.java
new file mode 100644
index 0000000..70c7a41
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/util/AnimateAdapterFactory.java
@@ -0,0 +1,116 @@
+/**
+ */
+package IoTML.Animate.util;
+
+import IoTML.Animate.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Animate.AnimatePackage
+ * @generated
+ */
+public class AnimateAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static AnimatePackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AnimateAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = AnimatePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AnimateSwitch modelSwitch =
+		new AnimateSwitch() {
+			public Object caseHumanUser(HumanUser object) {
+				return createHumanUserAdapter();
+			}
+			public Object defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	public Adapter createAdapter(Notifier target) {
+		return (Adapter)modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Animate.HumanUser <em>Human User</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Animate.HumanUser
+	 * @generated
+	 */
+	public Adapter createHumanUserAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //AnimateAdapterFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/util/AnimateSwitch.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/util/AnimateSwitch.java
new file mode 100644
index 0000000..3ffaa6d
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Animate/util/AnimateSwitch.java
@@ -0,0 +1,126 @@
+/**
+ */
+package IoTML.Animate.util;
+
+import IoTML.Animate.*;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see IoTML.Animate.AnimatePackage
+ * @generated
+ */
+public class AnimateSwitch {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static AnimatePackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AnimateSwitch() {
+		if (modelPackage == null) {
+			modelPackage = AnimatePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public Object doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch((EClass)eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case AnimatePackage.HUMAN_USER: {
+				HumanUser humanUser = (HumanUser)theEObject;
+				Object result = caseHumanUser(humanUser);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Human User</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Human User</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHumanUser(HumanUser object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public Object defaultCase(EObject object) {
+		return null;
+	}
+
+} //AnimateSwitch
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/ActuatorFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/ActuatorFactory.java
new file mode 100644
index 0000000..917e9f0
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/ActuatorFactory.java
@@ -0,0 +1,42 @@
+/**
+ */
+package IoTML.Hardware.Actuator;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Actuator.ActuatorPackage
+ * @generated
+ */
+public interface ActuatorFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ActuatorFactory eINSTANCE = IoTML.Hardware.Actuator.impl.ActuatorFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Hw Common Actuator</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Hw Common Actuator</em>'.
+	 * @generated
+	 */
+	HwCommonActuator createHwCommonActuator();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ActuatorPackage getActuatorPackage();
+
+} //ActuatorFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/ActuatorPackage.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/ActuatorPackage.java
new file mode 100644
index 0000000..2cf30e4
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/ActuatorPackage.java
@@ -0,0 +1,412 @@
+/**
+ */
+package IoTML.Hardware.Actuator;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevicePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Actuator.ActuatorFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ActuatorPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "Actuator";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///IoTML/Hardware/Actuator.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "IoTML.Hardware.Actuator";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ActuatorPackage eINSTANCE = IoTML.Hardware.Actuator.impl.ActuatorPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Actuator.impl.HwCommonActuatorImpl <em>Hw Common Actuator</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Actuator.impl.HwCommonActuatorImpl
+	 * @see IoTML.Hardware.Actuator.impl.ActuatorPackageImpl#getHwCommonActuator()
+	 * @generated
+	 */
+	int HW_COMMON_ACTUATOR = 0;
+
+	/**
+	 * The feature id for the '<em><b>Res Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__RES_MULT = HwDevicePackage.HW_ACTUATOR__RES_MULT;
+
+	/**
+	 * The feature id for the '<em><b>Is Protected</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__IS_PROTECTED = HwDevicePackage.HW_ACTUATOR__IS_PROTECTED;
+
+	/**
+	 * The feature id for the '<em><b>Is Active</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__IS_ACTIVE = HwDevicePackage.HW_ACTUATOR__IS_ACTIVE;
+
+	/**
+	 * The feature id for the '<em><b>Base Property</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__BASE_PROPERTY = HwDevicePackage.HW_ACTUATOR__BASE_PROPERTY;
+
+	/**
+	 * The feature id for the '<em><b>Base Instance Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__BASE_INSTANCE_SPECIFICATION = HwDevicePackage.HW_ACTUATOR__BASE_INSTANCE_SPECIFICATION;
+
+	/**
+	 * The feature id for the '<em><b>Base Classifier</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__BASE_CLASSIFIER = HwDevicePackage.HW_ACTUATOR__BASE_CLASSIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Base Lifeline</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__BASE_LIFELINE = HwDevicePackage.HW_ACTUATOR__BASE_LIFELINE;
+
+	/**
+	 * The feature id for the '<em><b>Base Connectable Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__BASE_CONNECTABLE_ELEMENT = HwDevicePackage.HW_ACTUATOR__BASE_CONNECTABLE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__DESCRIPTION = HwDevicePackage.HW_ACTUATOR__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>PHW Services</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__PHW_SERVICES = HwDevicePackage.HW_ACTUATOR__PHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>RHW Services</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__RHW_SERVICES = HwDevicePackage.HW_ACTUATOR__RHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>Owned HW</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__OWNED_HW = HwDevicePackage.HW_ACTUATOR__OWNED_HW;
+
+	/**
+	 * The feature id for the '<em><b>End Points</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__END_POINTS = HwDevicePackage.HW_ACTUATOR__END_POINTS;
+
+	/**
+	 * The feature id for the '<em><b>Frequency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__FREQUENCY = HwDevicePackage.HW_ACTUATOR__FREQUENCY;
+
+	/**
+	 * The feature id for the '<em><b>Speed Factor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__SPEED_FACTOR = HwDevicePackage.HW_ACTUATOR__SPEED_FACTOR;
+
+	/**
+	 * The feature id for the '<em><b>Main Scheduler</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__MAIN_SCHEDULER = HwDevicePackage.HW_ACTUATOR__MAIN_SCHEDULER;
+
+	/**
+	 * The feature id for the '<em><b>Energy Kind</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__ENERGY_KIND = HwDevicePackage.HW_ACTUATOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Movement Kind</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__MOVEMENT_KIND = HwDevicePackage.HW_ACTUATOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Is Powered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR__IS_POWERED = HwDevicePackage.HW_ACTUATOR_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Hw Common Actuator</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_ACTUATOR_FEATURE_COUNT = HwDevicePackage.HW_ACTUATOR_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Actuator.EnergyKind <em>Energy Kind</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Actuator.EnergyKind
+	 * @see IoTML.Hardware.Actuator.impl.ActuatorPackageImpl#getEnergyKind()
+	 * @generated
+	 */
+	int ENERGY_KIND = 1;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Actuator.MovementKind <em>Movement Kind</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Actuator.MovementKind
+	 * @see IoTML.Hardware.Actuator.impl.ActuatorPackageImpl#getMovementKind()
+	 * @generated
+	 */
+	int MOVEMENT_KIND = 2;
+
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Hardware.Actuator.HwCommonActuator <em>Hw Common Actuator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Hw Common Actuator</em>'.
+	 * @see IoTML.Hardware.Actuator.HwCommonActuator
+	 * @generated
+	 */
+	EClass getHwCommonActuator();
+
+	/**
+	 * Returns the meta object for the attribute '{@link IoTML.Hardware.Actuator.HwCommonActuator#getEnergyKind <em>Energy Kind</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Energy Kind</em>'.
+	 * @see IoTML.Hardware.Actuator.HwCommonActuator#getEnergyKind()
+	 * @see #getHwCommonActuator()
+	 * @generated
+	 */
+	EAttribute getHwCommonActuator_EnergyKind();
+
+	/**
+	 * Returns the meta object for the attribute '{@link IoTML.Hardware.Actuator.HwCommonActuator#getMovementKind <em>Movement Kind</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Movement Kind</em>'.
+	 * @see IoTML.Hardware.Actuator.HwCommonActuator#getMovementKind()
+	 * @see #getHwCommonActuator()
+	 * @generated
+	 */
+	EAttribute getHwCommonActuator_MovementKind();
+
+	/**
+	 * Returns the meta object for the attribute '{@link IoTML.Hardware.Actuator.HwCommonActuator#isPowered <em>Is Powered</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Is Powered</em>'.
+	 * @see IoTML.Hardware.Actuator.HwCommonActuator#isPowered()
+	 * @see #getHwCommonActuator()
+	 * @generated
+	 */
+	EAttribute getHwCommonActuator_IsPowered();
+
+	/**
+	 * Returns the meta object for enum '{@link IoTML.Hardware.Actuator.EnergyKind <em>Energy Kind</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Energy Kind</em>'.
+	 * @see IoTML.Hardware.Actuator.EnergyKind
+	 * @generated
+	 */
+	EEnum getEnergyKind();
+
+	/**
+	 * Returns the meta object for enum '{@link IoTML.Hardware.Actuator.MovementKind <em>Movement Kind</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Movement Kind</em>'.
+	 * @see IoTML.Hardware.Actuator.MovementKind
+	 * @generated
+	 */
+	EEnum getMovementKind();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ActuatorFactory getActuatorFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Actuator.impl.HwCommonActuatorImpl <em>Hw Common Actuator</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Actuator.impl.HwCommonActuatorImpl
+		 * @see IoTML.Hardware.Actuator.impl.ActuatorPackageImpl#getHwCommonActuator()
+		 * @generated
+		 */
+		EClass HW_COMMON_ACTUATOR = eINSTANCE.getHwCommonActuator();
+
+		/**
+		 * The meta object literal for the '<em><b>Energy Kind</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute HW_COMMON_ACTUATOR__ENERGY_KIND = eINSTANCE.getHwCommonActuator_EnergyKind();
+
+		/**
+		 * The meta object literal for the '<em><b>Movement Kind</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute HW_COMMON_ACTUATOR__MOVEMENT_KIND = eINSTANCE.getHwCommonActuator_MovementKind();
+
+		/**
+		 * The meta object literal for the '<em><b>Is Powered</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute HW_COMMON_ACTUATOR__IS_POWERED = eINSTANCE.getHwCommonActuator_IsPowered();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Actuator.EnergyKind <em>Energy Kind</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Actuator.EnergyKind
+		 * @see IoTML.Hardware.Actuator.impl.ActuatorPackageImpl#getEnergyKind()
+		 * @generated
+		 */
+		EEnum ENERGY_KIND = eINSTANCE.getEnergyKind();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Actuator.MovementKind <em>Movement Kind</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Actuator.MovementKind
+		 * @see IoTML.Hardware.Actuator.impl.ActuatorPackageImpl#getMovementKind()
+		 * @generated
+		 */
+		EEnum MOVEMENT_KIND = eINSTANCE.getMovementKind();
+
+	}
+
+} //ActuatorPackage
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/EnergyKind.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/EnergyKind.java
new file mode 100644
index 0000000..15f3269
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/EnergyKind.java
@@ -0,0 +1,234 @@
+/**
+ */
+package IoTML.Hardware.Actuator;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Energy Kind</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Actuator.ActuatorPackage#getEnergyKind()
+ * @model
+ * @generated
+ */
+public final class EnergyKind extends AbstractEnumerator {
+	/**
+	 * The '<em><b>Electrical</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>Electrical</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ELECTRICAL_LITERAL
+	 * @model name="Electrical"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ELECTRICAL = 0;
+
+	/**
+	 * The '<em><b>Mechanical</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>Mechanical</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #MECHANICAL_LITERAL
+	 * @model name="Mechanical"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int MECHANICAL = 1;
+
+	/**
+	 * The '<em><b>Pneumatical</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>Pneumatical</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #PNEUMATICAL_LITERAL
+	 * @model name="Pneumatical"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int PNEUMATICAL = 2;
+
+	/**
+	 * The '<em><b>Hydraulic</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>Hydraulic</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #HYDRAULIC_LITERAL
+	 * @model name="Hydraulic"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int HYDRAULIC = 3;
+
+	/**
+	 * The '<em><b>None</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>None</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #NONE_LITERAL
+	 * @model name="None"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int NONE = 4;
+
+	/**
+	 * The '<em><b>Electrical</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ELECTRICAL
+	 * @generated
+	 * @ordered
+	 */
+	public static final EnergyKind ELECTRICAL_LITERAL = new EnergyKind(ELECTRICAL, "Electrical", "Electrical");
+
+	/**
+	 * The '<em><b>Mechanical</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #MECHANICAL
+	 * @generated
+	 * @ordered
+	 */
+	public static final EnergyKind MECHANICAL_LITERAL = new EnergyKind(MECHANICAL, "Mechanical", "Mechanical");
+
+	/**
+	 * The '<em><b>Pneumatical</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #PNEUMATICAL
+	 * @generated
+	 * @ordered
+	 */
+	public static final EnergyKind PNEUMATICAL_LITERAL = new EnergyKind(PNEUMATICAL, "Pneumatical", "Pneumatical");
+
+	/**
+	 * The '<em><b>Hydraulic</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #HYDRAULIC
+	 * @generated
+	 * @ordered
+	 */
+	public static final EnergyKind HYDRAULIC_LITERAL = new EnergyKind(HYDRAULIC, "Hydraulic", "Hydraulic");
+
+	/**
+	 * The '<em><b>None</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #NONE
+	 * @generated
+	 * @ordered
+	 */
+	public static final EnergyKind NONE_LITERAL = new EnergyKind(NONE, "None", "None");
+
+	/**
+	 * An array of all the '<em><b>Energy Kind</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final EnergyKind[] VALUES_ARRAY =
+		new EnergyKind[] {
+			ELECTRICAL_LITERAL,
+			MECHANICAL_LITERAL,
+			PNEUMATICAL_LITERAL,
+			HYDRAULIC_LITERAL,
+			NONE_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Energy Kind</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Energy Kind</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static EnergyKind get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			EnergyKind result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Energy Kind</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static EnergyKind getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			EnergyKind result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Energy Kind</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static EnergyKind get(int value) {
+		switch (value) {
+			case ELECTRICAL: return ELECTRICAL_LITERAL;
+			case MECHANICAL: return MECHANICAL_LITERAL;
+			case PNEUMATICAL: return PNEUMATICAL_LITERAL;
+			case HYDRAULIC: return HYDRAULIC_LITERAL;
+			case NONE: return NONE_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EnergyKind(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //EnergyKind
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/HwCommonActuator.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/HwCommonActuator.java
new file mode 100644
index 0000000..739808a
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/HwCommonActuator.java
@@ -0,0 +1,110 @@
+/**
+ */
+package IoTML.Hardware.Actuator;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HWActuator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Hw Common Actuator</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Hardware.Actuator.HwCommonActuator#getEnergyKind <em>Energy Kind</em>}</li>
+ *   <li>{@link IoTML.Hardware.Actuator.HwCommonActuator#getMovementKind <em>Movement Kind</em>}</li>
+ *   <li>{@link IoTML.Hardware.Actuator.HwCommonActuator#isPowered <em>Is Powered</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Hardware.Actuator.ActuatorPackage#getHwCommonActuator()
+ * @model
+ * @generated
+ */
+public interface HwCommonActuator extends HWActuator {
+	/**
+	 * Returns the value of the '<em><b>Energy Kind</b></em>' attribute.
+	 * The literals are from the enumeration {@link IoTML.Hardware.Actuator.EnergyKind}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Energy Kind</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Energy Kind</em>' attribute.
+	 * @see IoTML.Hardware.Actuator.EnergyKind
+	 * @see #setEnergyKind(EnergyKind)
+	 * @see IoTML.Hardware.Actuator.ActuatorPackage#getHwCommonActuator_EnergyKind()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	EnergyKind getEnergyKind();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Hardware.Actuator.HwCommonActuator#getEnergyKind <em>Energy Kind</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Energy Kind</em>' attribute.
+	 * @see IoTML.Hardware.Actuator.EnergyKind
+	 * @see #getEnergyKind()
+	 * @generated
+	 */
+	void setEnergyKind(EnergyKind value);
+
+	/**
+	 * Returns the value of the '<em><b>Movement Kind</b></em>' attribute.
+	 * The literals are from the enumeration {@link IoTML.Hardware.Actuator.MovementKind}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Movement Kind</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Movement Kind</em>' attribute.
+	 * @see IoTML.Hardware.Actuator.MovementKind
+	 * @see #setMovementKind(MovementKind)
+	 * @see IoTML.Hardware.Actuator.ActuatorPackage#getHwCommonActuator_MovementKind()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	MovementKind getMovementKind();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Hardware.Actuator.HwCommonActuator#getMovementKind <em>Movement Kind</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Movement Kind</em>' attribute.
+	 * @see IoTML.Hardware.Actuator.MovementKind
+	 * @see #getMovementKind()
+	 * @generated
+	 */
+	void setMovementKind(MovementKind value);
+
+	/**
+	 * Returns the value of the '<em><b>Is Powered</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Is Powered</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Is Powered</em>' attribute.
+	 * @see #setIsPowered(boolean)
+	 * @see IoTML.Hardware.Actuator.ActuatorPackage#getHwCommonActuator_IsPowered()
+	 * @model dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+	 * @generated
+	 */
+	boolean isPowered();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Hardware.Actuator.HwCommonActuator#isPowered <em>Is Powered</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Is Powered</em>' attribute.
+	 * @see #isPowered()
+	 * @generated
+	 */
+	void setIsPowered(boolean value);
+
+} // HwCommonActuator
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/MovementKind.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/MovementKind.java
new file mode 100644
index 0000000..e56c8e2
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/MovementKind.java
@@ -0,0 +1,153 @@
+/**
+ */
+package IoTML.Hardware.Actuator;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.AbstractEnumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Movement Kind</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Actuator.ActuatorPackage#getMovementKind()
+ * @model
+ * @generated
+ */
+public final class MovementKind extends AbstractEnumerator {
+	/**
+	 * The '<em><b>Linear</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>Linear</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #LINEAR_LITERAL
+	 * @model name="Linear"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int LINEAR = 0;
+
+	/**
+	 * The '<em><b>Rotational</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>Rotational</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ROTATIONAL_LITERAL
+	 * @model name="Rotational"
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ROTATIONAL = 1;
+
+	/**
+	 * The '<em><b>Linear</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #LINEAR
+	 * @generated
+	 * @ordered
+	 */
+	public static final MovementKind LINEAR_LITERAL = new MovementKind(LINEAR, "Linear", "Linear");
+
+	/**
+	 * The '<em><b>Rotational</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ROTATIONAL
+	 * @generated
+	 * @ordered
+	 */
+	public static final MovementKind ROTATIONAL_LITERAL = new MovementKind(ROTATIONAL, "Rotational", "Rotational");
+
+	/**
+	 * An array of all the '<em><b>Movement Kind</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final MovementKind[] VALUES_ARRAY =
+		new MovementKind[] {
+			LINEAR_LITERAL,
+			ROTATIONAL_LITERAL,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Movement Kind</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Movement Kind</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static MovementKind get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			MovementKind result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Movement Kind</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static MovementKind getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			MovementKind result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Movement Kind</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+	public static MovementKind get(int value) {
+		switch (value) {
+			case LINEAR: return LINEAR_LITERAL;
+			case ROTATIONAL: return ROTATIONAL_LITERAL;
+		}
+		return null;
+	}
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private MovementKind(int value, String name, String literal) {
+		super(value, name, literal);
+	}
+
+} //MovementKind
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/impl/ActuatorFactoryImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/impl/ActuatorFactoryImpl.java
new file mode 100644
index 0000000..9f967e4
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/impl/ActuatorFactoryImpl.java
@@ -0,0 +1,166 @@
+/**
+ */
+package IoTML.Hardware.Actuator.impl;
+
+import IoTML.Hardware.Actuator.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ActuatorFactoryImpl extends EFactoryImpl implements ActuatorFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ActuatorFactory init() {
+		try {
+			ActuatorFactory theActuatorFactory = (ActuatorFactory)EPackage.Registry.INSTANCE.getEFactory(ActuatorPackage.eNS_URI);
+			if (theActuatorFactory != null) {
+				return theActuatorFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ActuatorFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ActuatorFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ActuatorPackage.HW_COMMON_ACTUATOR: return createHwCommonActuator();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case ActuatorPackage.ENERGY_KIND:
+				return createEnergyKindFromString(eDataType, initialValue);
+			case ActuatorPackage.MOVEMENT_KIND:
+				return createMovementKindFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case ActuatorPackage.ENERGY_KIND:
+				return convertEnergyKindToString(eDataType, instanceValue);
+			case ActuatorPackage.MOVEMENT_KIND:
+				return convertMovementKindToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HwCommonActuator createHwCommonActuator() {
+		HwCommonActuatorImpl hwCommonActuator = new HwCommonActuatorImpl();
+		return hwCommonActuator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EnergyKind createEnergyKindFromString(EDataType eDataType, String initialValue) {
+		EnergyKind result = EnergyKind.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertEnergyKindToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MovementKind createMovementKindFromString(EDataType eDataType, String initialValue) {
+		MovementKind result = MovementKind.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertMovementKindToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ActuatorPackage getActuatorPackage() {
+		return (ActuatorPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static ActuatorPackage getPackage() {
+		return ActuatorPackage.eINSTANCE;
+	}
+
+} //ActuatorFactoryImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/impl/ActuatorPackageImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/impl/ActuatorPackageImpl.java
new file mode 100644
index 0000000..7690df9
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/impl/ActuatorPackageImpl.java
@@ -0,0 +1,345 @@
+/**
+ */
+package IoTML.Hardware.Actuator.impl;
+
+import IoTML.Animate.AnimatePackage;
+
+import IoTML.Animate.impl.AnimatePackageImpl;
+
+import IoTML.Hardware.Actuator.ActuatorFactory;
+import IoTML.Hardware.Actuator.ActuatorPackage;
+import IoTML.Hardware.Actuator.EnergyKind;
+import IoTML.Hardware.Actuator.HwCommonActuator;
+import IoTML.Hardware.Actuator.MovementKind;
+
+import IoTML.Hardware.Core.CorePackage;
+
+import IoTML.Hardware.Core.impl.CorePackageImpl;
+
+import IoTML.Hardware.Network.NetworkPackage;
+
+import IoTML.Hardware.Network.impl.NetworkPackageImpl;
+
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import IoTML.Hardware.Sensor.impl.SensorPackageImpl;
+
+import IoTML.Hybrid.HybridPackage;
+
+import IoTML.Hybrid.impl.HybridPackageImpl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+
+import IoTML.Software.Artefact.impl.ArtefactPackageImpl;
+
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import IoTML.Software.Core.Structure.impl.StructurePackageImpl;
+
+import IoTML.Software.Resource.ResourcePackage;
+
+import IoTML.Software.Resource.impl.ResourcePackageImpl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.MARTE.MARTEPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevicePackage;
+
+import org.eclipse.papyrus.MARTE_Library.BasicNFP_Types.BasicNFP_TypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.GRM_BasicTypes.GRM_BasicTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_DataTypes.MARTE_DataTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_PrimitivesTypes.MARTE_PrimitivesTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MeasurementUnits.MeasurementUnitsPackage;
+
+import org.eclipse.papyrus.MARTE_Library.RS_Library.RS_LibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeLibrary.TimeLibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeTypesLibrary.TimeTypesLibraryPackage;
+
+import org.eclipse.papyrus.sysml14.sysmlPackage;
+
+import org.eclipse.uml2.types.TypesPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ActuatorPackageImpl extends EPackageImpl implements ActuatorPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass hwCommonActuatorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum energyKindEEnum = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum movementKindEEnum = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see IoTML.Hardware.Actuator.ActuatorPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ActuatorPackageImpl() {
+		super(eNS_URI, ActuatorFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ActuatorPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ActuatorPackage init() {
+		if (isInited) return (ActuatorPackage)EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ActuatorPackageImpl theActuatorPackage = (ActuatorPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ActuatorPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ActuatorPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		MARTEPackage.eINSTANCE.eClass();
+		MeasurementUnitsPackage.eINSTANCE.eClass();
+		GRM_BasicTypesPackage.eINSTANCE.eClass();
+		MARTE_DataTypesPackage.eINSTANCE.eClass();
+		BasicNFP_TypesPackage.eINSTANCE.eClass();
+		TimeTypesLibraryPackage.eINSTANCE.eClass();
+		TimeLibraryPackage.eINSTANCE.eClass();
+		RS_LibraryPackage.eINSTANCE.eClass();
+		MARTE_PrimitivesTypesPackage.eINSTANCE.eClass();
+		sysmlPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		AnimatePackageImpl theAnimatePackage = (AnimatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) instanceof AnimatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) : AnimatePackage.eINSTANCE);
+		SensorPackageImpl theSensorPackage = (SensorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) instanceof SensorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) : SensorPackage.eINSTANCE);
+		NetworkPackageImpl theNetworkPackage = (NetworkPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) instanceof NetworkPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) : NetworkPackage.eINSTANCE);
+		CorePackageImpl theCorePackage = (CorePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) instanceof CorePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) : CorePackage.eINSTANCE);
+		HybridPackageImpl theHybridPackage = (HybridPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) instanceof HybridPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) : HybridPackage.eINSTANCE);
+		ArtefactPackageImpl theArtefactPackage = (ArtefactPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) instanceof ArtefactPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) : ArtefactPackage.eINSTANCE);
+		StructurePackageImpl theStructurePackage = (StructurePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) instanceof StructurePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) : StructurePackage.eINSTANCE);
+		ResourcePackageImpl theResourcePackage = (ResourcePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) instanceof ResourcePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) : ResourcePackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theActuatorPackage.createPackageContents();
+		theAnimatePackage.createPackageContents();
+		theSensorPackage.createPackageContents();
+		theNetworkPackage.createPackageContents();
+		theCorePackage.createPackageContents();
+		theHybridPackage.createPackageContents();
+		theArtefactPackage.createPackageContents();
+		theStructurePackage.createPackageContents();
+		theResourcePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theActuatorPackage.initializePackageContents();
+		theAnimatePackage.initializePackageContents();
+		theSensorPackage.initializePackageContents();
+		theNetworkPackage.initializePackageContents();
+		theCorePackage.initializePackageContents();
+		theHybridPackage.initializePackageContents();
+		theArtefactPackage.initializePackageContents();
+		theStructurePackage.initializePackageContents();
+		theResourcePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theActuatorPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ActuatorPackage.eNS_URI, theActuatorPackage);
+		return theActuatorPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getHwCommonActuator() {
+		return hwCommonActuatorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getHwCommonActuator_EnergyKind() {
+		return (EAttribute)hwCommonActuatorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getHwCommonActuator_MovementKind() {
+		return (EAttribute)hwCommonActuatorEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getHwCommonActuator_IsPowered() {
+		return (EAttribute)hwCommonActuatorEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getEnergyKind() {
+		return energyKindEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getMovementKind() {
+		return movementKindEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ActuatorFactory getActuatorFactory() {
+		return (ActuatorFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		hwCommonActuatorEClass = createEClass(HW_COMMON_ACTUATOR);
+		createEAttribute(hwCommonActuatorEClass, HW_COMMON_ACTUATOR__ENERGY_KIND);
+		createEAttribute(hwCommonActuatorEClass, HW_COMMON_ACTUATOR__MOVEMENT_KIND);
+		createEAttribute(hwCommonActuatorEClass, HW_COMMON_ACTUATOR__IS_POWERED);
+
+		// Create enums
+		energyKindEEnum = createEEnum(ENERGY_KIND);
+		movementKindEEnum = createEEnum(MOVEMENT_KIND);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		HwDevicePackage theHwDevicePackage = (HwDevicePackage)EPackage.Registry.INSTANCE.getEPackage(HwDevicePackage.eNS_URI);
+		TypesPackage theTypesPackage = (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);
+
+		// Add supertypes to classes
+		hwCommonActuatorEClass.getESuperTypes().add(theHwDevicePackage.getHWActuator());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(hwCommonActuatorEClass, HwCommonActuator.class, "HwCommonActuator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getHwCommonActuator_EnergyKind(), this.getEnergyKind(), "energyKind", null, 0, 1, HwCommonActuator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getHwCommonActuator_MovementKind(), this.getMovementKind(), "movementKind", null, 0, 1, HwCommonActuator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getHwCommonActuator_IsPowered(), theTypesPackage.getBoolean(), "isPowered", null, 1, 1, HwCommonActuator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		// Initialize enums and add enum literals
+		initEEnum(energyKindEEnum, EnergyKind.class, "EnergyKind");
+		addEEnumLiteral(energyKindEEnum, EnergyKind.ELECTRICAL_LITERAL);
+		addEEnumLiteral(energyKindEEnum, EnergyKind.MECHANICAL_LITERAL);
+		addEEnumLiteral(energyKindEEnum, EnergyKind.PNEUMATICAL_LITERAL);
+		addEEnumLiteral(energyKindEEnum, EnergyKind.HYDRAULIC_LITERAL);
+		addEEnumLiteral(energyKindEEnum, EnergyKind.NONE_LITERAL);
+
+		initEEnum(movementKindEEnum, MovementKind.class, "MovementKind");
+		addEEnumLiteral(movementKindEEnum, MovementKind.LINEAR_LITERAL);
+		addEEnumLiteral(movementKindEEnum, MovementKind.ROTATIONAL_LITERAL);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ActuatorPackageImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/impl/HwCommonActuatorImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/impl/HwCommonActuatorImpl.java
new file mode 100644
index 0000000..5d273aa
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/impl/HwCommonActuatorImpl.java
@@ -0,0 +1,268 @@
+/**
+ */
+package IoTML.Hardware.Actuator.impl;
+
+import IoTML.Hardware.Actuator.ActuatorPackage;
+import IoTML.Hardware.Actuator.EnergyKind;
+import IoTML.Hardware.Actuator.HwCommonActuator;
+import IoTML.Hardware.Actuator.MovementKind;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.impl.HWActuatorImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Hw Common Actuator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Hardware.Actuator.impl.HwCommonActuatorImpl#getEnergyKind <em>Energy Kind</em>}</li>
+ *   <li>{@link IoTML.Hardware.Actuator.impl.HwCommonActuatorImpl#getMovementKind <em>Movement Kind</em>}</li>
+ *   <li>{@link IoTML.Hardware.Actuator.impl.HwCommonActuatorImpl#isPowered <em>Is Powered</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class HwCommonActuatorImpl extends HWActuatorImpl implements HwCommonActuator {
+	/**
+	 * The default value of the '{@link #getEnergyKind() <em>Energy Kind</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEnergyKind()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final EnergyKind ENERGY_KIND_EDEFAULT = EnergyKind.ELECTRICAL_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getEnergyKind() <em>Energy Kind</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEnergyKind()
+	 * @generated
+	 * @ordered
+	 */
+	protected EnergyKind energyKind = ENERGY_KIND_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getMovementKind() <em>Movement Kind</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMovementKind()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final MovementKind MOVEMENT_KIND_EDEFAULT = MovementKind.LINEAR_LITERAL;
+
+	/**
+	 * The cached value of the '{@link #getMovementKind() <em>Movement Kind</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMovementKind()
+	 * @generated
+	 * @ordered
+	 */
+	protected MovementKind movementKind = MOVEMENT_KIND_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #isPowered() <em>Is Powered</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPowered()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean IS_POWERED_EDEFAULT = false;
+
+	/**
+	 * The cached value of the '{@link #isPowered() <em>Is Powered</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isPowered()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean isPowered = IS_POWERED_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected HwCommonActuatorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return ActuatorPackage.Literals.HW_COMMON_ACTUATOR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EnergyKind getEnergyKind() {
+		return energyKind;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEnergyKind(EnergyKind newEnergyKind) {
+		EnergyKind oldEnergyKind = energyKind;
+		energyKind = newEnergyKind == null ? ENERGY_KIND_EDEFAULT : newEnergyKind;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ActuatorPackage.HW_COMMON_ACTUATOR__ENERGY_KIND, oldEnergyKind, energyKind));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MovementKind getMovementKind() {
+		return movementKind;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMovementKind(MovementKind newMovementKind) {
+		MovementKind oldMovementKind = movementKind;
+		movementKind = newMovementKind == null ? MOVEMENT_KIND_EDEFAULT : newMovementKind;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ActuatorPackage.HW_COMMON_ACTUATOR__MOVEMENT_KIND, oldMovementKind, movementKind));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isPowered() {
+		return isPowered;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIsPowered(boolean newIsPowered) {
+		boolean oldIsPowered = isPowered;
+		isPowered = newIsPowered;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ActuatorPackage.HW_COMMON_ACTUATOR__IS_POWERED, oldIsPowered, isPowered));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ActuatorPackage.HW_COMMON_ACTUATOR__ENERGY_KIND:
+				return getEnergyKind();
+			case ActuatorPackage.HW_COMMON_ACTUATOR__MOVEMENT_KIND:
+				return getMovementKind();
+			case ActuatorPackage.HW_COMMON_ACTUATOR__IS_POWERED:
+				return isPowered() ? Boolean.TRUE : Boolean.FALSE;
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ActuatorPackage.HW_COMMON_ACTUATOR__ENERGY_KIND:
+				setEnergyKind((EnergyKind)newValue);
+				return;
+			case ActuatorPackage.HW_COMMON_ACTUATOR__MOVEMENT_KIND:
+				setMovementKind((MovementKind)newValue);
+				return;
+			case ActuatorPackage.HW_COMMON_ACTUATOR__IS_POWERED:
+				setIsPowered(((Boolean)newValue).booleanValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ActuatorPackage.HW_COMMON_ACTUATOR__ENERGY_KIND:
+				setEnergyKind(ENERGY_KIND_EDEFAULT);
+				return;
+			case ActuatorPackage.HW_COMMON_ACTUATOR__MOVEMENT_KIND:
+				setMovementKind(MOVEMENT_KIND_EDEFAULT);
+				return;
+			case ActuatorPackage.HW_COMMON_ACTUATOR__IS_POWERED:
+				setIsPowered(IS_POWERED_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ActuatorPackage.HW_COMMON_ACTUATOR__ENERGY_KIND:
+				return energyKind != ENERGY_KIND_EDEFAULT;
+			case ActuatorPackage.HW_COMMON_ACTUATOR__MOVEMENT_KIND:
+				return movementKind != MOVEMENT_KIND_EDEFAULT;
+			case ActuatorPackage.HW_COMMON_ACTUATOR__IS_POWERED:
+				return isPowered != IS_POWERED_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (energyKind: ");
+		result.append(energyKind);
+		result.append(", movementKind: ");
+		result.append(movementKind);
+		result.append(", isPowered: ");
+		result.append(isPowered);
+		result.append(')');
+		return result.toString();
+	}
+
+} //HwCommonActuatorImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/util/ActuatorAdapterFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/util/ActuatorAdapterFactory.java
new file mode 100644
index 0000000..d07560c
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/util/ActuatorAdapterFactory.java
@@ -0,0 +1,245 @@
+/**
+ */
+package IoTML.Hardware.Actuator.util;
+
+import IoTML.Hardware.Actuator.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HWActuator;
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevice;
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwI_O;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.DeviceResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Actuator.ActuatorPackage
+ * @generated
+ */
+public class ActuatorAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ActuatorPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ActuatorAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ActuatorPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ActuatorSwitch modelSwitch =
+		new ActuatorSwitch() {
+			public Object caseHwCommonActuator(HwCommonActuator object) {
+				return createHwCommonActuatorAdapter();
+			}
+			public Object caseResource(Resource object) {
+				return createResourceAdapter();
+			}
+			public Object caseHwResource(HwResource object) {
+				return createHwResourceAdapter();
+			}
+			public Object caseProcessingResource(ProcessingResource object) {
+				return createProcessingResourceAdapter();
+			}
+			public Object caseDeviceResource(DeviceResource object) {
+				return createDeviceResourceAdapter();
+			}
+			public Object caseHwDevice(HwDevice object) {
+				return createHwDeviceAdapter();
+			}
+			public Object caseHwI_O(HwI_O object) {
+				return createHwI_OAdapter();
+			}
+			public Object caseHWActuator(HWActuator object) {
+				return createHWActuatorAdapter();
+			}
+			public Object defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	public Adapter createAdapter(Notifier target) {
+		return (Adapter)modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Hardware.Actuator.HwCommonActuator <em>Hw Common Actuator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Hardware.Actuator.HwCommonActuator
+	 * @generated
+	 */
+	public Adapter createHwCommonActuatorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource <em>Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource
+	 * @generated
+	 */
+	public Adapter createResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource <em>Hw Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource
+	 * @generated
+	 */
+	public Adapter createHwResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource <em>Processing Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource
+	 * @generated
+	 */
+	public Adapter createProcessingResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.DeviceResource <em>Device Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.DeviceResource
+	 * @generated
+	 */
+	public Adapter createDeviceResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevice <em>Hw Device</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevice
+	 * @generated
+	 */
+	public Adapter createHwDeviceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwI_O <em>Hw IO</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwI_O
+	 * @generated
+	 */
+	public Adapter createHwI_OAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HWActuator <em>HW Actuator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HWActuator
+	 * @generated
+	 */
+	public Adapter createHWActuatorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ActuatorAdapterFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/util/ActuatorSwitch.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/util/ActuatorSwitch.java
new file mode 100644
index 0000000..c3b607a
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Actuator/util/ActuatorSwitch.java
@@ -0,0 +1,248 @@
+/**
+ */
+package IoTML.Hardware.Actuator.util;
+
+import IoTML.Hardware.Actuator.*;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HWActuator;
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevice;
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwI_O;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.DeviceResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Actuator.ActuatorPackage
+ * @generated
+ */
+public class ActuatorSwitch {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ActuatorPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ActuatorSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ActuatorPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public Object doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch((EClass)eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ActuatorPackage.HW_COMMON_ACTUATOR: {
+				HwCommonActuator hwCommonActuator = (HwCommonActuator)theEObject;
+				Object result = caseHwCommonActuator(hwCommonActuator);
+				if (result == null) result = caseHWActuator(hwCommonActuator);
+				if (result == null) result = caseHwI_O(hwCommonActuator);
+				if (result == null) result = caseHwDevice(hwCommonActuator);
+				if (result == null) result = caseHwResource(hwCommonActuator);
+				if (result == null) result = caseDeviceResource(hwCommonActuator);
+				if (result == null) result = caseProcessingResource(hwCommonActuator);
+				if (result == null) result = caseResource(hwCommonActuator);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw Common Actuator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw Common Actuator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwCommonActuator(HwCommonActuator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseResource(Resource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwResource(HwResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Processing Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Processing Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseProcessingResource(ProcessingResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Device Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Device Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseDeviceResource(DeviceResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw Device</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw Device</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwDevice(HwDevice object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw IO</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw IO</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwI_O(HwI_O object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>HW Actuator</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>HW Actuator</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHWActuator(HWActuator object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public Object defaultCase(EObject object) {
+		return null;
+	}
+
+} //ActuatorSwitch
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/AllocateResource.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/AllocateResource.java
new file mode 100644
index 0000000..eea3bf7
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/AllocateResource.java
@@ -0,0 +1,35 @@
+/**
+ */
+package IoTML.Hardware.Core;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.Alloc.Allocate;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Allocate Resource</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see IoTML.Hardware.Core.CorePackage#getAllocateResource()
+ * @model
+ * @generated
+ */
+public interface AllocateResource extends Allocate {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * self.base_Abstraction.client.oclIsKindOf(DeviceBroker) and self.base_Abstraction.supplier.oclIsKindOf(...)
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean AllocateResource_C1(DiagnosticChain diagnostics, Map context);
+
+} // AllocateResource
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/CoreFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/CoreFactory.java
new file mode 100644
index 0000000..3bfaac0
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/CoreFactory.java
@@ -0,0 +1,51 @@
+/**
+ */
+package IoTML.Hardware.Core;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Core.CorePackage
+ * @generated
+ */
+public interface CoreFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	CoreFactory eINSTANCE = IoTML.Hardware.Core.impl.CoreFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Allocate Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Allocate Resource</em>'.
+	 * @generated
+	 */
+	AllocateResource createAllocateResource();
+
+	/**
+	 * Returns a new object of class '<em>Has Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Has Service</em>'.
+	 * @generated
+	 */
+	HasService createHasService();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	CorePackage getCorePackage();
+
+} //CoreFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/CorePackage.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/CorePackage.java
new file mode 100644
index 0000000..2da6cf2
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/CorePackage.java
@@ -0,0 +1,226 @@
+/**
+ */
+package IoTML.Hardware.Core;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.Alloc.AllocPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Core.CoreFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface CorePackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "Core";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///IoTML/Hardware/Core.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "IoTML.Hardware.Core";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	CorePackage eINSTANCE = IoTML.Hardware.Core.impl.CorePackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Core.impl.AllocateResourceImpl <em>Allocate Resource</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Core.impl.AllocateResourceImpl
+	 * @see IoTML.Hardware.Core.impl.CorePackageImpl#getAllocateResource()
+	 * @generated
+	 */
+	int ALLOCATE_RESOURCE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Kind</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ALLOCATE_RESOURCE__KIND = AllocPackage.ALLOCATE__KIND;
+
+	/**
+	 * The feature id for the '<em><b>Nature</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ALLOCATE_RESOURCE__NATURE = AllocPackage.ALLOCATE__NATURE;
+
+	/**
+	 * The feature id for the '<em><b>Base Abstraction</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ALLOCATE_RESOURCE__BASE_ABSTRACTION = AllocPackage.ALLOCATE__BASE_ABSTRACTION;
+
+	/**
+	 * The feature id for the '<em><b>Implied Constraint</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ALLOCATE_RESOURCE__IMPLIED_CONSTRAINT = AllocPackage.ALLOCATE__IMPLIED_CONSTRAINT;
+
+	/**
+	 * The number of structural features of the '<em>Allocate Resource</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ALLOCATE_RESOURCE_FEATURE_COUNT = AllocPackage.ALLOCATE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Core.impl.HasServiceImpl <em>Has Service</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Core.impl.HasServiceImpl
+	 * @see IoTML.Hardware.Core.impl.CorePackageImpl#getHasService()
+	 * @generated
+	 */
+	int HAS_SERVICE = 1;
+
+	/**
+	 * The feature id for the '<em><b>Base Association</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HAS_SERVICE__BASE_ASSOCIATION = 0;
+
+	/**
+	 * The number of structural features of the '<em>Has Service</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HAS_SERVICE_FEATURE_COUNT = 1;
+
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Hardware.Core.AllocateResource <em>Allocate Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Allocate Resource</em>'.
+	 * @see IoTML.Hardware.Core.AllocateResource
+	 * @generated
+	 */
+	EClass getAllocateResource();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Hardware.Core.HasService <em>Has Service</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Has Service</em>'.
+	 * @see IoTML.Hardware.Core.HasService
+	 * @generated
+	 */
+	EClass getHasService();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Hardware.Core.HasService#getBase_Association <em>Base Association</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Association</em>'.
+	 * @see IoTML.Hardware.Core.HasService#getBase_Association()
+	 * @see #getHasService()
+	 * @generated
+	 */
+	EReference getHasService_Base_Association();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	CoreFactory getCoreFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Core.impl.AllocateResourceImpl <em>Allocate Resource</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Core.impl.AllocateResourceImpl
+		 * @see IoTML.Hardware.Core.impl.CorePackageImpl#getAllocateResource()
+		 * @generated
+		 */
+		EClass ALLOCATE_RESOURCE = eINSTANCE.getAllocateResource();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Core.impl.HasServiceImpl <em>Has Service</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Core.impl.HasServiceImpl
+		 * @see IoTML.Hardware.Core.impl.CorePackageImpl#getHasService()
+		 * @generated
+		 */
+		EClass HAS_SERVICE = eINSTANCE.getHasService();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Association</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference HAS_SERVICE__BASE_ASSOCIATION = eINSTANCE.getHasService_Base_Association();
+
+	}
+
+} //CorePackage
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/HasService.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/HasService.java
new file mode 100644
index 0000000..bd8901c
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/HasService.java
@@ -0,0 +1,82 @@
+/**
+ */
+package IoTML.Hardware.Core;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Association;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Has Service</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Hardware.Core.HasService#getBase_Association <em>Base Association</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Hardware.Core.CorePackage#getHasService()
+ * @model
+ * @generated
+ */
+public interface HasService extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Association</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Association</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Association</em>' reference.
+	 * @see #setBase_Association(Association)
+	 * @see IoTML.Hardware.Core.CorePackage#getHasService_Base_Association()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	Association getBase_Association();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Hardware.Core.HasService#getBase_Association <em>Base Association</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Association</em>' reference.
+	 * @see #getBase_Association()
+	 * @generated
+	 */
+	void setBase_Association(Association value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * self.base_Association.ownedEnd->one(p | p.oclIsKindOf(PhisicalEntity) and self.base_Association.ownedEnd->size() = 1
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean HasDevice_C1(DiagnosticChain diagnostics, Map context);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * self.baseAssociation.memberEnd->one(p | p.oclIskIndOf(HwDevice) and p.aggregationKind = UML::AggregationKind:shared)
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean HasDevice_C2(DiagnosticChain diagnostics, Map context);
+
+} // HasService
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/AllocateResourceImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/AllocateResourceImpl.java
new file mode 100644
index 0000000..8b2f13f
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/AllocateResourceImpl.java
@@ -0,0 +1,75 @@
+/**
+ */
+package IoTML.Hardware.Core.impl;
+
+import IoTML.Hardware.Core.AllocateResource;
+import IoTML.Hardware.Core.CorePackage;
+
+import IoTML.Hardware.Core.util.CoreValidator;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.emf.ecore.util.EObjectValidator;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.Alloc.impl.AllocateImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Allocate Resource</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class AllocateResourceImpl extends AllocateImpl implements AllocateResource {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AllocateResourceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return CorePackage.Literals.ALLOCATE_RESOURCE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean AllocateResource_C1(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 CoreValidator.DIAGNOSTIC_SOURCE,
+						 CoreValidator.ALLOCATE_RESOURCE__ALLOCATE_RESOURCE_C1,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "AllocateResource_C1", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+} //AllocateResourceImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/CoreFactoryImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/CoreFactoryImpl.java
new file mode 100644
index 0000000..1db78dd
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/CoreFactoryImpl.java
@@ -0,0 +1,104 @@
+/**
+ */
+package IoTML.Hardware.Core.impl;
+
+import IoTML.Hardware.Core.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CoreFactoryImpl extends EFactoryImpl implements CoreFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static CoreFactory init() {
+		try {
+			CoreFactory theCoreFactory = (CoreFactory)EPackage.Registry.INSTANCE.getEFactory(CorePackage.eNS_URI);
+			if (theCoreFactory != null) {
+				return theCoreFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new CoreFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CoreFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case CorePackage.ALLOCATE_RESOURCE: return createAllocateResource();
+			case CorePackage.HAS_SERVICE: return createHasService();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AllocateResource createAllocateResource() {
+		AllocateResourceImpl allocateResource = new AllocateResourceImpl();
+		return allocateResource;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HasService createHasService() {
+		HasServiceImpl hasService = new HasServiceImpl();
+		return hasService;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CorePackage getCorePackage() {
+		return (CorePackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static CorePackage getPackage() {
+		return CorePackage.eINSTANCE;
+	}
+
+} //CoreFactoryImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/CorePackageImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/CorePackageImpl.java
new file mode 100644
index 0000000..52e81e0
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/CorePackageImpl.java
@@ -0,0 +1,318 @@
+/**
+ */
+package IoTML.Hardware.Core.impl;
+
+import IoTML.Animate.AnimatePackage;
+
+import IoTML.Animate.impl.AnimatePackageImpl;
+
+import IoTML.Hardware.Actuator.ActuatorPackage;
+
+import IoTML.Hardware.Actuator.impl.ActuatorPackageImpl;
+
+import IoTML.Hardware.Core.AllocateResource;
+import IoTML.Hardware.Core.CoreFactory;
+import IoTML.Hardware.Core.CorePackage;
+import IoTML.Hardware.Core.HasService;
+
+import IoTML.Hardware.Core.util.CoreValidator;
+
+import IoTML.Hardware.Network.NetworkPackage;
+
+import IoTML.Hardware.Network.impl.NetworkPackageImpl;
+
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import IoTML.Hardware.Sensor.impl.SensorPackageImpl;
+
+import IoTML.Hybrid.HybridPackage;
+
+import IoTML.Hybrid.impl.HybridPackageImpl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+
+import IoTML.Software.Artefact.impl.ArtefactPackageImpl;
+
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import IoTML.Software.Core.Structure.impl.StructurePackageImpl;
+
+import IoTML.Software.Resource.ResourcePackage;
+
+import IoTML.Software.Resource.impl.ResourcePackageImpl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.MARTE.MARTEPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.Alloc.AllocPackage;
+
+import org.eclipse.papyrus.MARTE_Library.BasicNFP_Types.BasicNFP_TypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.GRM_BasicTypes.GRM_BasicTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_DataTypes.MARTE_DataTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_PrimitivesTypes.MARTE_PrimitivesTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MeasurementUnits.MeasurementUnitsPackage;
+
+import org.eclipse.papyrus.MARTE_Library.RS_Library.RS_LibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeLibrary.TimeLibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeTypesLibrary.TimeTypesLibraryPackage;
+
+import org.eclipse.papyrus.sysml14.sysmlPackage;
+
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CorePackageImpl extends EPackageImpl implements CorePackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass allocateResourceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass hasServiceEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see IoTML.Hardware.Core.CorePackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private CorePackageImpl() {
+		super(eNS_URI, CoreFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link CorePackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static CorePackage init() {
+		if (isInited) return (CorePackage)EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI);
+
+		// Obtain or create and register package
+		CorePackageImpl theCorePackage = (CorePackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof CorePackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new CorePackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		MARTEPackage.eINSTANCE.eClass();
+		MeasurementUnitsPackage.eINSTANCE.eClass();
+		GRM_BasicTypesPackage.eINSTANCE.eClass();
+		MARTE_DataTypesPackage.eINSTANCE.eClass();
+		BasicNFP_TypesPackage.eINSTANCE.eClass();
+		TimeTypesLibraryPackage.eINSTANCE.eClass();
+		TimeLibraryPackage.eINSTANCE.eClass();
+		RS_LibraryPackage.eINSTANCE.eClass();
+		MARTE_PrimitivesTypesPackage.eINSTANCE.eClass();
+		sysmlPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		AnimatePackageImpl theAnimatePackage = (AnimatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) instanceof AnimatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) : AnimatePackage.eINSTANCE);
+		ActuatorPackageImpl theActuatorPackage = (ActuatorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) instanceof ActuatorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) : ActuatorPackage.eINSTANCE);
+		SensorPackageImpl theSensorPackage = (SensorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) instanceof SensorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) : SensorPackage.eINSTANCE);
+		NetworkPackageImpl theNetworkPackage = (NetworkPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) instanceof NetworkPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) : NetworkPackage.eINSTANCE);
+		HybridPackageImpl theHybridPackage = (HybridPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) instanceof HybridPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) : HybridPackage.eINSTANCE);
+		ArtefactPackageImpl theArtefactPackage = (ArtefactPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) instanceof ArtefactPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) : ArtefactPackage.eINSTANCE);
+		StructurePackageImpl theStructurePackage = (StructurePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) instanceof StructurePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) : StructurePackage.eINSTANCE);
+		ResourcePackageImpl theResourcePackage = (ResourcePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) instanceof ResourcePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) : ResourcePackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theCorePackage.createPackageContents();
+		theAnimatePackage.createPackageContents();
+		theActuatorPackage.createPackageContents();
+		theSensorPackage.createPackageContents();
+		theNetworkPackage.createPackageContents();
+		theHybridPackage.createPackageContents();
+		theArtefactPackage.createPackageContents();
+		theStructurePackage.createPackageContents();
+		theResourcePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theCorePackage.initializePackageContents();
+		theAnimatePackage.initializePackageContents();
+		theActuatorPackage.initializePackageContents();
+		theSensorPackage.initializePackageContents();
+		theNetworkPackage.initializePackageContents();
+		theHybridPackage.initializePackageContents();
+		theArtefactPackage.initializePackageContents();
+		theStructurePackage.initializePackageContents();
+		theResourcePackage.initializePackageContents();
+
+		// Register package validator
+		EValidator.Registry.INSTANCE.put
+			(theCorePackage, 
+			 new EValidator.Descriptor() {
+				 public EValidator getEValidator() {
+					 return CoreValidator.INSTANCE;
+				 }
+			 });
+
+		// Mark meta-data to indicate it can't be changed
+		theCorePackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(CorePackage.eNS_URI, theCorePackage);
+		return theCorePackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAllocateResource() {
+		return allocateResourceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getHasService() {
+		return hasServiceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getHasService_Base_Association() {
+		return (EReference)hasServiceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CoreFactory getCoreFactory() {
+		return (CoreFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		allocateResourceEClass = createEClass(ALLOCATE_RESOURCE);
+
+		hasServiceEClass = createEClass(HAS_SERVICE);
+		createEReference(hasServiceEClass, HAS_SERVICE__BASE_ASSOCIATION);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		AllocPackage theAllocPackage = (AllocPackage)EPackage.Registry.INSTANCE.getEPackage(AllocPackage.eNS_URI);
+		UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
+
+		// Add supertypes to classes
+		allocateResourceEClass.getESuperTypes().add(theAllocPackage.getAllocate());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(allocateResourceEClass, AllocateResource.class, "AllocateResource", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		EOperation op = addEOperation(allocateResourceEClass, ecorePackage.getEBoolean(), "AllocateResource_C1", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		initEClass(hasServiceEClass, HasService.class, "HasService", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getHasService_Base_Association(), theUMLPackage.getAssociation(), null, "base_Association", null, 1, 1, HasService.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		op = addEOperation(hasServiceEClass, ecorePackage.getEBoolean(), "HasDevice_C1", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		op = addEOperation(hasServiceEClass, ecorePackage.getEBoolean(), "HasDevice_C2", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //CorePackageImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/HasServiceImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/HasServiceImpl.java
new file mode 100644
index 0000000..bee7986
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/impl/HasServiceImpl.java
@@ -0,0 +1,215 @@
+/**
+ */
+package IoTML.Hardware.Core.impl;
+
+import IoTML.Hardware.Core.CorePackage;
+import IoTML.Hardware.Core.HasService;
+
+import IoTML.Hardware.Core.util.CoreValidator;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.emf.ecore.util.EObjectValidator;
+
+import org.eclipse.uml2.uml.Association;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Has Service</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Hardware.Core.impl.HasServiceImpl#getBase_Association <em>Base Association</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class HasServiceImpl extends MinimalEObjectImpl.Container implements HasService {
+	/**
+	 * The cached value of the '{@link #getBase_Association() <em>Base Association</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Association()
+	 * @generated
+	 * @ordered
+	 */
+	protected Association base_Association;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected HasServiceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return CorePackage.Literals.HAS_SERVICE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Association getBase_Association() {
+		if (base_Association != null && base_Association.eIsProxy()) {
+			InternalEObject oldBase_Association = (InternalEObject)base_Association;
+			base_Association = (Association)eResolveProxy(oldBase_Association);
+			if (base_Association != oldBase_Association) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, CorePackage.HAS_SERVICE__BASE_ASSOCIATION, oldBase_Association, base_Association));
+			}
+		}
+		return base_Association;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Association basicGetBase_Association() {
+		return base_Association;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Association(Association newBase_Association) {
+		Association oldBase_Association = base_Association;
+		base_Association = newBase_Association;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CorePackage.HAS_SERVICE__BASE_ASSOCIATION, oldBase_Association, base_Association));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean HasDevice_C1(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 CoreValidator.DIAGNOSTIC_SOURCE,
+						 CoreValidator.HAS_SERVICE__HAS_DEVICE_C1,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "HasDevice_C1", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean HasDevice_C2(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 CoreValidator.DIAGNOSTIC_SOURCE,
+						 CoreValidator.HAS_SERVICE__HAS_DEVICE_C2,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "HasDevice_C2", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case CorePackage.HAS_SERVICE__BASE_ASSOCIATION:
+				if (resolve) return getBase_Association();
+				return basicGetBase_Association();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case CorePackage.HAS_SERVICE__BASE_ASSOCIATION:
+				setBase_Association((Association)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case CorePackage.HAS_SERVICE__BASE_ASSOCIATION:
+				setBase_Association((Association)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case CorePackage.HAS_SERVICE__BASE_ASSOCIATION:
+				return base_Association != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //HasServiceImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/util/CoreAdapterFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/util/CoreAdapterFactory.java
new file mode 100644
index 0000000..70853a2
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/util/CoreAdapterFactory.java
@@ -0,0 +1,152 @@
+/**
+ */
+package IoTML.Hardware.Core.util;
+
+import IoTML.Hardware.Core.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.Alloc.Allocate;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Core.CorePackage
+ * @generated
+ */
+public class CoreAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static CorePackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CoreAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = CorePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CoreSwitch modelSwitch =
+		new CoreSwitch() {
+			public Object caseAllocateResource(AllocateResource object) {
+				return createAllocateResourceAdapter();
+			}
+			public Object caseHasService(HasService object) {
+				return createHasServiceAdapter();
+			}
+			public Object caseAllocate(Allocate object) {
+				return createAllocateAdapter();
+			}
+			public Object defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	public Adapter createAdapter(Notifier target) {
+		return (Adapter)modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Hardware.Core.AllocateResource <em>Allocate Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Hardware.Core.AllocateResource
+	 * @generated
+	 */
+	public Adapter createAllocateResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Hardware.Core.HasService <em>Has Service</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Hardware.Core.HasService
+	 * @generated
+	 */
+	public Adapter createHasServiceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.Alloc.Allocate <em>Allocate</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.Alloc.Allocate
+	 * @generated
+	 */
+	public Adapter createAllocateAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //CoreAdapterFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/util/CoreSwitch.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/util/CoreSwitch.java
new file mode 100644
index 0000000..b2e7003
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/util/CoreSwitch.java
@@ -0,0 +1,165 @@
+/**
+ */
+package IoTML.Hardware.Core.util;
+
+import IoTML.Hardware.Core.*;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.Alloc.Allocate;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Core.CorePackage
+ * @generated
+ */
+public class CoreSwitch {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static CorePackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CoreSwitch() {
+		if (modelPackage == null) {
+			modelPackage = CorePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public Object doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch((EClass)eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case CorePackage.ALLOCATE_RESOURCE: {
+				AllocateResource allocateResource = (AllocateResource)theEObject;
+				Object result = caseAllocateResource(allocateResource);
+				if (result == null) result = caseAllocate(allocateResource);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case CorePackage.HAS_SERVICE: {
+				HasService hasService = (HasService)theEObject;
+				Object result = caseHasService(hasService);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Allocate Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Allocate Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseAllocateResource(AllocateResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Has Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Has Service</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHasService(HasService object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Allocate</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Allocate</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseAllocate(Allocate object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public Object defaultCase(EObject object) {
+		return null;
+	}
+
+} //CoreSwitch
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/util/CoreValidator.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/util/CoreValidator.java
new file mode 100644
index 0000000..066454e
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Core/util/CoreValidator.java
@@ -0,0 +1,179 @@
+/**
+ */
+package IoTML.Hardware.Core.util;
+
+import IoTML.Hardware.Core.*;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.EObjectValidator;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Validator</b> for the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Core.CorePackage
+ * @generated
+ */
+public class CoreValidator extends EObjectValidator {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final CoreValidator INSTANCE = new CoreValidator();
+
+	/**
+	 * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.Diagnostic#getSource()
+	 * @see org.eclipse.emf.common.util.Diagnostic#getCode()
+	 * @generated
+	 */
+	public static final String DIAGNOSTIC_SOURCE = "IoTML.Hardware.Core";
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Allocate Resource C1' of 'Allocate Resource'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int ALLOCATE_RESOURCE__ALLOCATE_RESOURCE_C1 = 1;
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Has Device C1' of 'Has Service'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int HAS_SERVICE__HAS_DEVICE_C1 = 2;
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Has Device C2' of 'Has Service'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int HAS_SERVICE__HAS_DEVICE_C2 = 3;
+
+	/**
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 3;
+
+	/**
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final int DIAGNOSTIC_CODE_COUNT = GENERATED_DIAGNOSTIC_CODE_COUNT;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CoreValidator() {
+		super();
+	}
+
+	/**
+	 * Returns the package of this validator switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EPackage getEPackage() {
+	  return CorePackage.eINSTANCE;
+	}
+
+	/**
+	 * Calls <code>validateXXX</code> for the corresponding classifier of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics, Map context) {
+		switch (classifierID) {
+			case CorePackage.ALLOCATE_RESOURCE:
+				return validateAllocateResource((AllocateResource)value, diagnostics, context);
+			case CorePackage.HAS_SERVICE:
+				return validateHasService((HasService)value, diagnostics, context);
+			default:
+				return true;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateAllocateResource(AllocateResource allocateResource, DiagnosticChain diagnostics, Map context) {
+		boolean result = validate_EveryMultiplicityConforms(allocateResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(allocateResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(allocateResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(allocateResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(allocateResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validateAllocateResource_AllocateResource_C1(allocateResource, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * Validates the AllocateResource_C1 constraint of '<em>Allocate Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateAllocateResource_AllocateResource_C1(AllocateResource allocateResource, DiagnosticChain diagnostics, Map context) {
+		return allocateResource.AllocateResource_C1(diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateHasService(HasService hasService, DiagnosticChain diagnostics, Map context) {
+		boolean result = validate_EveryMultiplicityConforms(hasService, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(hasService, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(hasService, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(hasService, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(hasService, diagnostics, context);
+		if (result || diagnostics != null) result &= validateHasService_HasDevice_C1(hasService, diagnostics, context);
+		if (result || diagnostics != null) result &= validateHasService_HasDevice_C2(hasService, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * Validates the HasDevice_C1 constraint of '<em>Has Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateHasService_HasDevice_C1(HasService hasService, DiagnosticChain diagnostics, Map context) {
+		return hasService.HasDevice_C1(diagnostics, context);
+	}
+
+	/**
+	 * Validates the HasDevice_C2 constraint of '<em>Has Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateHasService_HasDevice_C2(HasService hasService, DiagnosticChain diagnostics, Map context) {
+		return hasService.HasDevice_C2(diagnostics, context);
+	}
+
+} //CoreValidator
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/ConnectedDevice.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/ConnectedDevice.java
new file mode 100644
index 0000000..ab119e7
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/ConnectedDevice.java
@@ -0,0 +1,18 @@
+/**
+ */
+package IoTML.Hardware.Network;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwCommunication.HwCommunicationResource;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Connected Device</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see IoTML.Hardware.Network.NetworkPackage#getConnectedDevice()
+ * @model
+ * @generated
+ */
+public interface ConnectedDevice extends HwCommunicationResource {
+} // ConnectedDevice
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/Gateway.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/Gateway.java
new file mode 100644
index 0000000..4ce6069
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/Gateway.java
@@ -0,0 +1,18 @@
+/**
+ */
+package IoTML.Hardware.Network;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwComputing.HwComputingResource;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Gateway</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see IoTML.Hardware.Network.NetworkPackage#getGateway()
+ * @model
+ * @generated
+ */
+public interface Gateway extends HwComputingResource, ConnectedDevice {
+} // Gateway
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/NetworkFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/NetworkFactory.java
new file mode 100644
index 0000000..6611f9f
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/NetworkFactory.java
@@ -0,0 +1,60 @@
+/**
+ */
+package IoTML.Hardware.Network;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Network.NetworkPackage
+ * @generated
+ */
+public interface NetworkFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	NetworkFactory eINSTANCE = IoTML.Hardware.Network.impl.NetworkFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Connected Device</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Connected Device</em>'.
+	 * @generated
+	 */
+	ConnectedDevice createConnectedDevice();
+
+	/**
+	 * Returns a new object of class '<em>Gateway</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Gateway</em>'.
+	 * @generated
+	 */
+	Gateway createGateway();
+
+	/**
+	 * Returns a new object of class '<em>Server</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Server</em>'.
+	 * @generated
+	 */
+	Server createServer();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	NetworkPackage getNetworkPackage();
+
+} //NetworkFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/NetworkPackage.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/NetworkPackage.java
new file mode 100644
index 0000000..de5e88d
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/NetworkPackage.java
@@ -0,0 +1,634 @@
+/**
+ */
+package IoTML.Hardware.Network;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwCommunication.HwCommunicationPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwComputing.HwComputingPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Network.NetworkFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface NetworkPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "Network";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///IoTML/Hardware/Network.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "IoTML.Hardware.Network";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	NetworkPackage eINSTANCE = IoTML.Hardware.Network.impl.NetworkPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Network.impl.ConnectedDeviceImpl <em>Connected Device</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Network.impl.ConnectedDeviceImpl
+	 * @see IoTML.Hardware.Network.impl.NetworkPackageImpl#getConnectedDevice()
+	 * @generated
+	 */
+	int CONNECTED_DEVICE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Res Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__RES_MULT = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__RES_MULT;
+
+	/**
+	 * The feature id for the '<em><b>Is Protected</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__IS_PROTECTED = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__IS_PROTECTED;
+
+	/**
+	 * The feature id for the '<em><b>Is Active</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__IS_ACTIVE = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__IS_ACTIVE;
+
+	/**
+	 * The feature id for the '<em><b>Base Property</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__BASE_PROPERTY = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__BASE_PROPERTY;
+
+	/**
+	 * The feature id for the '<em><b>Base Instance Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__BASE_INSTANCE_SPECIFICATION = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__BASE_INSTANCE_SPECIFICATION;
+
+	/**
+	 * The feature id for the '<em><b>Base Classifier</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__BASE_CLASSIFIER = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__BASE_CLASSIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Base Lifeline</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__BASE_LIFELINE = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__BASE_LIFELINE;
+
+	/**
+	 * The feature id for the '<em><b>Base Connectable Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__BASE_CONNECTABLE_ELEMENT = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__BASE_CONNECTABLE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__DESCRIPTION = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>PHW Services</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__PHW_SERVICES = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__PHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>RHW Services</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__RHW_SERVICES = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__RHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>Owned HW</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__OWNED_HW = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__OWNED_HW;
+
+	/**
+	 * The feature id for the '<em><b>End Points</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__END_POINTS = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__END_POINTS;
+
+	/**
+	 * The feature id for the '<em><b>Frequency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE__FREQUENCY = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE__FREQUENCY;
+
+	/**
+	 * The number of structural features of the '<em>Connected Device</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CONNECTED_DEVICE_FEATURE_COUNT = HwCommunicationPackage.HW_COMMUNICATION_RESOURCE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Network.impl.GatewayImpl <em>Gateway</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Network.impl.GatewayImpl
+	 * @see IoTML.Hardware.Network.impl.NetworkPackageImpl#getGateway()
+	 * @generated
+	 */
+	int GATEWAY = 1;
+
+	/**
+	 * The feature id for the '<em><b>Res Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__RES_MULT = HwComputingPackage.HW_COMPUTING_RESOURCE__RES_MULT;
+
+	/**
+	 * The feature id for the '<em><b>Is Protected</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__IS_PROTECTED = HwComputingPackage.HW_COMPUTING_RESOURCE__IS_PROTECTED;
+
+	/**
+	 * The feature id for the '<em><b>Is Active</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__IS_ACTIVE = HwComputingPackage.HW_COMPUTING_RESOURCE__IS_ACTIVE;
+
+	/**
+	 * The feature id for the '<em><b>Base Property</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__BASE_PROPERTY = HwComputingPackage.HW_COMPUTING_RESOURCE__BASE_PROPERTY;
+
+	/**
+	 * The feature id for the '<em><b>Base Instance Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__BASE_INSTANCE_SPECIFICATION = HwComputingPackage.HW_COMPUTING_RESOURCE__BASE_INSTANCE_SPECIFICATION;
+
+	/**
+	 * The feature id for the '<em><b>Base Classifier</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__BASE_CLASSIFIER = HwComputingPackage.HW_COMPUTING_RESOURCE__BASE_CLASSIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Base Lifeline</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__BASE_LIFELINE = HwComputingPackage.HW_COMPUTING_RESOURCE__BASE_LIFELINE;
+
+	/**
+	 * The feature id for the '<em><b>Base Connectable Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__BASE_CONNECTABLE_ELEMENT = HwComputingPackage.HW_COMPUTING_RESOURCE__BASE_CONNECTABLE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__DESCRIPTION = HwComputingPackage.HW_COMPUTING_RESOURCE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>PHW Services</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__PHW_SERVICES = HwComputingPackage.HW_COMPUTING_RESOURCE__PHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>RHW Services</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__RHW_SERVICES = HwComputingPackage.HW_COMPUTING_RESOURCE__RHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>Owned HW</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__OWNED_HW = HwComputingPackage.HW_COMPUTING_RESOURCE__OWNED_HW;
+
+	/**
+	 * The feature id for the '<em><b>End Points</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__END_POINTS = HwComputingPackage.HW_COMPUTING_RESOURCE__END_POINTS;
+
+	/**
+	 * The feature id for the '<em><b>Frequency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__FREQUENCY = HwComputingPackage.HW_COMPUTING_RESOURCE__FREQUENCY;
+
+	/**
+	 * The feature id for the '<em><b>Speed Factor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__SPEED_FACTOR = HwComputingPackage.HW_COMPUTING_RESOURCE__SPEED_FACTOR;
+
+	/**
+	 * The feature id for the '<em><b>Main Scheduler</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__MAIN_SCHEDULER = HwComputingPackage.HW_COMPUTING_RESOURCE__MAIN_SCHEDULER;
+
+	/**
+	 * The feature id for the '<em><b>Op Frequencies</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY__OP_FREQUENCIES = HwComputingPackage.HW_COMPUTING_RESOURCE__OP_FREQUENCIES;
+
+	/**
+	 * The number of structural features of the '<em>Gateway</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GATEWAY_FEATURE_COUNT = HwComputingPackage.HW_COMPUTING_RESOURCE_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Network.impl.ServerImpl <em>Server</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Network.impl.ServerImpl
+	 * @see IoTML.Hardware.Network.impl.NetworkPackageImpl#getServer()
+	 * @generated
+	 */
+	int SERVER = 2;
+
+	/**
+	 * The feature id for the '<em><b>Res Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__RES_MULT = HwComputingPackage.HW_COMPUTING_RESOURCE__RES_MULT;
+
+	/**
+	 * The feature id for the '<em><b>Is Protected</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__IS_PROTECTED = HwComputingPackage.HW_COMPUTING_RESOURCE__IS_PROTECTED;
+
+	/**
+	 * The feature id for the '<em><b>Is Active</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__IS_ACTIVE = HwComputingPackage.HW_COMPUTING_RESOURCE__IS_ACTIVE;
+
+	/**
+	 * The feature id for the '<em><b>Base Property</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__BASE_PROPERTY = HwComputingPackage.HW_COMPUTING_RESOURCE__BASE_PROPERTY;
+
+	/**
+	 * The feature id for the '<em><b>Base Instance Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__BASE_INSTANCE_SPECIFICATION = HwComputingPackage.HW_COMPUTING_RESOURCE__BASE_INSTANCE_SPECIFICATION;
+
+	/**
+	 * The feature id for the '<em><b>Base Classifier</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__BASE_CLASSIFIER = HwComputingPackage.HW_COMPUTING_RESOURCE__BASE_CLASSIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Base Lifeline</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__BASE_LIFELINE = HwComputingPackage.HW_COMPUTING_RESOURCE__BASE_LIFELINE;
+
+	/**
+	 * The feature id for the '<em><b>Base Connectable Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__BASE_CONNECTABLE_ELEMENT = HwComputingPackage.HW_COMPUTING_RESOURCE__BASE_CONNECTABLE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__DESCRIPTION = HwComputingPackage.HW_COMPUTING_RESOURCE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>PHW Services</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__PHW_SERVICES = HwComputingPackage.HW_COMPUTING_RESOURCE__PHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>RHW Services</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__RHW_SERVICES = HwComputingPackage.HW_COMPUTING_RESOURCE__RHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>Owned HW</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__OWNED_HW = HwComputingPackage.HW_COMPUTING_RESOURCE__OWNED_HW;
+
+	/**
+	 * The feature id for the '<em><b>End Points</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__END_POINTS = HwComputingPackage.HW_COMPUTING_RESOURCE__END_POINTS;
+
+	/**
+	 * The feature id for the '<em><b>Frequency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__FREQUENCY = HwComputingPackage.HW_COMPUTING_RESOURCE__FREQUENCY;
+
+	/**
+	 * The feature id for the '<em><b>Speed Factor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__SPEED_FACTOR = HwComputingPackage.HW_COMPUTING_RESOURCE__SPEED_FACTOR;
+
+	/**
+	 * The feature id for the '<em><b>Main Scheduler</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__MAIN_SCHEDULER = HwComputingPackage.HW_COMPUTING_RESOURCE__MAIN_SCHEDULER;
+
+	/**
+	 * The feature id for the '<em><b>Op Frequencies</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER__OP_FREQUENCIES = HwComputingPackage.HW_COMPUTING_RESOURCE__OP_FREQUENCIES;
+
+	/**
+	 * The number of structural features of the '<em>Server</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVER_FEATURE_COUNT = HwComputingPackage.HW_COMPUTING_RESOURCE_FEATURE_COUNT + 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Hardware.Network.ConnectedDevice <em>Connected Device</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Connected Device</em>'.
+	 * @see IoTML.Hardware.Network.ConnectedDevice
+	 * @generated
+	 */
+	EClass getConnectedDevice();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Hardware.Network.Gateway <em>Gateway</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Gateway</em>'.
+	 * @see IoTML.Hardware.Network.Gateway
+	 * @generated
+	 */
+	EClass getGateway();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Hardware.Network.Server <em>Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Server</em>'.
+	 * @see IoTML.Hardware.Network.Server
+	 * @generated
+	 */
+	EClass getServer();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	NetworkFactory getNetworkFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Network.impl.ConnectedDeviceImpl <em>Connected Device</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Network.impl.ConnectedDeviceImpl
+		 * @see IoTML.Hardware.Network.impl.NetworkPackageImpl#getConnectedDevice()
+		 * @generated
+		 */
+		EClass CONNECTED_DEVICE = eINSTANCE.getConnectedDevice();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Network.impl.GatewayImpl <em>Gateway</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Network.impl.GatewayImpl
+		 * @see IoTML.Hardware.Network.impl.NetworkPackageImpl#getGateway()
+		 * @generated
+		 */
+		EClass GATEWAY = eINSTANCE.getGateway();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Network.impl.ServerImpl <em>Server</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Network.impl.ServerImpl
+		 * @see IoTML.Hardware.Network.impl.NetworkPackageImpl#getServer()
+		 * @generated
+		 */
+		EClass SERVER = eINSTANCE.getServer();
+
+	}
+
+} //NetworkPackage
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/Server.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/Server.java
new file mode 100644
index 0000000..70039e9
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/Server.java
@@ -0,0 +1,18 @@
+/**
+ */
+package IoTML.Hardware.Network;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwComputing.HwComputingResource;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Server</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see IoTML.Hardware.Network.NetworkPackage#getServer()
+ * @model
+ * @generated
+ */
+public interface Server extends HwComputingResource, ConnectedDevice {
+} // Server
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/ConnectedDeviceImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/ConnectedDeviceImpl.java
new file mode 100644
index 0000000..405f33f
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/ConnectedDeviceImpl.java
@@ -0,0 +1,38 @@
+/**
+ */
+package IoTML.Hardware.Network.impl;
+
+import IoTML.Hardware.Network.ConnectedDevice;
+import IoTML.Hardware.Network.NetworkPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwCommunication.impl.HwCommunicationResourceImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Connected Device</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ConnectedDeviceImpl extends HwCommunicationResourceImpl implements ConnectedDevice {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ConnectedDeviceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return NetworkPackage.Literals.CONNECTED_DEVICE;
+	}
+
+} //ConnectedDeviceImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/GatewayImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/GatewayImpl.java
new file mode 100644
index 0000000..d46d325
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/GatewayImpl.java
@@ -0,0 +1,38 @@
+/**
+ */
+package IoTML.Hardware.Network.impl;
+
+import IoTML.Hardware.Network.Gateway;
+import IoTML.Hardware.Network.NetworkPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwComputing.impl.HwComputingResourceImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Gateway</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class GatewayImpl extends HwComputingResourceImpl implements Gateway {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GatewayImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return NetworkPackage.Literals.GATEWAY;
+	}
+
+} //GatewayImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/NetworkFactoryImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/NetworkFactoryImpl.java
new file mode 100644
index 0000000..c385356
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/NetworkFactoryImpl.java
@@ -0,0 +1,115 @@
+/**
+ */
+package IoTML.Hardware.Network.impl;
+
+import IoTML.Hardware.Network.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NetworkFactoryImpl extends EFactoryImpl implements NetworkFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static NetworkFactory init() {
+		try {
+			NetworkFactory theNetworkFactory = (NetworkFactory)EPackage.Registry.INSTANCE.getEFactory(NetworkPackage.eNS_URI);
+			if (theNetworkFactory != null) {
+				return theNetworkFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new NetworkFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NetworkFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case NetworkPackage.CONNECTED_DEVICE: return createConnectedDevice();
+			case NetworkPackage.GATEWAY: return createGateway();
+			case NetworkPackage.SERVER: return createServer();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ConnectedDevice createConnectedDevice() {
+		ConnectedDeviceImpl connectedDevice = new ConnectedDeviceImpl();
+		return connectedDevice;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Gateway createGateway() {
+		GatewayImpl gateway = new GatewayImpl();
+		return gateway;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Server createServer() {
+		ServerImpl server = new ServerImpl();
+		return server;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NetworkPackage getNetworkPackage() {
+		return (NetworkPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static NetworkPackage getPackage() {
+		return NetworkPackage.eINSTANCE;
+	}
+
+} //NetworkFactoryImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/NetworkPackageImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/NetworkPackageImpl.java
new file mode 100644
index 0000000..07d25b2
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/NetworkPackageImpl.java
@@ -0,0 +1,306 @@
+/**
+ */
+package IoTML.Hardware.Network.impl;
+
+import IoTML.Animate.AnimatePackage;
+
+import IoTML.Animate.impl.AnimatePackageImpl;
+
+import IoTML.Hardware.Actuator.ActuatorPackage;
+
+import IoTML.Hardware.Actuator.impl.ActuatorPackageImpl;
+
+import IoTML.Hardware.Core.CorePackage;
+
+import IoTML.Hardware.Core.impl.CorePackageImpl;
+
+import IoTML.Hardware.Network.ConnectedDevice;
+import IoTML.Hardware.Network.Gateway;
+import IoTML.Hardware.Network.NetworkFactory;
+import IoTML.Hardware.Network.NetworkPackage;
+import IoTML.Hardware.Network.Server;
+
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import IoTML.Hardware.Sensor.impl.SensorPackageImpl;
+
+import IoTML.Hybrid.HybridPackage;
+
+import IoTML.Hybrid.impl.HybridPackageImpl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+
+import IoTML.Software.Artefact.impl.ArtefactPackageImpl;
+
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import IoTML.Software.Core.Structure.impl.StructurePackageImpl;
+
+import IoTML.Software.Resource.ResourcePackage;
+
+import IoTML.Software.Resource.impl.ResourcePackageImpl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.MARTE.MARTEPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwCommunication.HwCommunicationPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwComputing.HwComputingPackage;
+
+import org.eclipse.papyrus.MARTE_Library.BasicNFP_Types.BasicNFP_TypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.GRM_BasicTypes.GRM_BasicTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_DataTypes.MARTE_DataTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_PrimitivesTypes.MARTE_PrimitivesTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MeasurementUnits.MeasurementUnitsPackage;
+
+import org.eclipse.papyrus.MARTE_Library.RS_Library.RS_LibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeLibrary.TimeLibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeTypesLibrary.TimeTypesLibraryPackage;
+
+import org.eclipse.papyrus.sysml14.sysmlPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class NetworkPackageImpl extends EPackageImpl implements NetworkPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass connectedDeviceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass gatewayEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass serverEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see IoTML.Hardware.Network.NetworkPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private NetworkPackageImpl() {
+		super(eNS_URI, NetworkFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link NetworkPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static NetworkPackage init() {
+		if (isInited) return (NetworkPackage)EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI);
+
+		// Obtain or create and register package
+		NetworkPackageImpl theNetworkPackage = (NetworkPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof NetworkPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new NetworkPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		MARTEPackage.eINSTANCE.eClass();
+		MeasurementUnitsPackage.eINSTANCE.eClass();
+		GRM_BasicTypesPackage.eINSTANCE.eClass();
+		MARTE_DataTypesPackage.eINSTANCE.eClass();
+		BasicNFP_TypesPackage.eINSTANCE.eClass();
+		TimeTypesLibraryPackage.eINSTANCE.eClass();
+		TimeLibraryPackage.eINSTANCE.eClass();
+		RS_LibraryPackage.eINSTANCE.eClass();
+		MARTE_PrimitivesTypesPackage.eINSTANCE.eClass();
+		sysmlPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		AnimatePackageImpl theAnimatePackage = (AnimatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) instanceof AnimatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) : AnimatePackage.eINSTANCE);
+		ActuatorPackageImpl theActuatorPackage = (ActuatorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) instanceof ActuatorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) : ActuatorPackage.eINSTANCE);
+		SensorPackageImpl theSensorPackage = (SensorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) instanceof SensorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) : SensorPackage.eINSTANCE);
+		CorePackageImpl theCorePackage = (CorePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) instanceof CorePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) : CorePackage.eINSTANCE);
+		HybridPackageImpl theHybridPackage = (HybridPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) instanceof HybridPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) : HybridPackage.eINSTANCE);
+		ArtefactPackageImpl theArtefactPackage = (ArtefactPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) instanceof ArtefactPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) : ArtefactPackage.eINSTANCE);
+		StructurePackageImpl theStructurePackage = (StructurePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) instanceof StructurePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) : StructurePackage.eINSTANCE);
+		ResourcePackageImpl theResourcePackage = (ResourcePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) instanceof ResourcePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) : ResourcePackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theNetworkPackage.createPackageContents();
+		theAnimatePackage.createPackageContents();
+		theActuatorPackage.createPackageContents();
+		theSensorPackage.createPackageContents();
+		theCorePackage.createPackageContents();
+		theHybridPackage.createPackageContents();
+		theArtefactPackage.createPackageContents();
+		theStructurePackage.createPackageContents();
+		theResourcePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theNetworkPackage.initializePackageContents();
+		theAnimatePackage.initializePackageContents();
+		theActuatorPackage.initializePackageContents();
+		theSensorPackage.initializePackageContents();
+		theCorePackage.initializePackageContents();
+		theHybridPackage.initializePackageContents();
+		theArtefactPackage.initializePackageContents();
+		theStructurePackage.initializePackageContents();
+		theResourcePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theNetworkPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(NetworkPackage.eNS_URI, theNetworkPackage);
+		return theNetworkPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getConnectedDevice() {
+		return connectedDeviceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getGateway() {
+		return gatewayEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getServer() {
+		return serverEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NetworkFactory getNetworkFactory() {
+		return (NetworkFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		connectedDeviceEClass = createEClass(CONNECTED_DEVICE);
+
+		gatewayEClass = createEClass(GATEWAY);
+
+		serverEClass = createEClass(SERVER);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		HwCommunicationPackage theHwCommunicationPackage = (HwCommunicationPackage)EPackage.Registry.INSTANCE.getEPackage(HwCommunicationPackage.eNS_URI);
+		HwComputingPackage theHwComputingPackage = (HwComputingPackage)EPackage.Registry.INSTANCE.getEPackage(HwComputingPackage.eNS_URI);
+
+		// Add supertypes to classes
+		connectedDeviceEClass.getESuperTypes().add(theHwCommunicationPackage.getHwCommunicationResource());
+		gatewayEClass.getESuperTypes().add(theHwComputingPackage.getHwComputingResource());
+		gatewayEClass.getESuperTypes().add(this.getConnectedDevice());
+		serverEClass.getESuperTypes().add(theHwComputingPackage.getHwComputingResource());
+		serverEClass.getESuperTypes().add(this.getConnectedDevice());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(connectedDeviceEClass, ConnectedDevice.class, "ConnectedDevice", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(gatewayEClass, Gateway.class, "Gateway", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(serverEClass, Server.class, "Server", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //NetworkPackageImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/ServerImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/ServerImpl.java
new file mode 100644
index 0000000..ca0a9d3
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/impl/ServerImpl.java
@@ -0,0 +1,38 @@
+/**
+ */
+package IoTML.Hardware.Network.impl;
+
+import IoTML.Hardware.Network.NetworkPackage;
+import IoTML.Hardware.Network.Server;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwComputing.impl.HwComputingResourceImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Server</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ServerImpl extends HwComputingResourceImpl implements Server {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ServerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return NetworkPackage.Literals.SERVER;
+	}
+
+} //ServerImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/util/NetworkAdapterFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/util/NetworkAdapterFactory.java
new file mode 100644
index 0000000..d71174e
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/util/NetworkAdapterFactory.java
@@ -0,0 +1,262 @@
+/**
+ */
+package IoTML.Hardware.Network.util;
+
+import IoTML.Hardware.Network.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwCommunication.HwCommunicationResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwComputing.HwComputingResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ComputingResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Network.NetworkPackage
+ * @generated
+ */
+public class NetworkAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static NetworkPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NetworkAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = NetworkPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NetworkSwitch modelSwitch =
+		new NetworkSwitch() {
+			public Object caseConnectedDevice(ConnectedDevice object) {
+				return createConnectedDeviceAdapter();
+			}
+			public Object caseGateway(Gateway object) {
+				return createGatewayAdapter();
+			}
+			public Object caseServer(Server object) {
+				return createServerAdapter();
+			}
+			public Object caseResource(Resource object) {
+				return createResourceAdapter();
+			}
+			public Object caseHwResource(HwResource object) {
+				return createHwResourceAdapter();
+			}
+			public Object caseHwCommunicationResource(HwCommunicationResource object) {
+				return createHwCommunicationResourceAdapter();
+			}
+			public Object caseProcessingResource(ProcessingResource object) {
+				return createProcessingResourceAdapter();
+			}
+			public Object caseComputingResource(ComputingResource object) {
+				return createComputingResourceAdapter();
+			}
+			public Object caseHwComputingResource(HwComputingResource object) {
+				return createHwComputingResourceAdapter();
+			}
+			public Object defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	public Adapter createAdapter(Notifier target) {
+		return (Adapter)modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Hardware.Network.ConnectedDevice <em>Connected Device</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Hardware.Network.ConnectedDevice
+	 * @generated
+	 */
+	public Adapter createConnectedDeviceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Hardware.Network.Gateway <em>Gateway</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Hardware.Network.Gateway
+	 * @generated
+	 */
+	public Adapter createGatewayAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Hardware.Network.Server <em>Server</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Hardware.Network.Server
+	 * @generated
+	 */
+	public Adapter createServerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource <em>Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource
+	 * @generated
+	 */
+	public Adapter createResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource <em>Hw Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource
+	 * @generated
+	 */
+	public Adapter createHwResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwCommunication.HwCommunicationResource <em>Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwCommunication.HwCommunicationResource
+	 * @generated
+	 */
+	public Adapter createHwCommunicationResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource <em>Processing Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource
+	 * @generated
+	 */
+	public Adapter createProcessingResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ComputingResource <em>Computing Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ComputingResource
+	 * @generated
+	 */
+	public Adapter createComputingResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwComputing.HwComputingResource <em>Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwComputing.HwComputingResource
+	 * @generated
+	 */
+	public Adapter createHwComputingResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //NetworkAdapterFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/util/NetworkSwitch.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/util/NetworkSwitch.java
new file mode 100644
index 0000000..afc4ca4
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Network/util/NetworkSwitch.java
@@ -0,0 +1,285 @@
+/**
+ */
+package IoTML.Hardware.Network.util;
+
+import IoTML.Hardware.Network.*;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwCommunication.HwCommunicationResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwComputing.HwComputingResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ComputingResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Network.NetworkPackage
+ * @generated
+ */
+public class NetworkSwitch {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static NetworkPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NetworkSwitch() {
+		if (modelPackage == null) {
+			modelPackage = NetworkPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public Object doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch((EClass)eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case NetworkPackage.CONNECTED_DEVICE: {
+				ConnectedDevice connectedDevice = (ConnectedDevice)theEObject;
+				Object result = caseConnectedDevice(connectedDevice);
+				if (result == null) result = caseHwCommunicationResource(connectedDevice);
+				if (result == null) result = caseHwResource(connectedDevice);
+				if (result == null) result = caseResource(connectedDevice);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case NetworkPackage.GATEWAY: {
+				Gateway gateway = (Gateway)theEObject;
+				Object result = caseGateway(gateway);
+				if (result == null) result = caseHwComputingResource(gateway);
+				if (result == null) result = caseConnectedDevice(gateway);
+				if (result == null) result = caseComputingResource(gateway);
+				if (result == null) result = caseHwCommunicationResource(gateway);
+				if (result == null) result = caseHwResource(gateway);
+				if (result == null) result = caseProcessingResource(gateway);
+				if (result == null) result = caseResource(gateway);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case NetworkPackage.SERVER: {
+				Server server = (Server)theEObject;
+				Object result = caseServer(server);
+				if (result == null) result = caseHwComputingResource(server);
+				if (result == null) result = caseConnectedDevice(server);
+				if (result == null) result = caseComputingResource(server);
+				if (result == null) result = caseHwCommunicationResource(server);
+				if (result == null) result = caseHwResource(server);
+				if (result == null) result = caseProcessingResource(server);
+				if (result == null) result = caseResource(server);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Connected Device</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Connected Device</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseConnectedDevice(ConnectedDevice object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Gateway</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Gateway</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseGateway(Gateway object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Server</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Server</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseServer(Server object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseResource(Resource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwResource(HwResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwCommunicationResource(HwCommunicationResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Processing Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Processing Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseProcessingResource(ProcessingResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Computing Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Computing Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseComputingResource(ComputingResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwComputingResource(HwComputingResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public Object defaultCase(EObject object) {
+		return null;
+	}
+
+} //NetworkSwitch
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/HwCommonSensor.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/HwCommonSensor.java
new file mode 100644
index 0000000..f173985
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/HwCommonSensor.java
@@ -0,0 +1,135 @@
+/**
+ */
+package IoTML.Hardware.Sensor;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HWSensor;
+
+import org.eclipse.papyrus.sysml14.blocks.ValueType;
+
+import org.eclipse.uml2.uml.Behavior;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Hw Common Sensor</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Hardware.Sensor.HwCommonSensor#getInputValueType <em>Input Value Type</em>}</li>
+ *   <li>{@link IoTML.Hardware.Sensor.HwCommonSensor#getOutputValueType <em>Output Value Type</em>}</li>
+ *   <li>{@link IoTML.Hardware.Sensor.HwCommonSensor#getHwcommonsensor <em>Hwcommonsensor</em>}</li>
+ *   <li>{@link IoTML.Hardware.Sensor.HwCommonSensor#getTransferFunction <em>Transfer Function</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Hardware.Sensor.SensorPackage#getHwCommonSensor()
+ * @model
+ * @generated
+ */
+public interface HwCommonSensor extends HWSensor {
+	/**
+	 * Returns the value of the '<em><b>Input Value Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Input Value Type</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Input Value Type</em>' reference.
+	 * @see #setInputValueType(ValueType)
+	 * @see IoTML.Hardware.Sensor.SensorPackage#getHwCommonSensor_InputValueType()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	ValueType getInputValueType();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Hardware.Sensor.HwCommonSensor#getInputValueType <em>Input Value Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Input Value Type</em>' reference.
+	 * @see #getInputValueType()
+	 * @generated
+	 */
+	void setInputValueType(ValueType value);
+
+	/**
+	 * Returns the value of the '<em><b>Output Value Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Output Value Type</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Output Value Type</em>' reference.
+	 * @see #setOutputValueType(ValueType)
+	 * @see IoTML.Hardware.Sensor.SensorPackage#getHwCommonSensor_OutputValueType()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	ValueType getOutputValueType();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Hardware.Sensor.HwCommonSensor#getOutputValueType <em>Output Value Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Output Value Type</em>' reference.
+	 * @see #getOutputValueType()
+	 * @generated
+	 */
+	void setOutputValueType(ValueType value);
+
+	/**
+	 * Returns the value of the '<em><b>Hwcommonsensor</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Hwcommonsensor</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Hwcommonsensor</em>' reference.
+	 * @see #setHwcommonsensor(HwCommonSensor)
+	 * @see IoTML.Hardware.Sensor.SensorPackage#getHwCommonSensor_Hwcommonsensor()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	HwCommonSensor getHwcommonsensor();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Hardware.Sensor.HwCommonSensor#getHwcommonsensor <em>Hwcommonsensor</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Hwcommonsensor</em>' reference.
+	 * @see #getHwcommonsensor()
+	 * @generated
+	 */
+	void setHwcommonsensor(HwCommonSensor value);
+
+	/**
+	 * Returns the value of the '<em><b>Transfer Function</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Transfer Function</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Transfer Function</em>' reference.
+	 * @see #setTransferFunction(Behavior)
+	 * @see IoTML.Hardware.Sensor.SensorPackage#getHwCommonSensor_TransferFunction()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	Behavior getTransferFunction();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Hardware.Sensor.HwCommonSensor#getTransferFunction <em>Transfer Function</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Transfer Function</em>' reference.
+	 * @see #getTransferFunction()
+	 * @generated
+	 */
+	void setTransferFunction(Behavior value);
+
+} // HwCommonSensor
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/HwRFIDReaderSensor.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/HwRFIDReaderSensor.java
new file mode 100644
index 0000000..ccf9707
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/HwRFIDReaderSensor.java
@@ -0,0 +1,40 @@
+/**
+ */
+package IoTML.Hardware.Sensor;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Hw RFID Reader Sensor</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Hardware.Sensor.HwRFIDReaderSensor#getTag <em>Tag</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Hardware.Sensor.SensorPackage#getHwRFIDReaderSensor()
+ * @model
+ * @generated
+ */
+public interface HwRFIDReaderSensor extends HwCommonSensor {
+	/**
+	 * Returns the value of the '<em><b>Tag</b></em>' reference list.
+	 * The list contents are of type {@link IoTML.Hardware.Sensor.HwTag}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Tag</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Tag</em>' reference list.
+	 * @see IoTML.Hardware.Sensor.SensorPackage#getHwRFIDReaderSensor_Tag()
+	 * @model type="IoTML.Hardware.Sensor.HwTag" ordered="false"
+	 * @generated
+	 */
+	EList getTag();
+
+} // HwRFIDReaderSensor
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/HwTag.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/HwTag.java
new file mode 100644
index 0000000..1cb7d81
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/HwTag.java
@@ -0,0 +1,50 @@
+/**
+ */
+package IoTML.Hardware.Sensor;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwI_O;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Hw Tag</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Hardware.Sensor.HwTag#getTageFrequency <em>Tage Frequency</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Hardware.Sensor.SensorPackage#getHwTag()
+ * @model
+ * @generated
+ */
+public interface HwTag extends HwI_O {
+	/**
+	 * Returns the value of the '<em><b>Tage Frequency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Tage Frequency</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Tage Frequency</em>' attribute.
+	 * @see #setTageFrequency(double)
+	 * @see IoTML.Hardware.Sensor.SensorPackage#getHwTag_TageFrequency()
+	 * @model dataType="org.eclipse.uml2.types.Real" ordered="false"
+	 * @generated
+	 */
+	double getTageFrequency();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Hardware.Sensor.HwTag#getTageFrequency <em>Tage Frequency</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Tage Frequency</em>' attribute.
+	 * @see #getTageFrequency()
+	 * @generated
+	 */
+	void setTageFrequency(double value);
+
+} // HwTag
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/SensorFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/SensorFactory.java
new file mode 100644
index 0000000..d1c0bd2
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/SensorFactory.java
@@ -0,0 +1,60 @@
+/**
+ */
+package IoTML.Hardware.Sensor;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Sensor.SensorPackage
+ * @generated
+ */
+public interface SensorFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	SensorFactory eINSTANCE = IoTML.Hardware.Sensor.impl.SensorFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Hw Common Sensor</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Hw Common Sensor</em>'.
+	 * @generated
+	 */
+	HwCommonSensor createHwCommonSensor();
+
+	/**
+	 * Returns a new object of class '<em>Hw RFID Reader Sensor</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Hw RFID Reader Sensor</em>'.
+	 * @generated
+	 */
+	HwRFIDReaderSensor createHwRFIDReaderSensor();
+
+	/**
+	 * Returns a new object of class '<em>Hw Tag</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Hw Tag</em>'.
+	 * @generated
+	 */
+	HwTag createHwTag();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	SensorPackage getSensorPackage();
+
+} //SensorFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/SensorPackage.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/SensorPackage.java
new file mode 100644
index 0000000..ecad2a9
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/SensorPackage.java
@@ -0,0 +1,838 @@
+/**
+ */
+package IoTML.Hardware.Sensor;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevicePackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Sensor.SensorFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface SensorPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "Sensor";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///IoTML/Hardware/Sensor.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "IoTML.Hardware.Sensor";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	SensorPackage eINSTANCE = IoTML.Hardware.Sensor.impl.SensorPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Sensor.impl.HwCommonSensorImpl <em>Hw Common Sensor</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Sensor.impl.HwCommonSensorImpl
+	 * @see IoTML.Hardware.Sensor.impl.SensorPackageImpl#getHwCommonSensor()
+	 * @generated
+	 */
+	int HW_COMMON_SENSOR = 0;
+
+	/**
+	 * The feature id for the '<em><b>Res Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__RES_MULT = HwDevicePackage.HW_SENSOR__RES_MULT;
+
+	/**
+	 * The feature id for the '<em><b>Is Protected</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__IS_PROTECTED = HwDevicePackage.HW_SENSOR__IS_PROTECTED;
+
+	/**
+	 * The feature id for the '<em><b>Is Active</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__IS_ACTIVE = HwDevicePackage.HW_SENSOR__IS_ACTIVE;
+
+	/**
+	 * The feature id for the '<em><b>Base Property</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__BASE_PROPERTY = HwDevicePackage.HW_SENSOR__BASE_PROPERTY;
+
+	/**
+	 * The feature id for the '<em><b>Base Instance Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__BASE_INSTANCE_SPECIFICATION = HwDevicePackage.HW_SENSOR__BASE_INSTANCE_SPECIFICATION;
+
+	/**
+	 * The feature id for the '<em><b>Base Classifier</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__BASE_CLASSIFIER = HwDevicePackage.HW_SENSOR__BASE_CLASSIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Base Lifeline</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__BASE_LIFELINE = HwDevicePackage.HW_SENSOR__BASE_LIFELINE;
+
+	/**
+	 * The feature id for the '<em><b>Base Connectable Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__BASE_CONNECTABLE_ELEMENT = HwDevicePackage.HW_SENSOR__BASE_CONNECTABLE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__DESCRIPTION = HwDevicePackage.HW_SENSOR__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>PHW Services</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__PHW_SERVICES = HwDevicePackage.HW_SENSOR__PHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>RHW Services</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__RHW_SERVICES = HwDevicePackage.HW_SENSOR__RHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>Owned HW</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__OWNED_HW = HwDevicePackage.HW_SENSOR__OWNED_HW;
+
+	/**
+	 * The feature id for the '<em><b>End Points</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__END_POINTS = HwDevicePackage.HW_SENSOR__END_POINTS;
+
+	/**
+	 * The feature id for the '<em><b>Frequency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__FREQUENCY = HwDevicePackage.HW_SENSOR__FREQUENCY;
+
+	/**
+	 * The feature id for the '<em><b>Speed Factor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__SPEED_FACTOR = HwDevicePackage.HW_SENSOR__SPEED_FACTOR;
+
+	/**
+	 * The feature id for the '<em><b>Main Scheduler</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__MAIN_SCHEDULER = HwDevicePackage.HW_SENSOR__MAIN_SCHEDULER;
+
+	/**
+	 * The feature id for the '<em><b>Input Value Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__INPUT_VALUE_TYPE = HwDevicePackage.HW_SENSOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Output Value Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__OUTPUT_VALUE_TYPE = HwDevicePackage.HW_SENSOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Hwcommonsensor</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__HWCOMMONSENSOR = HwDevicePackage.HW_SENSOR_FEATURE_COUNT + 2;
+
+	/**
+	 * The feature id for the '<em><b>Transfer Function</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR__TRANSFER_FUNCTION = HwDevicePackage.HW_SENSOR_FEATURE_COUNT + 3;
+
+	/**
+	 * The number of structural features of the '<em>Hw Common Sensor</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_COMMON_SENSOR_FEATURE_COUNT = HwDevicePackage.HW_SENSOR_FEATURE_COUNT + 4;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Sensor.impl.HwRFIDReaderSensorImpl <em>Hw RFID Reader Sensor</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Sensor.impl.HwRFIDReaderSensorImpl
+	 * @see IoTML.Hardware.Sensor.impl.SensorPackageImpl#getHwRFIDReaderSensor()
+	 * @generated
+	 */
+	int HW_RFID_READER_SENSOR = 1;
+
+	/**
+	 * The feature id for the '<em><b>Res Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__RES_MULT = HW_COMMON_SENSOR__RES_MULT;
+
+	/**
+	 * The feature id for the '<em><b>Is Protected</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__IS_PROTECTED = HW_COMMON_SENSOR__IS_PROTECTED;
+
+	/**
+	 * The feature id for the '<em><b>Is Active</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__IS_ACTIVE = HW_COMMON_SENSOR__IS_ACTIVE;
+
+	/**
+	 * The feature id for the '<em><b>Base Property</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__BASE_PROPERTY = HW_COMMON_SENSOR__BASE_PROPERTY;
+
+	/**
+	 * The feature id for the '<em><b>Base Instance Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__BASE_INSTANCE_SPECIFICATION = HW_COMMON_SENSOR__BASE_INSTANCE_SPECIFICATION;
+
+	/**
+	 * The feature id for the '<em><b>Base Classifier</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__BASE_CLASSIFIER = HW_COMMON_SENSOR__BASE_CLASSIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Base Lifeline</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__BASE_LIFELINE = HW_COMMON_SENSOR__BASE_LIFELINE;
+
+	/**
+	 * The feature id for the '<em><b>Base Connectable Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__BASE_CONNECTABLE_ELEMENT = HW_COMMON_SENSOR__BASE_CONNECTABLE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__DESCRIPTION = HW_COMMON_SENSOR__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>PHW Services</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__PHW_SERVICES = HW_COMMON_SENSOR__PHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>RHW Services</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__RHW_SERVICES = HW_COMMON_SENSOR__RHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>Owned HW</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__OWNED_HW = HW_COMMON_SENSOR__OWNED_HW;
+
+	/**
+	 * The feature id for the '<em><b>End Points</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__END_POINTS = HW_COMMON_SENSOR__END_POINTS;
+
+	/**
+	 * The feature id for the '<em><b>Frequency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__FREQUENCY = HW_COMMON_SENSOR__FREQUENCY;
+
+	/**
+	 * The feature id for the '<em><b>Speed Factor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__SPEED_FACTOR = HW_COMMON_SENSOR__SPEED_FACTOR;
+
+	/**
+	 * The feature id for the '<em><b>Main Scheduler</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__MAIN_SCHEDULER = HW_COMMON_SENSOR__MAIN_SCHEDULER;
+
+	/**
+	 * The feature id for the '<em><b>Input Value Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__INPUT_VALUE_TYPE = HW_COMMON_SENSOR__INPUT_VALUE_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Output Value Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__OUTPUT_VALUE_TYPE = HW_COMMON_SENSOR__OUTPUT_VALUE_TYPE;
+
+	/**
+	 * The feature id for the '<em><b>Hwcommonsensor</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__HWCOMMONSENSOR = HW_COMMON_SENSOR__HWCOMMONSENSOR;
+
+	/**
+	 * The feature id for the '<em><b>Transfer Function</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__TRANSFER_FUNCTION = HW_COMMON_SENSOR__TRANSFER_FUNCTION;
+
+	/**
+	 * The feature id for the '<em><b>Tag</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR__TAG = HW_COMMON_SENSOR_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Hw RFID Reader Sensor</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_RFID_READER_SENSOR_FEATURE_COUNT = HW_COMMON_SENSOR_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hardware.Sensor.impl.HwTagImpl <em>Hw Tag</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hardware.Sensor.impl.HwTagImpl
+	 * @see IoTML.Hardware.Sensor.impl.SensorPackageImpl#getHwTag()
+	 * @generated
+	 */
+	int HW_TAG = 2;
+
+	/**
+	 * The feature id for the '<em><b>Res Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__RES_MULT = HwDevicePackage.HW_IO__RES_MULT;
+
+	/**
+	 * The feature id for the '<em><b>Is Protected</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__IS_PROTECTED = HwDevicePackage.HW_IO__IS_PROTECTED;
+
+	/**
+	 * The feature id for the '<em><b>Is Active</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__IS_ACTIVE = HwDevicePackage.HW_IO__IS_ACTIVE;
+
+	/**
+	 * The feature id for the '<em><b>Base Property</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__BASE_PROPERTY = HwDevicePackage.HW_IO__BASE_PROPERTY;
+
+	/**
+	 * The feature id for the '<em><b>Base Instance Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__BASE_INSTANCE_SPECIFICATION = HwDevicePackage.HW_IO__BASE_INSTANCE_SPECIFICATION;
+
+	/**
+	 * The feature id for the '<em><b>Base Classifier</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__BASE_CLASSIFIER = HwDevicePackage.HW_IO__BASE_CLASSIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Base Lifeline</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__BASE_LIFELINE = HwDevicePackage.HW_IO__BASE_LIFELINE;
+
+	/**
+	 * The feature id for the '<em><b>Base Connectable Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__BASE_CONNECTABLE_ELEMENT = HwDevicePackage.HW_IO__BASE_CONNECTABLE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__DESCRIPTION = HwDevicePackage.HW_IO__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>PHW Services</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__PHW_SERVICES = HwDevicePackage.HW_IO__PHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>RHW Services</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__RHW_SERVICES = HwDevicePackage.HW_IO__RHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>Owned HW</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__OWNED_HW = HwDevicePackage.HW_IO__OWNED_HW;
+
+	/**
+	 * The feature id for the '<em><b>End Points</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__END_POINTS = HwDevicePackage.HW_IO__END_POINTS;
+
+	/**
+	 * The feature id for the '<em><b>Frequency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__FREQUENCY = HwDevicePackage.HW_IO__FREQUENCY;
+
+	/**
+	 * The feature id for the '<em><b>Speed Factor</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__SPEED_FACTOR = HwDevicePackage.HW_IO__SPEED_FACTOR;
+
+	/**
+	 * The feature id for the '<em><b>Main Scheduler</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__MAIN_SCHEDULER = HwDevicePackage.HW_IO__MAIN_SCHEDULER;
+
+	/**
+	 * The feature id for the '<em><b>Tage Frequency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG__TAGE_FREQUENCY = HwDevicePackage.HW_IO_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Hw Tag</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int HW_TAG_FEATURE_COUNT = HwDevicePackage.HW_IO_FEATURE_COUNT + 1;
+
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Hardware.Sensor.HwCommonSensor <em>Hw Common Sensor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Hw Common Sensor</em>'.
+	 * @see IoTML.Hardware.Sensor.HwCommonSensor
+	 * @generated
+	 */
+	EClass getHwCommonSensor();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Hardware.Sensor.HwCommonSensor#getInputValueType <em>Input Value Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Input Value Type</em>'.
+	 * @see IoTML.Hardware.Sensor.HwCommonSensor#getInputValueType()
+	 * @see #getHwCommonSensor()
+	 * @generated
+	 */
+	EReference getHwCommonSensor_InputValueType();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Hardware.Sensor.HwCommonSensor#getOutputValueType <em>Output Value Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Output Value Type</em>'.
+	 * @see IoTML.Hardware.Sensor.HwCommonSensor#getOutputValueType()
+	 * @see #getHwCommonSensor()
+	 * @generated
+	 */
+	EReference getHwCommonSensor_OutputValueType();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Hardware.Sensor.HwCommonSensor#getHwcommonsensor <em>Hwcommonsensor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Hwcommonsensor</em>'.
+	 * @see IoTML.Hardware.Sensor.HwCommonSensor#getHwcommonsensor()
+	 * @see #getHwCommonSensor()
+	 * @generated
+	 */
+	EReference getHwCommonSensor_Hwcommonsensor();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Hardware.Sensor.HwCommonSensor#getTransferFunction <em>Transfer Function</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Transfer Function</em>'.
+	 * @see IoTML.Hardware.Sensor.HwCommonSensor#getTransferFunction()
+	 * @see #getHwCommonSensor()
+	 * @generated
+	 */
+	EReference getHwCommonSensor_TransferFunction();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Hardware.Sensor.HwRFIDReaderSensor <em>Hw RFID Reader Sensor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Hw RFID Reader Sensor</em>'.
+	 * @see IoTML.Hardware.Sensor.HwRFIDReaderSensor
+	 * @generated
+	 */
+	EClass getHwRFIDReaderSensor();
+
+	/**
+	 * Returns the meta object for the reference list '{@link IoTML.Hardware.Sensor.HwRFIDReaderSensor#getTag <em>Tag</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Tag</em>'.
+	 * @see IoTML.Hardware.Sensor.HwRFIDReaderSensor#getTag()
+	 * @see #getHwRFIDReaderSensor()
+	 * @generated
+	 */
+	EReference getHwRFIDReaderSensor_Tag();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Hardware.Sensor.HwTag <em>Hw Tag</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Hw Tag</em>'.
+	 * @see IoTML.Hardware.Sensor.HwTag
+	 * @generated
+	 */
+	EClass getHwTag();
+
+	/**
+	 * Returns the meta object for the attribute '{@link IoTML.Hardware.Sensor.HwTag#getTageFrequency <em>Tage Frequency</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Tage Frequency</em>'.
+	 * @see IoTML.Hardware.Sensor.HwTag#getTageFrequency()
+	 * @see #getHwTag()
+	 * @generated
+	 */
+	EAttribute getHwTag_TageFrequency();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	SensorFactory getSensorFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Sensor.impl.HwCommonSensorImpl <em>Hw Common Sensor</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Sensor.impl.HwCommonSensorImpl
+		 * @see IoTML.Hardware.Sensor.impl.SensorPackageImpl#getHwCommonSensor()
+		 * @generated
+		 */
+		EClass HW_COMMON_SENSOR = eINSTANCE.getHwCommonSensor();
+
+		/**
+		 * The meta object literal for the '<em><b>Input Value Type</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference HW_COMMON_SENSOR__INPUT_VALUE_TYPE = eINSTANCE.getHwCommonSensor_InputValueType();
+
+		/**
+		 * The meta object literal for the '<em><b>Output Value Type</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference HW_COMMON_SENSOR__OUTPUT_VALUE_TYPE = eINSTANCE.getHwCommonSensor_OutputValueType();
+
+		/**
+		 * The meta object literal for the '<em><b>Hwcommonsensor</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference HW_COMMON_SENSOR__HWCOMMONSENSOR = eINSTANCE.getHwCommonSensor_Hwcommonsensor();
+
+		/**
+		 * The meta object literal for the '<em><b>Transfer Function</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference HW_COMMON_SENSOR__TRANSFER_FUNCTION = eINSTANCE.getHwCommonSensor_TransferFunction();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Sensor.impl.HwRFIDReaderSensorImpl <em>Hw RFID Reader Sensor</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Sensor.impl.HwRFIDReaderSensorImpl
+		 * @see IoTML.Hardware.Sensor.impl.SensorPackageImpl#getHwRFIDReaderSensor()
+		 * @generated
+		 */
+		EClass HW_RFID_READER_SENSOR = eINSTANCE.getHwRFIDReaderSensor();
+
+		/**
+		 * The meta object literal for the '<em><b>Tag</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference HW_RFID_READER_SENSOR__TAG = eINSTANCE.getHwRFIDReaderSensor_Tag();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Hardware.Sensor.impl.HwTagImpl <em>Hw Tag</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hardware.Sensor.impl.HwTagImpl
+		 * @see IoTML.Hardware.Sensor.impl.SensorPackageImpl#getHwTag()
+		 * @generated
+		 */
+		EClass HW_TAG = eINSTANCE.getHwTag();
+
+		/**
+		 * The meta object literal for the '<em><b>Tage Frequency</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute HW_TAG__TAGE_FREQUENCY = eINSTANCE.getHwTag_TageFrequency();
+
+	}
+
+} //SensorPackage
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/HwCommonSensorImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/HwCommonSensorImpl.java
new file mode 100644
index 0000000..5307e45
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/HwCommonSensorImpl.java
@@ -0,0 +1,336 @@
+/**
+ */
+package IoTML.Hardware.Sensor.impl;
+
+import IoTML.Hardware.Sensor.HwCommonSensor;
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.impl.HWSensorImpl;
+
+import org.eclipse.papyrus.sysml14.blocks.ValueType;
+
+import org.eclipse.uml2.uml.Behavior;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Hw Common Sensor</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Hardware.Sensor.impl.HwCommonSensorImpl#getInputValueType <em>Input Value Type</em>}</li>
+ *   <li>{@link IoTML.Hardware.Sensor.impl.HwCommonSensorImpl#getOutputValueType <em>Output Value Type</em>}</li>
+ *   <li>{@link IoTML.Hardware.Sensor.impl.HwCommonSensorImpl#getHwcommonsensor <em>Hwcommonsensor</em>}</li>
+ *   <li>{@link IoTML.Hardware.Sensor.impl.HwCommonSensorImpl#getTransferFunction <em>Transfer Function</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class HwCommonSensorImpl extends HWSensorImpl implements HwCommonSensor {
+	/**
+	 * The cached value of the '{@link #getInputValueType() <em>Input Value Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getInputValueType()
+	 * @generated
+	 * @ordered
+	 */
+	protected ValueType inputValueType;
+
+	/**
+	 * The cached value of the '{@link #getOutputValueType() <em>Output Value Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOutputValueType()
+	 * @generated
+	 * @ordered
+	 */
+	protected ValueType outputValueType;
+
+	/**
+	 * The cached value of the '{@link #getHwcommonsensor() <em>Hwcommonsensor</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getHwcommonsensor()
+	 * @generated
+	 * @ordered
+	 */
+	protected HwCommonSensor hwcommonsensor;
+
+	/**
+	 * The cached value of the '{@link #getTransferFunction() <em>Transfer Function</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTransferFunction()
+	 * @generated
+	 * @ordered
+	 */
+	protected Behavior transferFunction;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected HwCommonSensorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return SensorPackage.Literals.HW_COMMON_SENSOR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ValueType getInputValueType() {
+		if (inputValueType != null && inputValueType.eIsProxy()) {
+			InternalEObject oldInputValueType = (InternalEObject)inputValueType;
+			inputValueType = (ValueType)eResolveProxy(oldInputValueType);
+			if (inputValueType != oldInputValueType) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SensorPackage.HW_COMMON_SENSOR__INPUT_VALUE_TYPE, oldInputValueType, inputValueType));
+			}
+		}
+		return inputValueType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ValueType basicGetInputValueType() {
+		return inputValueType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setInputValueType(ValueType newInputValueType) {
+		ValueType oldInputValueType = inputValueType;
+		inputValueType = newInputValueType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SensorPackage.HW_COMMON_SENSOR__INPUT_VALUE_TYPE, oldInputValueType, inputValueType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ValueType getOutputValueType() {
+		if (outputValueType != null && outputValueType.eIsProxy()) {
+			InternalEObject oldOutputValueType = (InternalEObject)outputValueType;
+			outputValueType = (ValueType)eResolveProxy(oldOutputValueType);
+			if (outputValueType != oldOutputValueType) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SensorPackage.HW_COMMON_SENSOR__OUTPUT_VALUE_TYPE, oldOutputValueType, outputValueType));
+			}
+		}
+		return outputValueType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ValueType basicGetOutputValueType() {
+		return outputValueType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOutputValueType(ValueType newOutputValueType) {
+		ValueType oldOutputValueType = outputValueType;
+		outputValueType = newOutputValueType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SensorPackage.HW_COMMON_SENSOR__OUTPUT_VALUE_TYPE, oldOutputValueType, outputValueType));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HwCommonSensor getHwcommonsensor() {
+		if (hwcommonsensor != null && hwcommonsensor.eIsProxy()) {
+			InternalEObject oldHwcommonsensor = (InternalEObject)hwcommonsensor;
+			hwcommonsensor = (HwCommonSensor)eResolveProxy(oldHwcommonsensor);
+			if (hwcommonsensor != oldHwcommonsensor) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SensorPackage.HW_COMMON_SENSOR__HWCOMMONSENSOR, oldHwcommonsensor, hwcommonsensor));
+			}
+		}
+		return hwcommonsensor;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HwCommonSensor basicGetHwcommonsensor() {
+		return hwcommonsensor;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setHwcommonsensor(HwCommonSensor newHwcommonsensor) {
+		HwCommonSensor oldHwcommonsensor = hwcommonsensor;
+		hwcommonsensor = newHwcommonsensor;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SensorPackage.HW_COMMON_SENSOR__HWCOMMONSENSOR, oldHwcommonsensor, hwcommonsensor));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Behavior getTransferFunction() {
+		if (transferFunction != null && transferFunction.eIsProxy()) {
+			InternalEObject oldTransferFunction = (InternalEObject)transferFunction;
+			transferFunction = (Behavior)eResolveProxy(oldTransferFunction);
+			if (transferFunction != oldTransferFunction) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SensorPackage.HW_COMMON_SENSOR__TRANSFER_FUNCTION, oldTransferFunction, transferFunction));
+			}
+		}
+		return transferFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Behavior basicGetTransferFunction() {
+		return transferFunction;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTransferFunction(Behavior newTransferFunction) {
+		Behavior oldTransferFunction = transferFunction;
+		transferFunction = newTransferFunction;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SensorPackage.HW_COMMON_SENSOR__TRANSFER_FUNCTION, oldTransferFunction, transferFunction));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case SensorPackage.HW_COMMON_SENSOR__INPUT_VALUE_TYPE:
+				if (resolve) return getInputValueType();
+				return basicGetInputValueType();
+			case SensorPackage.HW_COMMON_SENSOR__OUTPUT_VALUE_TYPE:
+				if (resolve) return getOutputValueType();
+				return basicGetOutputValueType();
+			case SensorPackage.HW_COMMON_SENSOR__HWCOMMONSENSOR:
+				if (resolve) return getHwcommonsensor();
+				return basicGetHwcommonsensor();
+			case SensorPackage.HW_COMMON_SENSOR__TRANSFER_FUNCTION:
+				if (resolve) return getTransferFunction();
+				return basicGetTransferFunction();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case SensorPackage.HW_COMMON_SENSOR__INPUT_VALUE_TYPE:
+				setInputValueType((ValueType)newValue);
+				return;
+			case SensorPackage.HW_COMMON_SENSOR__OUTPUT_VALUE_TYPE:
+				setOutputValueType((ValueType)newValue);
+				return;
+			case SensorPackage.HW_COMMON_SENSOR__HWCOMMONSENSOR:
+				setHwcommonsensor((HwCommonSensor)newValue);
+				return;
+			case SensorPackage.HW_COMMON_SENSOR__TRANSFER_FUNCTION:
+				setTransferFunction((Behavior)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case SensorPackage.HW_COMMON_SENSOR__INPUT_VALUE_TYPE:
+				setInputValueType((ValueType)null);
+				return;
+			case SensorPackage.HW_COMMON_SENSOR__OUTPUT_VALUE_TYPE:
+				setOutputValueType((ValueType)null);
+				return;
+			case SensorPackage.HW_COMMON_SENSOR__HWCOMMONSENSOR:
+				setHwcommonsensor((HwCommonSensor)null);
+				return;
+			case SensorPackage.HW_COMMON_SENSOR__TRANSFER_FUNCTION:
+				setTransferFunction((Behavior)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case SensorPackage.HW_COMMON_SENSOR__INPUT_VALUE_TYPE:
+				return inputValueType != null;
+			case SensorPackage.HW_COMMON_SENSOR__OUTPUT_VALUE_TYPE:
+				return outputValueType != null;
+			case SensorPackage.HW_COMMON_SENSOR__HWCOMMONSENSOR:
+				return hwcommonsensor != null;
+			case SensorPackage.HW_COMMON_SENSOR__TRANSFER_FUNCTION:
+				return transferFunction != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //HwCommonSensorImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/HwRFIDReaderSensorImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/HwRFIDReaderSensorImpl.java
new file mode 100644
index 0000000..dbd2bdb
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/HwRFIDReaderSensorImpl.java
@@ -0,0 +1,126 @@
+/**
+ */
+package IoTML.Hardware.Sensor.impl;
+
+import IoTML.Hardware.Sensor.HwRFIDReaderSensor;
+import IoTML.Hardware.Sensor.HwTag;
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Hw RFID Reader Sensor</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Hardware.Sensor.impl.HwRFIDReaderSensorImpl#getTag <em>Tag</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class HwRFIDReaderSensorImpl extends HwCommonSensorImpl implements HwRFIDReaderSensor {
+	/**
+	 * The cached value of the '{@link #getTag() <em>Tag</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTag()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList tag;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected HwRFIDReaderSensorImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return SensorPackage.Literals.HW_RFID_READER_SENSOR;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getTag() {
+		if (tag == null) {
+			tag = new EObjectResolvingEList(HwTag.class, this, SensorPackage.HW_RFID_READER_SENSOR__TAG);
+		}
+		return tag;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case SensorPackage.HW_RFID_READER_SENSOR__TAG:
+				return getTag();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case SensorPackage.HW_RFID_READER_SENSOR__TAG:
+				getTag().clear();
+				getTag().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case SensorPackage.HW_RFID_READER_SENSOR__TAG:
+				getTag().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case SensorPackage.HW_RFID_READER_SENSOR__TAG:
+				return tag != null && !tag.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //HwRFIDReaderSensorImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/HwTagImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/HwTagImpl.java
new file mode 100644
index 0000000..687f7e6
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/HwTagImpl.java
@@ -0,0 +1,158 @@
+/**
+ */
+package IoTML.Hardware.Sensor.impl;
+
+import IoTML.Hardware.Sensor.HwTag;
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.impl.HwI_OImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Hw Tag</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Hardware.Sensor.impl.HwTagImpl#getTageFrequency <em>Tage Frequency</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class HwTagImpl extends HwI_OImpl implements HwTag {
+	/**
+	 * The default value of the '{@link #getTageFrequency() <em>Tage Frequency</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTageFrequency()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final double TAGE_FREQUENCY_EDEFAULT = 0.0;
+
+	/**
+	 * The cached value of the '{@link #getTageFrequency() <em>Tage Frequency</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTageFrequency()
+	 * @generated
+	 * @ordered
+	 */
+	protected double tageFrequency = TAGE_FREQUENCY_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected HwTagImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return SensorPackage.Literals.HW_TAG;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public double getTageFrequency() {
+		return tageFrequency;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setTageFrequency(double newTageFrequency) {
+		double oldTageFrequency = tageFrequency;
+		tageFrequency = newTageFrequency;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SensorPackage.HW_TAG__TAGE_FREQUENCY, oldTageFrequency, tageFrequency));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case SensorPackage.HW_TAG__TAGE_FREQUENCY:
+				return new Double(getTageFrequency());
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case SensorPackage.HW_TAG__TAGE_FREQUENCY:
+				setTageFrequency(((Double)newValue).doubleValue());
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case SensorPackage.HW_TAG__TAGE_FREQUENCY:
+				setTageFrequency(TAGE_FREQUENCY_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case SensorPackage.HW_TAG__TAGE_FREQUENCY:
+				return tageFrequency != TAGE_FREQUENCY_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (tageFrequency: ");
+		result.append(tageFrequency);
+		result.append(')');
+		return result.toString();
+	}
+
+} //HwTagImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/SensorFactoryImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/SensorFactoryImpl.java
new file mode 100644
index 0000000..e0d2b1d
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/SensorFactoryImpl.java
@@ -0,0 +1,115 @@
+/**
+ */
+package IoTML.Hardware.Sensor.impl;
+
+import IoTML.Hardware.Sensor.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SensorFactoryImpl extends EFactoryImpl implements SensorFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static SensorFactory init() {
+		try {
+			SensorFactory theSensorFactory = (SensorFactory)EPackage.Registry.INSTANCE.getEFactory(SensorPackage.eNS_URI);
+			if (theSensorFactory != null) {
+				return theSensorFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new SensorFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SensorFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case SensorPackage.HW_COMMON_SENSOR: return createHwCommonSensor();
+			case SensorPackage.HW_RFID_READER_SENSOR: return createHwRFIDReaderSensor();
+			case SensorPackage.HW_TAG: return createHwTag();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HwCommonSensor createHwCommonSensor() {
+		HwCommonSensorImpl hwCommonSensor = new HwCommonSensorImpl();
+		return hwCommonSensor;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HwRFIDReaderSensor createHwRFIDReaderSensor() {
+		HwRFIDReaderSensorImpl hwRFIDReaderSensor = new HwRFIDReaderSensorImpl();
+		return hwRFIDReaderSensor;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HwTag createHwTag() {
+		HwTagImpl hwTag = new HwTagImpl();
+		return hwTag;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SensorPackage getSensorPackage() {
+		return (SensorPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static SensorPackage getPackage() {
+		return SensorPackage.eINSTANCE;
+	}
+
+} //SensorFactoryImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/SensorPackageImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/SensorPackageImpl.java
new file mode 100644
index 0000000..d135ba2
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/impl/SensorPackageImpl.java
@@ -0,0 +1,378 @@
+/**
+ */
+package IoTML.Hardware.Sensor.impl;
+
+import IoTML.Animate.AnimatePackage;
+
+import IoTML.Animate.impl.AnimatePackageImpl;
+
+import IoTML.Hardware.Actuator.ActuatorPackage;
+
+import IoTML.Hardware.Actuator.impl.ActuatorPackageImpl;
+
+import IoTML.Hardware.Core.CorePackage;
+
+import IoTML.Hardware.Core.impl.CorePackageImpl;
+
+import IoTML.Hardware.Network.NetworkPackage;
+
+import IoTML.Hardware.Network.impl.NetworkPackageImpl;
+
+import IoTML.Hardware.Sensor.HwCommonSensor;
+import IoTML.Hardware.Sensor.HwRFIDReaderSensor;
+import IoTML.Hardware.Sensor.HwTag;
+import IoTML.Hardware.Sensor.SensorFactory;
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import IoTML.Hybrid.HybridPackage;
+
+import IoTML.Hybrid.impl.HybridPackageImpl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+
+import IoTML.Software.Artefact.impl.ArtefactPackageImpl;
+
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import IoTML.Software.Core.Structure.impl.StructurePackageImpl;
+
+import IoTML.Software.Resource.ResourcePackage;
+
+import IoTML.Software.Resource.impl.ResourcePackageImpl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.MARTE.MARTEPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevicePackage;
+
+import org.eclipse.papyrus.MARTE_Library.BasicNFP_Types.BasicNFP_TypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.GRM_BasicTypes.GRM_BasicTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_DataTypes.MARTE_DataTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_PrimitivesTypes.MARTE_PrimitivesTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MeasurementUnits.MeasurementUnitsPackage;
+
+import org.eclipse.papyrus.MARTE_Library.RS_Library.RS_LibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeLibrary.TimeLibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeTypesLibrary.TimeTypesLibraryPackage;
+
+import org.eclipse.papyrus.sysml14.blocks.BlocksPackage;
+
+import org.eclipse.papyrus.sysml14.sysmlPackage;
+
+import org.eclipse.uml2.types.TypesPackage;
+
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SensorPackageImpl extends EPackageImpl implements SensorPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass hwCommonSensorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass hwRFIDReaderSensorEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass hwTagEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see IoTML.Hardware.Sensor.SensorPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private SensorPackageImpl() {
+		super(eNS_URI, SensorFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link SensorPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static SensorPackage init() {
+		if (isInited) return (SensorPackage)EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI);
+
+		// Obtain or create and register package
+		SensorPackageImpl theSensorPackage = (SensorPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof SensorPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new SensorPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		MARTEPackage.eINSTANCE.eClass();
+		MeasurementUnitsPackage.eINSTANCE.eClass();
+		GRM_BasicTypesPackage.eINSTANCE.eClass();
+		MARTE_DataTypesPackage.eINSTANCE.eClass();
+		BasicNFP_TypesPackage.eINSTANCE.eClass();
+		TimeTypesLibraryPackage.eINSTANCE.eClass();
+		TimeLibraryPackage.eINSTANCE.eClass();
+		RS_LibraryPackage.eINSTANCE.eClass();
+		MARTE_PrimitivesTypesPackage.eINSTANCE.eClass();
+		sysmlPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		AnimatePackageImpl theAnimatePackage = (AnimatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) instanceof AnimatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) : AnimatePackage.eINSTANCE);
+		ActuatorPackageImpl theActuatorPackage = (ActuatorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) instanceof ActuatorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) : ActuatorPackage.eINSTANCE);
+		NetworkPackageImpl theNetworkPackage = (NetworkPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) instanceof NetworkPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) : NetworkPackage.eINSTANCE);
+		CorePackageImpl theCorePackage = (CorePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) instanceof CorePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) : CorePackage.eINSTANCE);
+		HybridPackageImpl theHybridPackage = (HybridPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) instanceof HybridPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) : HybridPackage.eINSTANCE);
+		ArtefactPackageImpl theArtefactPackage = (ArtefactPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) instanceof ArtefactPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) : ArtefactPackage.eINSTANCE);
+		StructurePackageImpl theStructurePackage = (StructurePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) instanceof StructurePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) : StructurePackage.eINSTANCE);
+		ResourcePackageImpl theResourcePackage = (ResourcePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) instanceof ResourcePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) : ResourcePackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theSensorPackage.createPackageContents();
+		theAnimatePackage.createPackageContents();
+		theActuatorPackage.createPackageContents();
+		theNetworkPackage.createPackageContents();
+		theCorePackage.createPackageContents();
+		theHybridPackage.createPackageContents();
+		theArtefactPackage.createPackageContents();
+		theStructurePackage.createPackageContents();
+		theResourcePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theSensorPackage.initializePackageContents();
+		theAnimatePackage.initializePackageContents();
+		theActuatorPackage.initializePackageContents();
+		theNetworkPackage.initializePackageContents();
+		theCorePackage.initializePackageContents();
+		theHybridPackage.initializePackageContents();
+		theArtefactPackage.initializePackageContents();
+		theStructurePackage.initializePackageContents();
+		theResourcePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theSensorPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(SensorPackage.eNS_URI, theSensorPackage);
+		return theSensorPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getHwCommonSensor() {
+		return hwCommonSensorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getHwCommonSensor_InputValueType() {
+		return (EReference)hwCommonSensorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getHwCommonSensor_OutputValueType() {
+		return (EReference)hwCommonSensorEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getHwCommonSensor_Hwcommonsensor() {
+		return (EReference)hwCommonSensorEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getHwCommonSensor_TransferFunction() {
+		return (EReference)hwCommonSensorEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getHwRFIDReaderSensor() {
+		return hwRFIDReaderSensorEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getHwRFIDReaderSensor_Tag() {
+		return (EReference)hwRFIDReaderSensorEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getHwTag() {
+		return hwTagEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getHwTag_TageFrequency() {
+		return (EAttribute)hwTagEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SensorFactory getSensorFactory() {
+		return (SensorFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		hwCommonSensorEClass = createEClass(HW_COMMON_SENSOR);
+		createEReference(hwCommonSensorEClass, HW_COMMON_SENSOR__INPUT_VALUE_TYPE);
+		createEReference(hwCommonSensorEClass, HW_COMMON_SENSOR__OUTPUT_VALUE_TYPE);
+		createEReference(hwCommonSensorEClass, HW_COMMON_SENSOR__HWCOMMONSENSOR);
+		createEReference(hwCommonSensorEClass, HW_COMMON_SENSOR__TRANSFER_FUNCTION);
+
+		hwRFIDReaderSensorEClass = createEClass(HW_RFID_READER_SENSOR);
+		createEReference(hwRFIDReaderSensorEClass, HW_RFID_READER_SENSOR__TAG);
+
+		hwTagEClass = createEClass(HW_TAG);
+		createEAttribute(hwTagEClass, HW_TAG__TAGE_FREQUENCY);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		HwDevicePackage theHwDevicePackage = (HwDevicePackage)EPackage.Registry.INSTANCE.getEPackage(HwDevicePackage.eNS_URI);
+		BlocksPackage theBlocksPackage = (BlocksPackage)EPackage.Registry.INSTANCE.getEPackage(BlocksPackage.eNS_URI);
+		UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
+		TypesPackage theTypesPackage = (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);
+
+		// Add supertypes to classes
+		hwCommonSensorEClass.getESuperTypes().add(theHwDevicePackage.getHWSensor());
+		hwRFIDReaderSensorEClass.getESuperTypes().add(this.getHwCommonSensor());
+		hwTagEClass.getESuperTypes().add(theHwDevicePackage.getHwI_O());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(hwCommonSensorEClass, HwCommonSensor.class, "HwCommonSensor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getHwCommonSensor_InputValueType(), theBlocksPackage.getValueType(), null, "inputValueType", null, 0, 1, HwCommonSensor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getHwCommonSensor_OutputValueType(), theBlocksPackage.getValueType(), null, "outputValueType", null, 0, 1, HwCommonSensor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getHwCommonSensor_Hwcommonsensor(), this.getHwCommonSensor(), null, "hwcommonsensor", null, 1, 1, HwCommonSensor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getHwCommonSensor_TransferFunction(), theUMLPackage.getBehavior(), null, "transferFunction", null, 0, 1, HwCommonSensor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(hwRFIDReaderSensorEClass, HwRFIDReaderSensor.class, "HwRFIDReaderSensor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getHwRFIDReaderSensor_Tag(), this.getHwTag(), null, "tag", null, 0, -1, HwRFIDReaderSensor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(hwTagEClass, HwTag.class, "HwTag", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getHwTag_TageFrequency(), theTypesPackage.getReal(), "tageFrequency", null, 0, 1, HwTag.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //SensorPackageImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/util/SensorAdapterFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/util/SensorAdapterFactory.java
new file mode 100644
index 0000000..1f4d398
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/util/SensorAdapterFactory.java
@@ -0,0 +1,279 @@
+/**
+ */
+package IoTML.Hardware.Sensor.util;
+
+import IoTML.Hardware.Sensor.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HWSensor;
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevice;
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwI_O;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.DeviceResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Sensor.SensorPackage
+ * @generated
+ */
+public class SensorAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static SensorPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SensorAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = SensorPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SensorSwitch modelSwitch =
+		new SensorSwitch() {
+			public Object caseHwCommonSensor(HwCommonSensor object) {
+				return createHwCommonSensorAdapter();
+			}
+			public Object caseHwRFIDReaderSensor(HwRFIDReaderSensor object) {
+				return createHwRFIDReaderSensorAdapter();
+			}
+			public Object caseHwTag(HwTag object) {
+				return createHwTagAdapter();
+			}
+			public Object caseResource(Resource object) {
+				return createResourceAdapter();
+			}
+			public Object caseHwResource(HwResource object) {
+				return createHwResourceAdapter();
+			}
+			public Object caseProcessingResource(ProcessingResource object) {
+				return createProcessingResourceAdapter();
+			}
+			public Object caseDeviceResource(DeviceResource object) {
+				return createDeviceResourceAdapter();
+			}
+			public Object caseHwDevice(HwDevice object) {
+				return createHwDeviceAdapter();
+			}
+			public Object caseHwI_O(HwI_O object) {
+				return createHwI_OAdapter();
+			}
+			public Object caseHWSensor(HWSensor object) {
+				return createHWSensorAdapter();
+			}
+			public Object defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	public Adapter createAdapter(Notifier target) {
+		return (Adapter)modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Hardware.Sensor.HwCommonSensor <em>Hw Common Sensor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Hardware.Sensor.HwCommonSensor
+	 * @generated
+	 */
+	public Adapter createHwCommonSensorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Hardware.Sensor.HwRFIDReaderSensor <em>Hw RFID Reader Sensor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Hardware.Sensor.HwRFIDReaderSensor
+	 * @generated
+	 */
+	public Adapter createHwRFIDReaderSensorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Hardware.Sensor.HwTag <em>Hw Tag</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Hardware.Sensor.HwTag
+	 * @generated
+	 */
+	public Adapter createHwTagAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource <em>Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource
+	 * @generated
+	 */
+	public Adapter createResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource <em>Hw Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource
+	 * @generated
+	 */
+	public Adapter createHwResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource <em>Processing Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource
+	 * @generated
+	 */
+	public Adapter createProcessingResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.DeviceResource <em>Device Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.DeviceResource
+	 * @generated
+	 */
+	public Adapter createDeviceResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevice <em>Hw Device</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevice
+	 * @generated
+	 */
+	public Adapter createHwDeviceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwI_O <em>Hw IO</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwI_O
+	 * @generated
+	 */
+	public Adapter createHwI_OAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HWSensor <em>HW Sensor</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HWSensor
+	 * @generated
+	 */
+	public Adapter createHWSensorAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //SensorAdapterFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/util/SensorSwitch.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/util/SensorSwitch.java
new file mode 100644
index 0000000..44cdb7f
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hardware/Sensor/util/SensorSwitch.java
@@ -0,0 +1,304 @@
+/**
+ */
+package IoTML.Hardware.Sensor.util;
+
+import IoTML.Hardware.Sensor.*;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HWSensor;
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwDevice;
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwLogical.HwDevice.HwI_O;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.DeviceResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.ProcessingResource;
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hardware.Sensor.SensorPackage
+ * @generated
+ */
+public class SensorSwitch {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static SensorPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SensorSwitch() {
+		if (modelPackage == null) {
+			modelPackage = SensorPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public Object doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch((EClass)eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case SensorPackage.HW_COMMON_SENSOR: {
+				HwCommonSensor hwCommonSensor = (HwCommonSensor)theEObject;
+				Object result = caseHwCommonSensor(hwCommonSensor);
+				if (result == null) result = caseHWSensor(hwCommonSensor);
+				if (result == null) result = caseHwI_O(hwCommonSensor);
+				if (result == null) result = caseHwDevice(hwCommonSensor);
+				if (result == null) result = caseHwResource(hwCommonSensor);
+				if (result == null) result = caseDeviceResource(hwCommonSensor);
+				if (result == null) result = caseProcessingResource(hwCommonSensor);
+				if (result == null) result = caseResource(hwCommonSensor);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case SensorPackage.HW_RFID_READER_SENSOR: {
+				HwRFIDReaderSensor hwRFIDReaderSensor = (HwRFIDReaderSensor)theEObject;
+				Object result = caseHwRFIDReaderSensor(hwRFIDReaderSensor);
+				if (result == null) result = caseHwCommonSensor(hwRFIDReaderSensor);
+				if (result == null) result = caseHWSensor(hwRFIDReaderSensor);
+				if (result == null) result = caseHwI_O(hwRFIDReaderSensor);
+				if (result == null) result = caseHwDevice(hwRFIDReaderSensor);
+				if (result == null) result = caseHwResource(hwRFIDReaderSensor);
+				if (result == null) result = caseDeviceResource(hwRFIDReaderSensor);
+				if (result == null) result = caseProcessingResource(hwRFIDReaderSensor);
+				if (result == null) result = caseResource(hwRFIDReaderSensor);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case SensorPackage.HW_TAG: {
+				HwTag hwTag = (HwTag)theEObject;
+				Object result = caseHwTag(hwTag);
+				if (result == null) result = caseHwI_O(hwTag);
+				if (result == null) result = caseHwDevice(hwTag);
+				if (result == null) result = caseHwResource(hwTag);
+				if (result == null) result = caseDeviceResource(hwTag);
+				if (result == null) result = caseProcessingResource(hwTag);
+				if (result == null) result = caseResource(hwTag);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw Common Sensor</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw Common Sensor</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwCommonSensor(HwCommonSensor object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw RFID Reader Sensor</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw RFID Reader Sensor</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwRFIDReaderSensor(HwRFIDReaderSensor object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw Tag</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw Tag</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwTag(HwTag object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseResource(Resource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwResource(HwResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Processing Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Processing Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseProcessingResource(ProcessingResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Device Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Device Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseDeviceResource(DeviceResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw Device</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw Device</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwDevice(HwDevice object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw IO</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw IO</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwI_O(HwI_O object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>HW Sensor</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>HW Sensor</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHWSensor(HWSensor object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public Object defaultCase(EObject object) {
+		return null;
+	}
+
+} //SensorSwitch
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/HybridFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/HybridFactory.java
new file mode 100644
index 0000000..b25432a
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/HybridFactory.java
@@ -0,0 +1,42 @@
+/**
+ */
+package IoTML.Hybrid;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hybrid.HybridPackage
+ * @generated
+ */
+public interface HybridFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	HybridFactory eINSTANCE = IoTML.Hybrid.impl.HybridFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Physical Entity</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Physical Entity</em>'.
+	 * @generated
+	 */
+	PhysicalEntity createPhysicalEntity();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	HybridPackage getHybridPackage();
+
+} //HybridFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/HybridPackage.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/HybridPackage.java
new file mode 100644
index 0000000..d057eb5
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/HybridPackage.java
@@ -0,0 +1,248 @@
+/**
+ */
+package IoTML.Hybrid;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwGeneralPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see IoTML.Hybrid.HybridFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface HybridPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "Hybrid";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///IoTML/Hybrid.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "IoTML.Hybrid";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	HybridPackage eINSTANCE = IoTML.Hybrid.impl.HybridPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link IoTML.Hybrid.impl.PhysicalEntityImpl <em>Physical Entity</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Hybrid.impl.PhysicalEntityImpl
+	 * @see IoTML.Hybrid.impl.HybridPackageImpl#getPhysicalEntity()
+	 * @generated
+	 */
+	int PHYSICAL_ENTITY = 0;
+
+	/**
+	 * The feature id for the '<em><b>Res Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__RES_MULT = HwGeneralPackage.HW_RESOURCE__RES_MULT;
+
+	/**
+	 * The feature id for the '<em><b>Is Protected</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__IS_PROTECTED = HwGeneralPackage.HW_RESOURCE__IS_PROTECTED;
+
+	/**
+	 * The feature id for the '<em><b>Is Active</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__IS_ACTIVE = HwGeneralPackage.HW_RESOURCE__IS_ACTIVE;
+
+	/**
+	 * The feature id for the '<em><b>Base Property</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__BASE_PROPERTY = HwGeneralPackage.HW_RESOURCE__BASE_PROPERTY;
+
+	/**
+	 * The feature id for the '<em><b>Base Instance Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__BASE_INSTANCE_SPECIFICATION = HwGeneralPackage.HW_RESOURCE__BASE_INSTANCE_SPECIFICATION;
+
+	/**
+	 * The feature id for the '<em><b>Base Classifier</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__BASE_CLASSIFIER = HwGeneralPackage.HW_RESOURCE__BASE_CLASSIFIER;
+
+	/**
+	 * The feature id for the '<em><b>Base Lifeline</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__BASE_LIFELINE = HwGeneralPackage.HW_RESOURCE__BASE_LIFELINE;
+
+	/**
+	 * The feature id for the '<em><b>Base Connectable Element</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__BASE_CONNECTABLE_ELEMENT = HwGeneralPackage.HW_RESOURCE__BASE_CONNECTABLE_ELEMENT;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__DESCRIPTION = HwGeneralPackage.HW_RESOURCE__DESCRIPTION;
+
+	/**
+	 * The feature id for the '<em><b>PHW Services</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__PHW_SERVICES = HwGeneralPackage.HW_RESOURCE__PHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>RHW Services</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__RHW_SERVICES = HwGeneralPackage.HW_RESOURCE__RHW_SERVICES;
+
+	/**
+	 * The feature id for the '<em><b>Owned HW</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__OWNED_HW = HwGeneralPackage.HW_RESOURCE__OWNED_HW;
+
+	/**
+	 * The feature id for the '<em><b>End Points</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__END_POINTS = HwGeneralPackage.HW_RESOURCE__END_POINTS;
+
+	/**
+	 * The feature id for the '<em><b>Frequency</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY__FREQUENCY = HwGeneralPackage.HW_RESOURCE__FREQUENCY;
+
+	/**
+	 * The number of structural features of the '<em>Physical Entity</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PHYSICAL_ENTITY_FEATURE_COUNT = HwGeneralPackage.HW_RESOURCE_FEATURE_COUNT + 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Hybrid.PhysicalEntity <em>Physical Entity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Physical Entity</em>'.
+	 * @see IoTML.Hybrid.PhysicalEntity
+	 * @generated
+	 */
+	EClass getPhysicalEntity();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	HybridFactory getHybridFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link IoTML.Hybrid.impl.PhysicalEntityImpl <em>Physical Entity</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Hybrid.impl.PhysicalEntityImpl
+		 * @see IoTML.Hybrid.impl.HybridPackageImpl#getPhysicalEntity()
+		 * @generated
+		 */
+		EClass PHYSICAL_ENTITY = eINSTANCE.getPhysicalEntity();
+
+	}
+
+} //HybridPackage
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/PhysicalEntity.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/PhysicalEntity.java
new file mode 100644
index 0000000..2e21d61
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/PhysicalEntity.java
@@ -0,0 +1,18 @@
+/**
+ */
+package IoTML.Hybrid;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Physical Entity</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see IoTML.Hybrid.HybridPackage#getPhysicalEntity()
+ * @model
+ * @generated
+ */
+public interface PhysicalEntity extends HwResource {
+} // PhysicalEntity
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/impl/HybridFactoryImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/impl/HybridFactoryImpl.java
new file mode 100644
index 0000000..6a541c9
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/impl/HybridFactoryImpl.java
@@ -0,0 +1,93 @@
+/**
+ */
+package IoTML.Hybrid.impl;
+
+import IoTML.Hybrid.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class HybridFactoryImpl extends EFactoryImpl implements HybridFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static HybridFactory init() {
+		try {
+			HybridFactory theHybridFactory = (HybridFactory)EPackage.Registry.INSTANCE.getEFactory(HybridPackage.eNS_URI);
+			if (theHybridFactory != null) {
+				return theHybridFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new HybridFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HybridFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case HybridPackage.PHYSICAL_ENTITY: return createPhysicalEntity();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhysicalEntity createPhysicalEntity() {
+		PhysicalEntityImpl physicalEntity = new PhysicalEntityImpl();
+		return physicalEntity;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HybridPackage getHybridPackage() {
+		return (HybridPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static HybridPackage getPackage() {
+		return HybridPackage.eINSTANCE;
+	}
+
+} //HybridFactoryImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/impl/HybridPackageImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/impl/HybridPackageImpl.java
new file mode 100644
index 0000000..7ead031
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/impl/HybridPackageImpl.java
@@ -0,0 +1,257 @@
+/**
+ */
+package IoTML.Hybrid.impl;
+
+import IoTML.Animate.AnimatePackage;
+
+import IoTML.Animate.impl.AnimatePackageImpl;
+
+import IoTML.Hardware.Actuator.ActuatorPackage;
+
+import IoTML.Hardware.Actuator.impl.ActuatorPackageImpl;
+
+import IoTML.Hardware.Core.CorePackage;
+
+import IoTML.Hardware.Core.impl.CorePackageImpl;
+
+import IoTML.Hardware.Network.NetworkPackage;
+
+import IoTML.Hardware.Network.impl.NetworkPackageImpl;
+
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import IoTML.Hardware.Sensor.impl.SensorPackageImpl;
+
+import IoTML.Hybrid.HybridFactory;
+import IoTML.Hybrid.HybridPackage;
+import IoTML.Hybrid.PhysicalEntity;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+
+import IoTML.Software.Artefact.impl.ArtefactPackageImpl;
+
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import IoTML.Software.Core.Structure.impl.StructurePackageImpl;
+
+import IoTML.Software.Resource.ResourcePackage;
+
+import IoTML.Software.Resource.impl.ResourcePackageImpl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.MARTE.MARTEPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwGeneralPackage;
+
+import org.eclipse.papyrus.MARTE_Library.BasicNFP_Types.BasicNFP_TypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.GRM_BasicTypes.GRM_BasicTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_DataTypes.MARTE_DataTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_PrimitivesTypes.MARTE_PrimitivesTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MeasurementUnits.MeasurementUnitsPackage;
+
+import org.eclipse.papyrus.MARTE_Library.RS_Library.RS_LibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeLibrary.TimeLibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeTypesLibrary.TimeTypesLibraryPackage;
+
+import org.eclipse.papyrus.sysml14.sysmlPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class HybridPackageImpl extends EPackageImpl implements HybridPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass physicalEntityEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see IoTML.Hybrid.HybridPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private HybridPackageImpl() {
+		super(eNS_URI, HybridFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link HybridPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static HybridPackage init() {
+		if (isInited) return (HybridPackage)EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI);
+
+		// Obtain or create and register package
+		HybridPackageImpl theHybridPackage = (HybridPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof HybridPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new HybridPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		MARTEPackage.eINSTANCE.eClass();
+		MeasurementUnitsPackage.eINSTANCE.eClass();
+		GRM_BasicTypesPackage.eINSTANCE.eClass();
+		MARTE_DataTypesPackage.eINSTANCE.eClass();
+		BasicNFP_TypesPackage.eINSTANCE.eClass();
+		TimeTypesLibraryPackage.eINSTANCE.eClass();
+		TimeLibraryPackage.eINSTANCE.eClass();
+		RS_LibraryPackage.eINSTANCE.eClass();
+		MARTE_PrimitivesTypesPackage.eINSTANCE.eClass();
+		sysmlPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		AnimatePackageImpl theAnimatePackage = (AnimatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) instanceof AnimatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) : AnimatePackage.eINSTANCE);
+		ActuatorPackageImpl theActuatorPackage = (ActuatorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) instanceof ActuatorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) : ActuatorPackage.eINSTANCE);
+		SensorPackageImpl theSensorPackage = (SensorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) instanceof SensorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) : SensorPackage.eINSTANCE);
+		NetworkPackageImpl theNetworkPackage = (NetworkPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) instanceof NetworkPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) : NetworkPackage.eINSTANCE);
+		CorePackageImpl theCorePackage = (CorePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) instanceof CorePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) : CorePackage.eINSTANCE);
+		ArtefactPackageImpl theArtefactPackage = (ArtefactPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) instanceof ArtefactPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) : ArtefactPackage.eINSTANCE);
+		StructurePackageImpl theStructurePackage = (StructurePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) instanceof StructurePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) : StructurePackage.eINSTANCE);
+		ResourcePackageImpl theResourcePackage = (ResourcePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) instanceof ResourcePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) : ResourcePackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theHybridPackage.createPackageContents();
+		theAnimatePackage.createPackageContents();
+		theActuatorPackage.createPackageContents();
+		theSensorPackage.createPackageContents();
+		theNetworkPackage.createPackageContents();
+		theCorePackage.createPackageContents();
+		theArtefactPackage.createPackageContents();
+		theStructurePackage.createPackageContents();
+		theResourcePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theHybridPackage.initializePackageContents();
+		theAnimatePackage.initializePackageContents();
+		theActuatorPackage.initializePackageContents();
+		theSensorPackage.initializePackageContents();
+		theNetworkPackage.initializePackageContents();
+		theCorePackage.initializePackageContents();
+		theArtefactPackage.initializePackageContents();
+		theStructurePackage.initializePackageContents();
+		theResourcePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theHybridPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(HybridPackage.eNS_URI, theHybridPackage);
+		return theHybridPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPhysicalEntity() {
+		return physicalEntityEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HybridFactory getHybridFactory() {
+		return (HybridFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		physicalEntityEClass = createEClass(PHYSICAL_ENTITY);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		HwGeneralPackage theHwGeneralPackage = (HwGeneralPackage)EPackage.Registry.INSTANCE.getEPackage(HwGeneralPackage.eNS_URI);
+
+		// Add supertypes to classes
+		physicalEntityEClass.getESuperTypes().add(theHwGeneralPackage.getHwResource());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(physicalEntityEClass, PhysicalEntity.class, "PhysicalEntity", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //HybridPackageImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/impl/PhysicalEntityImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/impl/PhysicalEntityImpl.java
new file mode 100644
index 0000000..f71fb19
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/impl/PhysicalEntityImpl.java
@@ -0,0 +1,38 @@
+/**
+ */
+package IoTML.Hybrid.impl;
+
+import IoTML.Hybrid.HybridPackage;
+import IoTML.Hybrid.PhysicalEntity;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.impl.HwResourceImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Physical Entity</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class PhysicalEntityImpl extends HwResourceImpl implements PhysicalEntity {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PhysicalEntityImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return HybridPackage.Literals.PHYSICAL_ENTITY;
+	}
+
+} //PhysicalEntityImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/util/HybridAdapterFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/util/HybridAdapterFactory.java
new file mode 100644
index 0000000..a484fe0
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/util/HybridAdapterFactory.java
@@ -0,0 +1,154 @@
+/**
+ */
+package IoTML.Hybrid.util;
+
+import IoTML.Hybrid.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hybrid.HybridPackage
+ * @generated
+ */
+public class HybridAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static HybridPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HybridAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = HybridPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected HybridSwitch modelSwitch =
+		new HybridSwitch() {
+			public Object casePhysicalEntity(PhysicalEntity object) {
+				return createPhysicalEntityAdapter();
+			}
+			public Object caseResource(Resource object) {
+				return createResourceAdapter();
+			}
+			public Object caseHwResource(HwResource object) {
+				return createHwResourceAdapter();
+			}
+			public Object defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	public Adapter createAdapter(Notifier target) {
+		return (Adapter)modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Hybrid.PhysicalEntity <em>Physical Entity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Hybrid.PhysicalEntity
+	 * @generated
+	 */
+	public Adapter createPhysicalEntityAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource <em>Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource
+	 * @generated
+	 */
+	public Adapter createResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource <em>Hw Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource
+	 * @generated
+	 */
+	public Adapter createHwResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //HybridAdapterFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/util/HybridSwitch.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/util/HybridSwitch.java
new file mode 100644
index 0000000..82fd103
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Hybrid/util/HybridSwitch.java
@@ -0,0 +1,162 @@
+/**
+ */
+package IoTML.Hybrid.util;
+
+import IoTML.Hybrid.*;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.HRM.HwGeneral.HwResource;
+
+import org.eclipse.papyrus.MARTE.MARTE_Foundations.GRM.Resource;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see IoTML.Hybrid.HybridPackage
+ * @generated
+ */
+public class HybridSwitch {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static HybridPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public HybridSwitch() {
+		if (modelPackage == null) {
+			modelPackage = HybridPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public Object doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch((EClass)eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case HybridPackage.PHYSICAL_ENTITY: {
+				PhysicalEntity physicalEntity = (PhysicalEntity)theEObject;
+				Object result = casePhysicalEntity(physicalEntity);
+				if (result == null) result = caseHwResource(physicalEntity);
+				if (result == null) result = caseResource(physicalEntity);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Physical Entity</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Physical Entity</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object casePhysicalEntity(PhysicalEntity object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseResource(Resource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Hw Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Hw Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseHwResource(HwResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public Object defaultCase(EObject object) {
+		return null;
+	}
+
+} //HybridSwitch
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ArtefactFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ArtefactFactory.java
new file mode 100644
index 0000000..891bac7
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ArtefactFactory.java
@@ -0,0 +1,96 @@
+/**
+ */
+package IoTML.Software.Artefact;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Artefact.ArtefactPackage
+ * @generated
+ */
+public interface ArtefactFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ArtefactFactory eINSTANCE = IoTML.Software.Artefact.impl.ArtefactFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Property Access</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Property Access</em>'.
+	 * @generated
+	 */
+	PropertyAccess createPropertyAccess();
+
+	/**
+	 * Returns a new object of class '<em>Digital Artefact</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Digital Artefact</em>'.
+	 * @generated
+	 */
+	DigitalArtefact createDigitalArtefact();
+
+	/**
+	 * Returns a new object of class '<em>Virtual Entity</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Virtual Entity</em>'.
+	 * @generated
+	 */
+	VirtualEntity createVirtualEntity();
+
+	/**
+	 * Returns a new object of class '<em>Provide Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Provide Service</em>'.
+	 * @generated
+	 */
+	ProvideService createProvideService();
+
+	/**
+	 * Returns a new object of class '<em>Provide Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Provide Resource</em>'.
+	 * @generated
+	 */
+	ProvideResource createProvideResource();
+
+	/**
+	 * Returns a new object of class '<em>Service Description</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Service Description</em>'.
+	 * @generated
+	 */
+	ServiceDescription createServiceDescription();
+
+	/**
+	 * Returns a new object of class '<em>Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Service</em>'.
+	 * @generated
+	 */
+	Service createService();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ArtefactPackage getArtefactPackage();
+
+} //ArtefactFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ArtefactPackage.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ArtefactPackage.java
new file mode 100644
index 0000000..55db454
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ArtefactPackage.java
@@ -0,0 +1,625 @@
+/**
+ */
+package IoTML.Software.Artefact;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Artefact.ArtefactFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ArtefactPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "Artefact";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///IoTML/Software/Artefact.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "IoTML.Software.Artefact";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ArtefactPackage eINSTANCE = IoTML.Software.Artefact.impl.ArtefactPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Artefact.impl.PropertyAccessImpl <em>Property Access</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Artefact.impl.PropertyAccessImpl
+	 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getPropertyAccess()
+	 * @generated
+	 */
+	int PROPERTY_ACCESS = 0;
+
+	/**
+	 * The feature id for the '<em><b>Base Association</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROPERTY_ACCESS__BASE_ASSOCIATION = 0;
+
+	/**
+	 * The feature id for the '<em><b>Accessed Property</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROPERTY_ACCESS__ACCESSED_PROPERTY = 1;
+
+	/**
+	 * The number of structural features of the '<em>Property Access</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROPERTY_ACCESS_FEATURE_COUNT = 2;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Artefact.impl.DigitalArtefactImpl <em>Digital Artefact</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Artefact.impl.DigitalArtefactImpl
+	 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getDigitalArtefact()
+	 * @generated
+	 */
+	int DIGITAL_ARTEFACT = 1;
+
+	/**
+	 * The feature id for the '<em><b>Base Class</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DIGITAL_ARTEFACT__BASE_CLASS = 0;
+
+	/**
+	 * The number of structural features of the '<em>Digital Artefact</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DIGITAL_ARTEFACT_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Artefact.impl.VirtualEntityImpl <em>Virtual Entity</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Artefact.impl.VirtualEntityImpl
+	 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getVirtualEntity()
+	 * @generated
+	 */
+	int VIRTUAL_ENTITY = 2;
+
+	/**
+	 * The feature id for the '<em><b>Base Class</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VIRTUAL_ENTITY__BASE_CLASS = DIGITAL_ARTEFACT__BASE_CLASS;
+
+	/**
+	 * The feature id for the '<em><b>Phisical Entity Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VIRTUAL_ENTITY__PHISICAL_ENTITY_SPECIFICATION = DIGITAL_ARTEFACT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Physical Entity</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VIRTUAL_ENTITY__PHYSICAL_ENTITY = DIGITAL_ARTEFACT_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Virtual Entity</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VIRTUAL_ENTITY_FEATURE_COUNT = DIGITAL_ARTEFACT_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Artefact.impl.ProvideServiceImpl <em>Provide Service</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Artefact.impl.ProvideServiceImpl
+	 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getProvideService()
+	 * @generated
+	 */
+	int PROVIDE_SERVICE = 3;
+
+	/**
+	 * The feature id for the '<em><b>Base Association</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROVIDE_SERVICE__BASE_ASSOCIATION = 0;
+
+	/**
+	 * The number of structural features of the '<em>Provide Service</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROVIDE_SERVICE_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Artefact.impl.ProvideResourceImpl <em>Provide Resource</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Artefact.impl.ProvideResourceImpl
+	 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getProvideResource()
+	 * @generated
+	 */
+	int PROVIDE_RESOURCE = 4;
+
+	/**
+	 * The feature id for the '<em><b>Base Association</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROVIDE_RESOURCE__BASE_ASSOCIATION = 0;
+
+	/**
+	 * The number of structural features of the '<em>Provide Resource</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PROVIDE_RESOURCE_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Artefact.impl.ServiceDescriptionImpl <em>Service Description</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Artefact.impl.ServiceDescriptionImpl
+	 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getServiceDescription()
+	 * @generated
+	 */
+	int SERVICE_DESCRIPTION = 5;
+
+	/**
+	 * The feature id for the '<em><b>Base Interface</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVICE_DESCRIPTION__BASE_INTERFACE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Resource Get Set</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVICE_DESCRIPTION__RESOURCE_GET_SET = 1;
+
+	/**
+	 * The number of structural features of the '<em>Service Description</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVICE_DESCRIPTION_FEATURE_COUNT = 2;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Artefact.impl.ServiceImpl <em>Service</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Artefact.impl.ServiceImpl
+	 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getService()
+	 * @generated
+	 */
+	int SERVICE = 6;
+
+	/**
+	 * The feature id for the '<em><b>Base Class</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVICE__BASE_CLASS = DIGITAL_ARTEFACT__BASE_CLASS;
+
+	/**
+	 * The number of structural features of the '<em>Service</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SERVICE_FEATURE_COUNT = DIGITAL_ARTEFACT_FEATURE_COUNT + 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Artefact.PropertyAccess <em>Property Access</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Property Access</em>'.
+	 * @see IoTML.Software.Artefact.PropertyAccess
+	 * @generated
+	 */
+	EClass getPropertyAccess();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Artefact.PropertyAccess#getBase_Association <em>Base Association</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Association</em>'.
+	 * @see IoTML.Software.Artefact.PropertyAccess#getBase_Association()
+	 * @see #getPropertyAccess()
+	 * @generated
+	 */
+	EReference getPropertyAccess_Base_Association();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Artefact.PropertyAccess#getAccessedProperty <em>Accessed Property</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Accessed Property</em>'.
+	 * @see IoTML.Software.Artefact.PropertyAccess#getAccessedProperty()
+	 * @see #getPropertyAccess()
+	 * @generated
+	 */
+	EReference getPropertyAccess_AccessedProperty();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Artefact.DigitalArtefact <em>Digital Artefact</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Digital Artefact</em>'.
+	 * @see IoTML.Software.Artefact.DigitalArtefact
+	 * @generated
+	 */
+	EClass getDigitalArtefact();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Artefact.DigitalArtefact#getBase_Class <em>Base Class</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Class</em>'.
+	 * @see IoTML.Software.Artefact.DigitalArtefact#getBase_Class()
+	 * @see #getDigitalArtefact()
+	 * @generated
+	 */
+	EReference getDigitalArtefact_Base_Class();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Artefact.VirtualEntity <em>Virtual Entity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Virtual Entity</em>'.
+	 * @see IoTML.Software.Artefact.VirtualEntity
+	 * @generated
+	 */
+	EClass getVirtualEntity();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Artefact.VirtualEntity#getPhisicalEntitySpecification <em>Phisical Entity Specification</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Phisical Entity Specification</em>'.
+	 * @see IoTML.Software.Artefact.VirtualEntity#getPhisicalEntitySpecification()
+	 * @see #getVirtualEntity()
+	 * @generated
+	 */
+	EReference getVirtualEntity_PhisicalEntitySpecification();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Artefact.VirtualEntity#getPhysicalEntity <em>Physical Entity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Physical Entity</em>'.
+	 * @see IoTML.Software.Artefact.VirtualEntity#getPhysicalEntity()
+	 * @see #getVirtualEntity()
+	 * @generated
+	 */
+	EReference getVirtualEntity_PhysicalEntity();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Artefact.ProvideService <em>Provide Service</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Provide Service</em>'.
+	 * @see IoTML.Software.Artefact.ProvideService
+	 * @generated
+	 */
+	EClass getProvideService();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Artefact.ProvideService#getBase_Association <em>Base Association</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Association</em>'.
+	 * @see IoTML.Software.Artefact.ProvideService#getBase_Association()
+	 * @see #getProvideService()
+	 * @generated
+	 */
+	EReference getProvideService_Base_Association();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Artefact.ProvideResource <em>Provide Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Provide Resource</em>'.
+	 * @see IoTML.Software.Artefact.ProvideResource
+	 * @generated
+	 */
+	EClass getProvideResource();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Artefact.ProvideResource#getBase_Association <em>Base Association</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Association</em>'.
+	 * @see IoTML.Software.Artefact.ProvideResource#getBase_Association()
+	 * @see #getProvideResource()
+	 * @generated
+	 */
+	EReference getProvideResource_Base_Association();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Artefact.ServiceDescription <em>Service Description</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Service Description</em>'.
+	 * @see IoTML.Software.Artefact.ServiceDescription
+	 * @generated
+	 */
+	EClass getServiceDescription();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Artefact.ServiceDescription#getBase_Interface <em>Base Interface</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Interface</em>'.
+	 * @see IoTML.Software.Artefact.ServiceDescription#getBase_Interface()
+	 * @see #getServiceDescription()
+	 * @generated
+	 */
+	EReference getServiceDescription_Base_Interface();
+
+	/**
+	 * Returns the meta object for the reference list '{@link IoTML.Software.Artefact.ServiceDescription#getResourceGetSet <em>Resource Get Set</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Resource Get Set</em>'.
+	 * @see IoTML.Software.Artefact.ServiceDescription#getResourceGetSet()
+	 * @see #getServiceDescription()
+	 * @generated
+	 */
+	EReference getServiceDescription_ResourceGetSet();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Artefact.Service <em>Service</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Service</em>'.
+	 * @see IoTML.Software.Artefact.Service
+	 * @generated
+	 */
+	EClass getService();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ArtefactFactory getArtefactFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Artefact.impl.PropertyAccessImpl <em>Property Access</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Artefact.impl.PropertyAccessImpl
+		 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getPropertyAccess()
+		 * @generated
+		 */
+		EClass PROPERTY_ACCESS = eINSTANCE.getPropertyAccess();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Association</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PROPERTY_ACCESS__BASE_ASSOCIATION = eINSTANCE.getPropertyAccess_Base_Association();
+
+		/**
+		 * The meta object literal for the '<em><b>Accessed Property</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PROPERTY_ACCESS__ACCESSED_PROPERTY = eINSTANCE.getPropertyAccess_AccessedProperty();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Artefact.impl.DigitalArtefactImpl <em>Digital Artefact</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Artefact.impl.DigitalArtefactImpl
+		 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getDigitalArtefact()
+		 * @generated
+		 */
+		EClass DIGITAL_ARTEFACT = eINSTANCE.getDigitalArtefact();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Class</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DIGITAL_ARTEFACT__BASE_CLASS = eINSTANCE.getDigitalArtefact_Base_Class();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Artefact.impl.VirtualEntityImpl <em>Virtual Entity</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Artefact.impl.VirtualEntityImpl
+		 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getVirtualEntity()
+		 * @generated
+		 */
+		EClass VIRTUAL_ENTITY = eINSTANCE.getVirtualEntity();
+
+		/**
+		 * The meta object literal for the '<em><b>Phisical Entity Specification</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference VIRTUAL_ENTITY__PHISICAL_ENTITY_SPECIFICATION = eINSTANCE.getVirtualEntity_PhisicalEntitySpecification();
+
+		/**
+		 * The meta object literal for the '<em><b>Physical Entity</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference VIRTUAL_ENTITY__PHYSICAL_ENTITY = eINSTANCE.getVirtualEntity_PhysicalEntity();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Artefact.impl.ProvideServiceImpl <em>Provide Service</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Artefact.impl.ProvideServiceImpl
+		 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getProvideService()
+		 * @generated
+		 */
+		EClass PROVIDE_SERVICE = eINSTANCE.getProvideService();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Association</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PROVIDE_SERVICE__BASE_ASSOCIATION = eINSTANCE.getProvideService_Base_Association();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Artefact.impl.ProvideResourceImpl <em>Provide Resource</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Artefact.impl.ProvideResourceImpl
+		 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getProvideResource()
+		 * @generated
+		 */
+		EClass PROVIDE_RESOURCE = eINSTANCE.getProvideResource();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Association</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference PROVIDE_RESOURCE__BASE_ASSOCIATION = eINSTANCE.getProvideResource_Base_Association();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Artefact.impl.ServiceDescriptionImpl <em>Service Description</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Artefact.impl.ServiceDescriptionImpl
+		 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getServiceDescription()
+		 * @generated
+		 */
+		EClass SERVICE_DESCRIPTION = eINSTANCE.getServiceDescription();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Interface</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SERVICE_DESCRIPTION__BASE_INTERFACE = eINSTANCE.getServiceDescription_Base_Interface();
+
+		/**
+		 * The meta object literal for the '<em><b>Resource Get Set</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SERVICE_DESCRIPTION__RESOURCE_GET_SET = eINSTANCE.getServiceDescription_ResourceGetSet();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Artefact.impl.ServiceImpl <em>Service</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Artefact.impl.ServiceImpl
+		 * @see IoTML.Software.Artefact.impl.ArtefactPackageImpl#getService()
+		 * @generated
+		 */
+		EClass SERVICE = eINSTANCE.getService();
+
+	}
+
+} //ArtefactPackage
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/DigitalArtefact.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/DigitalArtefact.java
new file mode 100644
index 0000000..7d33a86
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/DigitalArtefact.java
@@ -0,0 +1,50 @@
+/**
+ */
+package IoTML.Software.Artefact;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Digital Artefact</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.DigitalArtefact#getBase_Class <em>Base Class</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Software.Artefact.ArtefactPackage#getDigitalArtefact()
+ * @model
+ * @generated
+ */
+public interface DigitalArtefact extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Class</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Class</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Class</em>' reference.
+	 * @see #setBase_Class(org.eclipse.uml2.uml.Class)
+	 * @see IoTML.Software.Artefact.ArtefactPackage#getDigitalArtefact_Base_Class()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	org.eclipse.uml2.uml.Class getBase_Class();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Artefact.DigitalArtefact#getBase_Class <em>Base Class</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Class</em>' reference.
+	 * @see #getBase_Class()
+	 * @generated
+	 */
+	void setBase_Class(org.eclipse.uml2.uml.Class value);
+
+} // DigitalArtefact
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/PropertyAccess.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/PropertyAccess.java
new file mode 100644
index 0000000..8659d36
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/PropertyAccess.java
@@ -0,0 +1,123 @@
+/**
+ */
+package IoTML.Software.Artefact;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Association;
+import org.eclipse.uml2.uml.Property;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Property Access</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.PropertyAccess#getBase_Association <em>Base Association</em>}</li>
+ *   <li>{@link IoTML.Software.Artefact.PropertyAccess#getAccessedProperty <em>Accessed Property</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Software.Artefact.ArtefactPackage#getPropertyAccess()
+ * @model
+ * @generated
+ */
+public interface PropertyAccess extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Association</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Association</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Association</em>' reference.
+	 * @see #setBase_Association(Association)
+	 * @see IoTML.Software.Artefact.ArtefactPackage#getPropertyAccess_Base_Association()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	Association getBase_Association();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Artefact.PropertyAccess#getBase_Association <em>Base Association</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Association</em>' reference.
+	 * @see #getBase_Association()
+	 * @generated
+	 */
+	void setBase_Association(Association value);
+
+	/**
+	 * Returns the value of the '<em><b>Accessed Property</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Accessed Property</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Accessed Property</em>' reference.
+	 * @see #setAccessedProperty(Property)
+	 * @see IoTML.Software.Artefact.ArtefactPackage#getPropertyAccess_AccessedProperty()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	Property getAccessedProperty();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Artefact.PropertyAccess#getAccessedProperty <em>Accessed Property</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Accessed Property</em>' reference.
+	 * @see #getAccessedProperty()
+	 * @generated
+	 */
+	void setAccessedProperty(Property value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * self.accessedProperty.type.oclIsKindOf(VirtualEntity)
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean PropertyAccess_C1(DiagnosticChain diagnostics, Map context);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(VirtualEntity)) and self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(PhysicalEntity))
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean PropertyAccess_C2(DiagnosticChain diagnostics, Map context);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * self.base_Association.navigableOwnedEnd->one(p | p.type.oclIsKindOf(PhysicalEntity))
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean propertyAccess_C3(DiagnosticChain diagnostics, Map context);
+
+} // PropertyAccess
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ProvideResource.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ProvideResource.java
new file mode 100644
index 0000000..0f5f3b8
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ProvideResource.java
@@ -0,0 +1,82 @@
+/**
+ */
+package IoTML.Software.Artefact;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Association;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Provide Resource</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.ProvideResource#getBase_Association <em>Base Association</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Software.Artefact.ArtefactPackage#getProvideResource()
+ * @model
+ * @generated
+ */
+public interface ProvideResource extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Association</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Association</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Association</em>' reference.
+	 * @see #setBase_Association(Association)
+	 * @see IoTML.Software.Artefact.ArtefactPackage#getProvideResource_Base_Association()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	Association getBase_Association();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Artefact.ProvideResource#getBase_Association <em>Base Association</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Association</em>' reference.
+	 * @see #getBase_Association()
+	 * @generated
+	 */
+	void setBase_Association(Association value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(ServiceDescription))
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean ProvideResource_C1(DiagnosticChain diagnostics, Map context);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * self.base_Association.memberEnd->one(p | p.type.oclIsKindOf(ResourceDescription) and p.owningAssociation = null and and p.aggregationKind = UML::AggregationKind::shared)
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean ProvideResource_C2(DiagnosticChain diagnostics, Map context);
+
+} // ProvideResource
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ProvideService.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ProvideService.java
new file mode 100644
index 0000000..cc837bb
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ProvideService.java
@@ -0,0 +1,82 @@
+/**
+ */
+package IoTML.Software.Artefact;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Association;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Provide Service</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.ProvideService#getBase_Association <em>Base Association</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Software.Artefact.ArtefactPackage#getProvideService()
+ * @model
+ * @generated
+ */
+public interface ProvideService extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Association</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Association</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Association</em>' reference.
+	 * @see #setBase_Association(Association)
+	 * @see IoTML.Software.Artefact.ArtefactPackage#getProvideService_Base_Association()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	Association getBase_Association();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Artefact.ProvideService#getBase_Association <em>Base Association</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Association</em>' reference.
+	 * @see #getBase_Association()
+	 * @generated
+	 */
+	void setBase_Association(Association value);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * self.base_Association.memberEnd->one(p | p.type.oclIsKindOf(Service) and p.owningAssociation = null and and p.aggregationKind = UML::AggregationKind::shared)
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean ProvideService_C2(DiagnosticChain diagnostics, Map context);
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * self.base_Association.ownedEnd->one(p | p.type.oclIsKindOf(VirtualEntity))
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean ProvideService_C1(DiagnosticChain diagnostics, Map context);
+
+} // ProvideService
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/Service.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/Service.java
new file mode 100644
index 0000000..03301b7
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/Service.java
@@ -0,0 +1,33 @@
+/**
+ */
+package IoTML.Software.Artefact;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Service</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see IoTML.Software.Artefact.ArtefactPackage#getService()
+ * @model
+ * @generated
+ */
+public interface Service extends DigitalArtefact {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * not self.base_Class.classifierBehavior.oclIsUndefined() and self.base_Class.isActive = true
+	 * @param diagnostics The chain of diagnostics to which problems are to be appended.
+	 * @param context The cache of context-specific information.
+	 * <!-- end-model-doc -->
+	 * @model
+	 * @generated
+	 */
+	boolean Service_C1(DiagnosticChain diagnostics, Map context);
+
+} // Service
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ServiceDescription.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ServiceDescription.java
new file mode 100644
index 0000000..459078b
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/ServiceDescription.java
@@ -0,0 +1,99 @@
+/**
+ */
+package IoTML.Software.Artefact;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Interface;
+import org.eclipse.uml2.uml.Operation;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Service Description</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.ServiceDescription#getBase_Interface <em>Base Interface</em>}</li>
+ *   <li>{@link IoTML.Software.Artefact.ServiceDescription#getResourceGetSet <em>Resource Get Set</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Software.Artefact.ArtefactPackage#getServiceDescription()
+ * @model
+ * @generated
+ */
+public interface ServiceDescription extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Interface</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Interface</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Interface</em>' reference.
+	 * @see #setBase_Interface(Interface)
+	 * @see IoTML.Software.Artefact.ArtefactPackage#getServiceDescription_Base_Interface()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	Interface getBase_Interface();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Artefact.ServiceDescription#getBase_Interface <em>Base Interface</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Interface</em>' reference.
+	 * @see #getBase_Interface()
+	 * @generated
+	 */
+	void setBase_Interface(Interface value);
+
+	/**
+	 * Returns the value of the '<em><b>Resource Get Set</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.uml2.uml.Operation}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Resource Get Set</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Resource Get Set</em>' reference list.
+	 * @see IoTML.Software.Artefact.ArtefactPackage#getServiceDescription_ResourceGetSet()
+	 * @model type="org.eclipse.uml2.uml.Operation" ordered="false"
+	 * @generated
+	 */
+	EList getResourceGetSet();
+
+	/**
+	 * Retrieves the first {@link org.eclipse.uml2.uml.Operation} with the specified '<em><b>Name</b></em>', '<em><b>Owned Parameter Names</b></em>', and '<em><b>Owned Parameter Types</b></em>' from the '<em><b>Resource Get Set</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param name The '<em><b>Name</b></em>' of the {@link org.eclipse.uml2.uml.Operation} to retrieve, or <code>null</code>.
+	 * @param ownedParameterNames The '<em><b>Owned Parameter Names</b></em>' of the {@link org.eclipse.uml2.uml.Operation} to retrieve, or <code>null</code>.
+	 * @param ownedParameterTypes The '<em><b>Owned Parameter Types</b></em>' of the {@link org.eclipse.uml2.uml.Operation} to retrieve, or <code>null</code>.
+	 * @return The first {@link org.eclipse.uml2.uml.Operation} with the specified '<em><b>Name</b></em>', '<em><b>Owned Parameter Names</b></em>', and '<em><b>Owned Parameter Types</b></em>', or <code>null</code>.
+	 * @see #getResourceGetSet()
+	 * @generated
+	 */
+	Operation getResourceGetSet(String name, EList ownedParameterNames, EList ownedParameterTypes);
+
+	/**
+	 * Retrieves the first {@link org.eclipse.uml2.uml.Operation} with the specified '<em><b>Name</b></em>', '<em><b>Owned Parameter Names</b></em>', and '<em><b>Owned Parameter Types</b></em>' from the '<em><b>Resource Get Set</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param name The '<em><b>Name</b></em>' of the {@link org.eclipse.uml2.uml.Operation} to retrieve, or <code>null</code>.
+	 * @param ownedParameterNames The '<em><b>Owned Parameter Names</b></em>' of the {@link org.eclipse.uml2.uml.Operation} to retrieve, or <code>null</code>.
+	 * @param ownedParameterTypes The '<em><b>Owned Parameter Types</b></em>' of the {@link org.eclipse.uml2.uml.Operation} to retrieve, or <code>null</code>.
+	 * @param ignoreCase Whether to ignore case in {@link java.lang.String} comparisons.
+	 * @return The first {@link org.eclipse.uml2.uml.Operation} with the specified '<em><b>Name</b></em>', '<em><b>Owned Parameter Names</b></em>', and '<em><b>Owned Parameter Types</b></em>', or <code>null</code>.
+	 * @see #getResourceGetSet()
+	 * @generated
+	 */
+	Operation getResourceGetSet(String name, EList ownedParameterNames, EList ownedParameterTypes, boolean ignoreCase);
+
+} // ServiceDescription
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/VirtualEntity.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/VirtualEntity.java
new file mode 100644
index 0000000..81e6404
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/VirtualEntity.java
@@ -0,0 +1,79 @@
+/**
+ */
+package IoTML.Software.Artefact;
+
+import IoTML.Hybrid.PhysicalEntity;
+
+import org.eclipse.uml2.uml.InstanceSpecification;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Virtual Entity</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.VirtualEntity#getPhisicalEntitySpecification <em>Phisical Entity Specification</em>}</li>
+ *   <li>{@link IoTML.Software.Artefact.VirtualEntity#getPhysicalEntity <em>Physical Entity</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Software.Artefact.ArtefactPackage#getVirtualEntity()
+ * @model
+ * @generated
+ */
+public interface VirtualEntity extends DigitalArtefact {
+	/**
+	 * Returns the value of the '<em><b>Phisical Entity Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Phisical Entity Specification</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Phisical Entity Specification</em>' reference.
+	 * @see #setPhisicalEntitySpecification(InstanceSpecification)
+	 * @see IoTML.Software.Artefact.ArtefactPackage#getVirtualEntity_PhisicalEntitySpecification()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	InstanceSpecification getPhisicalEntitySpecification();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Artefact.VirtualEntity#getPhisicalEntitySpecification <em>Phisical Entity Specification</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Phisical Entity Specification</em>' reference.
+	 * @see #getPhisicalEntitySpecification()
+	 * @generated
+	 */
+	void setPhisicalEntitySpecification(InstanceSpecification value);
+
+	/**
+	 * Returns the value of the '<em><b>Physical Entity</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Physical Entity</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Physical Entity</em>' reference.
+	 * @see #setPhysicalEntity(PhysicalEntity)
+	 * @see IoTML.Software.Artefact.ArtefactPackage#getVirtualEntity_PhysicalEntity()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	PhysicalEntity getPhysicalEntity();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Artefact.VirtualEntity#getPhysicalEntity <em>Physical Entity</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Physical Entity</em>' reference.
+	 * @see #getPhysicalEntity()
+	 * @generated
+	 */
+	void setPhysicalEntity(PhysicalEntity value);
+
+} // VirtualEntity
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ArtefactFactoryImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ArtefactFactoryImpl.java
new file mode 100644
index 0000000..25b3275
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ArtefactFactoryImpl.java
@@ -0,0 +1,159 @@
+/**
+ */
+package IoTML.Software.Artefact.impl;
+
+import IoTML.Software.Artefact.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ArtefactFactoryImpl extends EFactoryImpl implements ArtefactFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ArtefactFactory init() {
+		try {
+			ArtefactFactory theArtefactFactory = (ArtefactFactory)EPackage.Registry.INSTANCE.getEFactory(ArtefactPackage.eNS_URI);
+			if (theArtefactFactory != null) {
+				return theArtefactFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ArtefactFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtefactFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ArtefactPackage.PROPERTY_ACCESS: return createPropertyAccess();
+			case ArtefactPackage.DIGITAL_ARTEFACT: return createDigitalArtefact();
+			case ArtefactPackage.VIRTUAL_ENTITY: return createVirtualEntity();
+			case ArtefactPackage.PROVIDE_SERVICE: return createProvideService();
+			case ArtefactPackage.PROVIDE_RESOURCE: return createProvideResource();
+			case ArtefactPackage.SERVICE_DESCRIPTION: return createServiceDescription();
+			case ArtefactPackage.SERVICE: return createService();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PropertyAccess createPropertyAccess() {
+		PropertyAccessImpl propertyAccess = new PropertyAccessImpl();
+		return propertyAccess;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DigitalArtefact createDigitalArtefact() {
+		DigitalArtefactImpl digitalArtefact = new DigitalArtefactImpl();
+		return digitalArtefact;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public VirtualEntity createVirtualEntity() {
+		VirtualEntityImpl virtualEntity = new VirtualEntityImpl();
+		return virtualEntity;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProvideService createProvideService() {
+		ProvideServiceImpl provideService = new ProvideServiceImpl();
+		return provideService;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ProvideResource createProvideResource() {
+		ProvideResourceImpl provideResource = new ProvideResourceImpl();
+		return provideResource;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ServiceDescription createServiceDescription() {
+		ServiceDescriptionImpl serviceDescription = new ServiceDescriptionImpl();
+		return serviceDescription;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Service createService() {
+		ServiceImpl service = new ServiceImpl();
+		return service;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtefactPackage getArtefactPackage() {
+		return (ArtefactPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static ArtefactPackage getPackage() {
+		return ArtefactPackage.eINSTANCE;
+	}
+
+} //ArtefactFactoryImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ArtefactPackageImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ArtefactPackageImpl.java
new file mode 100644
index 0000000..0a55a86
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ArtefactPackageImpl.java
@@ -0,0 +1,530 @@
+/**
+ */
+package IoTML.Software.Artefact.impl;
+
+import IoTML.Animate.AnimatePackage;
+
+import IoTML.Animate.impl.AnimatePackageImpl;
+
+import IoTML.Hardware.Actuator.ActuatorPackage;
+
+import IoTML.Hardware.Actuator.impl.ActuatorPackageImpl;
+
+import IoTML.Hardware.Core.CorePackage;
+
+import IoTML.Hardware.Core.impl.CorePackageImpl;
+
+import IoTML.Hardware.Network.NetworkPackage;
+
+import IoTML.Hardware.Network.impl.NetworkPackageImpl;
+
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import IoTML.Hardware.Sensor.impl.SensorPackageImpl;
+
+import IoTML.Hybrid.HybridPackage;
+
+import IoTML.Hybrid.impl.HybridPackageImpl;
+
+import IoTML.Software.Artefact.ArtefactFactory;
+import IoTML.Software.Artefact.ArtefactPackage;
+import IoTML.Software.Artefact.DigitalArtefact;
+import IoTML.Software.Artefact.PropertyAccess;
+import IoTML.Software.Artefact.ProvideResource;
+import IoTML.Software.Artefact.ProvideService;
+import IoTML.Software.Artefact.Service;
+import IoTML.Software.Artefact.ServiceDescription;
+import IoTML.Software.Artefact.VirtualEntity;
+
+import IoTML.Software.Artefact.util.ArtefactValidator;
+
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import IoTML.Software.Core.Structure.impl.StructurePackageImpl;
+
+import IoTML.Software.Resource.ResourcePackage;
+
+import IoTML.Software.Resource.impl.ResourcePackageImpl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EValidator;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.MARTE.MARTEPackage;
+
+import org.eclipse.papyrus.MARTE_Library.BasicNFP_Types.BasicNFP_TypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.GRM_BasicTypes.GRM_BasicTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_DataTypes.MARTE_DataTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_PrimitivesTypes.MARTE_PrimitivesTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MeasurementUnits.MeasurementUnitsPackage;
+
+import org.eclipse.papyrus.MARTE_Library.RS_Library.RS_LibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeLibrary.TimeLibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeTypesLibrary.TimeTypesLibraryPackage;
+
+import org.eclipse.papyrus.sysml14.sysmlPackage;
+
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ArtefactPackageImpl extends EPackageImpl implements ArtefactPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass propertyAccessEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass digitalArtefactEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass virtualEntityEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass provideServiceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass provideResourceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass serviceDescriptionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass serviceEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see IoTML.Software.Artefact.ArtefactPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ArtefactPackageImpl() {
+		super(eNS_URI, ArtefactFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ArtefactPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ArtefactPackage init() {
+		if (isInited) return (ArtefactPackage)EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ArtefactPackageImpl theArtefactPackage = (ArtefactPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ArtefactPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ArtefactPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		MARTEPackage.eINSTANCE.eClass();
+		MeasurementUnitsPackage.eINSTANCE.eClass();
+		GRM_BasicTypesPackage.eINSTANCE.eClass();
+		MARTE_DataTypesPackage.eINSTANCE.eClass();
+		BasicNFP_TypesPackage.eINSTANCE.eClass();
+		TimeTypesLibraryPackage.eINSTANCE.eClass();
+		TimeLibraryPackage.eINSTANCE.eClass();
+		RS_LibraryPackage.eINSTANCE.eClass();
+		MARTE_PrimitivesTypesPackage.eINSTANCE.eClass();
+		sysmlPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		AnimatePackageImpl theAnimatePackage = (AnimatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) instanceof AnimatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) : AnimatePackage.eINSTANCE);
+		ActuatorPackageImpl theActuatorPackage = (ActuatorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) instanceof ActuatorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) : ActuatorPackage.eINSTANCE);
+		SensorPackageImpl theSensorPackage = (SensorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) instanceof SensorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) : SensorPackage.eINSTANCE);
+		NetworkPackageImpl theNetworkPackage = (NetworkPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) instanceof NetworkPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) : NetworkPackage.eINSTANCE);
+		CorePackageImpl theCorePackage = (CorePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) instanceof CorePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) : CorePackage.eINSTANCE);
+		HybridPackageImpl theHybridPackage = (HybridPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) instanceof HybridPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) : HybridPackage.eINSTANCE);
+		StructurePackageImpl theStructurePackage = (StructurePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) instanceof StructurePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) : StructurePackage.eINSTANCE);
+		ResourcePackageImpl theResourcePackage = (ResourcePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) instanceof ResourcePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) : ResourcePackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theArtefactPackage.createPackageContents();
+		theAnimatePackage.createPackageContents();
+		theActuatorPackage.createPackageContents();
+		theSensorPackage.createPackageContents();
+		theNetworkPackage.createPackageContents();
+		theCorePackage.createPackageContents();
+		theHybridPackage.createPackageContents();
+		theStructurePackage.createPackageContents();
+		theResourcePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theArtefactPackage.initializePackageContents();
+		theAnimatePackage.initializePackageContents();
+		theActuatorPackage.initializePackageContents();
+		theSensorPackage.initializePackageContents();
+		theNetworkPackage.initializePackageContents();
+		theCorePackage.initializePackageContents();
+		theHybridPackage.initializePackageContents();
+		theStructurePackage.initializePackageContents();
+		theResourcePackage.initializePackageContents();
+
+		// Register package validator
+		EValidator.Registry.INSTANCE.put
+			(theArtefactPackage, 
+			 new EValidator.Descriptor() {
+				 public EValidator getEValidator() {
+					 return ArtefactValidator.INSTANCE;
+				 }
+			 });
+
+		// Mark meta-data to indicate it can't be changed
+		theArtefactPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ArtefactPackage.eNS_URI, theArtefactPackage);
+		return theArtefactPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPropertyAccess() {
+		return propertyAccessEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPropertyAccess_Base_Association() {
+		return (EReference)propertyAccessEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getPropertyAccess_AccessedProperty() {
+		return (EReference)propertyAccessEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDigitalArtefact() {
+		return digitalArtefactEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDigitalArtefact_Base_Class() {
+		return (EReference)digitalArtefactEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getVirtualEntity() {
+		return virtualEntityEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getVirtualEntity_PhisicalEntitySpecification() {
+		return (EReference)virtualEntityEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getVirtualEntity_PhysicalEntity() {
+		return (EReference)virtualEntityEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getProvideService() {
+		return provideServiceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getProvideService_Base_Association() {
+		return (EReference)provideServiceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getProvideResource() {
+		return provideResourceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getProvideResource_Base_Association() {
+		return (EReference)provideResourceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getServiceDescription() {
+		return serviceDescriptionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getServiceDescription_Base_Interface() {
+		return (EReference)serviceDescriptionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getServiceDescription_ResourceGetSet() {
+		return (EReference)serviceDescriptionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getService() {
+		return serviceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtefactFactory getArtefactFactory() {
+		return (ArtefactFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		propertyAccessEClass = createEClass(PROPERTY_ACCESS);
+		createEReference(propertyAccessEClass, PROPERTY_ACCESS__BASE_ASSOCIATION);
+		createEReference(propertyAccessEClass, PROPERTY_ACCESS__ACCESSED_PROPERTY);
+
+		digitalArtefactEClass = createEClass(DIGITAL_ARTEFACT);
+		createEReference(digitalArtefactEClass, DIGITAL_ARTEFACT__BASE_CLASS);
+
+		virtualEntityEClass = createEClass(VIRTUAL_ENTITY);
+		createEReference(virtualEntityEClass, VIRTUAL_ENTITY__PHISICAL_ENTITY_SPECIFICATION);
+		createEReference(virtualEntityEClass, VIRTUAL_ENTITY__PHYSICAL_ENTITY);
+
+		provideServiceEClass = createEClass(PROVIDE_SERVICE);
+		createEReference(provideServiceEClass, PROVIDE_SERVICE__BASE_ASSOCIATION);
+
+		provideResourceEClass = createEClass(PROVIDE_RESOURCE);
+		createEReference(provideResourceEClass, PROVIDE_RESOURCE__BASE_ASSOCIATION);
+
+		serviceDescriptionEClass = createEClass(SERVICE_DESCRIPTION);
+		createEReference(serviceDescriptionEClass, SERVICE_DESCRIPTION__BASE_INTERFACE);
+		createEReference(serviceDescriptionEClass, SERVICE_DESCRIPTION__RESOURCE_GET_SET);
+
+		serviceEClass = createEClass(SERVICE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
+		HybridPackage theHybridPackage = (HybridPackage)EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI);
+
+		// Add supertypes to classes
+		virtualEntityEClass.getESuperTypes().add(this.getDigitalArtefact());
+		serviceEClass.getESuperTypes().add(this.getDigitalArtefact());
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(propertyAccessEClass, PropertyAccess.class, "PropertyAccess", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getPropertyAccess_Base_Association(), theUMLPackage.getAssociation(), null, "base_Association", null, 1, 1, PropertyAccess.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getPropertyAccess_AccessedProperty(), theUMLPackage.getProperty(), null, "accessedProperty", null, 0, 1, PropertyAccess.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		EOperation op = addEOperation(propertyAccessEClass, ecorePackage.getEBoolean(), "PropertyAccess_C1", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		op = addEOperation(propertyAccessEClass, ecorePackage.getEBoolean(), "PropertyAccess_C2", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		op = addEOperation(propertyAccessEClass, ecorePackage.getEBoolean(), "propertyAccess_C3", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		initEClass(digitalArtefactEClass, DigitalArtefact.class, "DigitalArtefact", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getDigitalArtefact_Base_Class(), theUMLPackage.getClass_(), null, "base_Class", null, 1, 1, DigitalArtefact.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(virtualEntityEClass, VirtualEntity.class, "VirtualEntity", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getVirtualEntity_PhisicalEntitySpecification(), theUMLPackage.getInstanceSpecification(), null, "phisicalEntitySpecification", null, 0, 1, VirtualEntity.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getVirtualEntity_PhysicalEntity(), theHybridPackage.getPhysicalEntity(), null, "physicalEntity", null, 0, 1, VirtualEntity.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(provideServiceEClass, ProvideService.class, "ProvideService", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getProvideService_Base_Association(), theUMLPackage.getAssociation(), null, "base_Association", null, 1, 1, ProvideService.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		op = addEOperation(provideServiceEClass, ecorePackage.getEBoolean(), "ProvideService_C2", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		op = addEOperation(provideServiceEClass, ecorePackage.getEBoolean(), "ProvideService_C1", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		initEClass(provideResourceEClass, ProvideResource.class, "ProvideResource", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getProvideResource_Base_Association(), theUMLPackage.getAssociation(), null, "base_Association", null, 1, 1, ProvideResource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		op = addEOperation(provideResourceEClass, ecorePackage.getEBoolean(), "ProvideResource_C1", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		op = addEOperation(provideResourceEClass, ecorePackage.getEBoolean(), "ProvideResource_C2", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		initEClass(serviceDescriptionEClass, ServiceDescription.class, "ServiceDescription", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getServiceDescription_Base_Interface(), theUMLPackage.getInterface(), null, "base_Interface", null, 1, 1, ServiceDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getServiceDescription_ResourceGetSet(), theUMLPackage.getOperation(), null, "resourceGetSet", null, 0, -1, ServiceDescription.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(serviceEClass, Service.class, "Service", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		op = addEOperation(serviceEClass, ecorePackage.getEBoolean(), "Service_C1", 0, 1);
+		addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1);
+		addEParameter(op, ecorePackage.getEMap(), "context", 0, 1);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ArtefactPackageImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/DigitalArtefactImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/DigitalArtefactImpl.java
new file mode 100644
index 0000000..96f063e
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/DigitalArtefactImpl.java
@@ -0,0 +1,151 @@
+/**
+ */
+package IoTML.Software.Artefact.impl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+import IoTML.Software.Artefact.DigitalArtefact;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Digital Artefact</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.impl.DigitalArtefactImpl#getBase_Class <em>Base Class</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class DigitalArtefactImpl extends MinimalEObjectImpl.Container implements DigitalArtefact {
+	/**
+	 * The cached value of the '{@link #getBase_Class() <em>Base Class</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Class()
+	 * @generated
+	 * @ordered
+	 */
+	protected org.eclipse.uml2.uml.Class base_Class;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DigitalArtefactImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return ArtefactPackage.Literals.DIGITAL_ARTEFACT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class getBase_Class() {
+		if (base_Class != null && base_Class.eIsProxy()) {
+			InternalEObject oldBase_Class = (InternalEObject)base_Class;
+			base_Class = (org.eclipse.uml2.uml.Class)eResolveProxy(oldBase_Class);
+			if (base_Class != oldBase_Class) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArtefactPackage.DIGITAL_ARTEFACT__BASE_CLASS, oldBase_Class, base_Class));
+			}
+		}
+		return base_Class;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class basicGetBase_Class() {
+		return base_Class;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
+		org.eclipse.uml2.uml.Class oldBase_Class = base_Class;
+		base_Class = newBase_Class;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtefactPackage.DIGITAL_ARTEFACT__BASE_CLASS, oldBase_Class, base_Class));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArtefactPackage.DIGITAL_ARTEFACT__BASE_CLASS:
+				if (resolve) return getBase_Class();
+				return basicGetBase_Class();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArtefactPackage.DIGITAL_ARTEFACT__BASE_CLASS:
+				setBase_Class((org.eclipse.uml2.uml.Class)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.DIGITAL_ARTEFACT__BASE_CLASS:
+				setBase_Class((org.eclipse.uml2.uml.Class)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.DIGITAL_ARTEFACT__BASE_CLASS:
+				return base_Class != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //DigitalArtefactImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/PropertyAccessImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/PropertyAccessImpl.java
new file mode 100644
index 0000000..a0af223
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/PropertyAccessImpl.java
@@ -0,0 +1,301 @@
+/**
+ */
+package IoTML.Software.Artefact.impl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+import IoTML.Software.Artefact.PropertyAccess;
+
+import IoTML.Software.Artefact.util.ArtefactValidator;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.emf.ecore.util.EObjectValidator;
+
+import org.eclipse.uml2.uml.Association;
+import org.eclipse.uml2.uml.Property;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Property Access</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.impl.PropertyAccessImpl#getBase_Association <em>Base Association</em>}</li>
+ *   <li>{@link IoTML.Software.Artefact.impl.PropertyAccessImpl#getAccessedProperty <em>Accessed Property</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class PropertyAccessImpl extends MinimalEObjectImpl.Container implements PropertyAccess {
+	/**
+	 * The cached value of the '{@link #getBase_Association() <em>Base Association</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Association()
+	 * @generated
+	 * @ordered
+	 */
+	protected Association base_Association;
+
+	/**
+	 * The cached value of the '{@link #getAccessedProperty() <em>Accessed Property</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getAccessedProperty()
+	 * @generated
+	 * @ordered
+	 */
+	protected Property accessedProperty;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PropertyAccessImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return ArtefactPackage.Literals.PROPERTY_ACCESS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Association getBase_Association() {
+		if (base_Association != null && base_Association.eIsProxy()) {
+			InternalEObject oldBase_Association = (InternalEObject)base_Association;
+			base_Association = (Association)eResolveProxy(oldBase_Association);
+			if (base_Association != oldBase_Association) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArtefactPackage.PROPERTY_ACCESS__BASE_ASSOCIATION, oldBase_Association, base_Association));
+			}
+		}
+		return base_Association;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Association basicGetBase_Association() {
+		return base_Association;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Association(Association newBase_Association) {
+		Association oldBase_Association = base_Association;
+		base_Association = newBase_Association;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtefactPackage.PROPERTY_ACCESS__BASE_ASSOCIATION, oldBase_Association, base_Association));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Property getAccessedProperty() {
+		if (accessedProperty != null && accessedProperty.eIsProxy()) {
+			InternalEObject oldAccessedProperty = (InternalEObject)accessedProperty;
+			accessedProperty = (Property)eResolveProxy(oldAccessedProperty);
+			if (accessedProperty != oldAccessedProperty) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArtefactPackage.PROPERTY_ACCESS__ACCESSED_PROPERTY, oldAccessedProperty, accessedProperty));
+			}
+		}
+		return accessedProperty;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Property basicGetAccessedProperty() {
+		return accessedProperty;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setAccessedProperty(Property newAccessedProperty) {
+		Property oldAccessedProperty = accessedProperty;
+		accessedProperty = newAccessedProperty;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtefactPackage.PROPERTY_ACCESS__ACCESSED_PROPERTY, oldAccessedProperty, accessedProperty));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean PropertyAccess_C1(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 ArtefactValidator.DIAGNOSTIC_SOURCE,
+						 ArtefactValidator.PROPERTY_ACCESS__PROPERTY_ACCESS_C1,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "PropertyAccess_C1", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean PropertyAccess_C2(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 ArtefactValidator.DIAGNOSTIC_SOURCE,
+						 ArtefactValidator.PROPERTY_ACCESS__PROPERTY_ACCESS_C2,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "PropertyAccess_C2", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean propertyAccess_C3(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 ArtefactValidator.DIAGNOSTIC_SOURCE,
+						 ArtefactValidator.PROPERTY_ACCESS__PROPERTY_ACCESS_C3,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "propertyAccess_C3", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArtefactPackage.PROPERTY_ACCESS__BASE_ASSOCIATION:
+				if (resolve) return getBase_Association();
+				return basicGetBase_Association();
+			case ArtefactPackage.PROPERTY_ACCESS__ACCESSED_PROPERTY:
+				if (resolve) return getAccessedProperty();
+				return basicGetAccessedProperty();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArtefactPackage.PROPERTY_ACCESS__BASE_ASSOCIATION:
+				setBase_Association((Association)newValue);
+				return;
+			case ArtefactPackage.PROPERTY_ACCESS__ACCESSED_PROPERTY:
+				setAccessedProperty((Property)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.PROPERTY_ACCESS__BASE_ASSOCIATION:
+				setBase_Association((Association)null);
+				return;
+			case ArtefactPackage.PROPERTY_ACCESS__ACCESSED_PROPERTY:
+				setAccessedProperty((Property)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.PROPERTY_ACCESS__BASE_ASSOCIATION:
+				return base_Association != null;
+			case ArtefactPackage.PROPERTY_ACCESS__ACCESSED_PROPERTY:
+				return accessedProperty != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //PropertyAccessImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ProvideResourceImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ProvideResourceImpl.java
new file mode 100644
index 0000000..6d8543c
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ProvideResourceImpl.java
@@ -0,0 +1,215 @@
+/**
+ */
+package IoTML.Software.Artefact.impl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+import IoTML.Software.Artefact.ProvideResource;
+
+import IoTML.Software.Artefact.util.ArtefactValidator;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.emf.ecore.util.EObjectValidator;
+
+import org.eclipse.uml2.uml.Association;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Provide Resource</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.impl.ProvideResourceImpl#getBase_Association <em>Base Association</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ProvideResourceImpl extends MinimalEObjectImpl.Container implements ProvideResource {
+	/**
+	 * The cached value of the '{@link #getBase_Association() <em>Base Association</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Association()
+	 * @generated
+	 * @ordered
+	 */
+	protected Association base_Association;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ProvideResourceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return ArtefactPackage.Literals.PROVIDE_RESOURCE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Association getBase_Association() {
+		if (base_Association != null && base_Association.eIsProxy()) {
+			InternalEObject oldBase_Association = (InternalEObject)base_Association;
+			base_Association = (Association)eResolveProxy(oldBase_Association);
+			if (base_Association != oldBase_Association) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArtefactPackage.PROVIDE_RESOURCE__BASE_ASSOCIATION, oldBase_Association, base_Association));
+			}
+		}
+		return base_Association;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Association basicGetBase_Association() {
+		return base_Association;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Association(Association newBase_Association) {
+		Association oldBase_Association = base_Association;
+		base_Association = newBase_Association;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtefactPackage.PROVIDE_RESOURCE__BASE_ASSOCIATION, oldBase_Association, base_Association));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean ProvideResource_C1(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 ArtefactValidator.DIAGNOSTIC_SOURCE,
+						 ArtefactValidator.PROVIDE_RESOURCE__PROVIDE_RESOURCE_C1,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "ProvideResource_C1", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean ProvideResource_C2(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 ArtefactValidator.DIAGNOSTIC_SOURCE,
+						 ArtefactValidator.PROVIDE_RESOURCE__PROVIDE_RESOURCE_C2,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "ProvideResource_C2", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArtefactPackage.PROVIDE_RESOURCE__BASE_ASSOCIATION:
+				if (resolve) return getBase_Association();
+				return basicGetBase_Association();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArtefactPackage.PROVIDE_RESOURCE__BASE_ASSOCIATION:
+				setBase_Association((Association)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.PROVIDE_RESOURCE__BASE_ASSOCIATION:
+				setBase_Association((Association)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.PROVIDE_RESOURCE__BASE_ASSOCIATION:
+				return base_Association != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ProvideResourceImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ProvideServiceImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ProvideServiceImpl.java
new file mode 100644
index 0000000..936bde0
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ProvideServiceImpl.java
@@ -0,0 +1,215 @@
+/**
+ */
+package IoTML.Software.Artefact.impl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+import IoTML.Software.Artefact.ProvideService;
+
+import IoTML.Software.Artefact.util.ArtefactValidator;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.emf.ecore.util.EObjectValidator;
+
+import org.eclipse.uml2.uml.Association;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Provide Service</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.impl.ProvideServiceImpl#getBase_Association <em>Base Association</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ProvideServiceImpl extends MinimalEObjectImpl.Container implements ProvideService {
+	/**
+	 * The cached value of the '{@link #getBase_Association() <em>Base Association</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Association()
+	 * @generated
+	 * @ordered
+	 */
+	protected Association base_Association;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ProvideServiceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return ArtefactPackage.Literals.PROVIDE_SERVICE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Association getBase_Association() {
+		if (base_Association != null && base_Association.eIsProxy()) {
+			InternalEObject oldBase_Association = (InternalEObject)base_Association;
+			base_Association = (Association)eResolveProxy(oldBase_Association);
+			if (base_Association != oldBase_Association) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArtefactPackage.PROVIDE_SERVICE__BASE_ASSOCIATION, oldBase_Association, base_Association));
+			}
+		}
+		return base_Association;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Association basicGetBase_Association() {
+		return base_Association;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Association(Association newBase_Association) {
+		Association oldBase_Association = base_Association;
+		base_Association = newBase_Association;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtefactPackage.PROVIDE_SERVICE__BASE_ASSOCIATION, oldBase_Association, base_Association));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean ProvideService_C2(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 ArtefactValidator.DIAGNOSTIC_SOURCE,
+						 ArtefactValidator.PROVIDE_SERVICE__PROVIDE_SERVICE_C2,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "ProvideService_C2", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean ProvideService_C1(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 ArtefactValidator.DIAGNOSTIC_SOURCE,
+						 ArtefactValidator.PROVIDE_SERVICE__PROVIDE_SERVICE_C1,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "ProvideService_C1", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArtefactPackage.PROVIDE_SERVICE__BASE_ASSOCIATION:
+				if (resolve) return getBase_Association();
+				return basicGetBase_Association();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArtefactPackage.PROVIDE_SERVICE__BASE_ASSOCIATION:
+				setBase_Association((Association)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.PROVIDE_SERVICE__BASE_ASSOCIATION:
+				setBase_Association((Association)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.PROVIDE_SERVICE__BASE_ASSOCIATION:
+				return base_Association != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ProvideServiceImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ServiceDescriptionImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ServiceDescriptionImpl.java
new file mode 100644
index 0000000..3e8e6f9
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ServiceDescriptionImpl.java
@@ -0,0 +1,231 @@
+/**
+ */
+package IoTML.Software.Artefact.impl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+import IoTML.Software.Artefact.ServiceDescription;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+import org.eclipse.uml2.uml.Interface;
+import org.eclipse.uml2.uml.Operation;
+import org.eclipse.uml2.uml.Parameter;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Service Description</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.impl.ServiceDescriptionImpl#getBase_Interface <em>Base Interface</em>}</li>
+ *   <li>{@link IoTML.Software.Artefact.impl.ServiceDescriptionImpl#getResourceGetSet <em>Resource Get Set</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ServiceDescriptionImpl extends MinimalEObjectImpl.Container implements ServiceDescription {
+	/**
+	 * The cached value of the '{@link #getBase_Interface() <em>Base Interface</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Interface()
+	 * @generated
+	 * @ordered
+	 */
+	protected Interface base_Interface;
+
+	/**
+	 * The cached value of the '{@link #getResourceGetSet() <em>Resource Get Set</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getResourceGetSet()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList resourceGetSet;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ServiceDescriptionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return ArtefactPackage.Literals.SERVICE_DESCRIPTION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Interface getBase_Interface() {
+		if (base_Interface != null && base_Interface.eIsProxy()) {
+			InternalEObject oldBase_Interface = (InternalEObject)base_Interface;
+			base_Interface = (Interface)eResolveProxy(oldBase_Interface);
+			if (base_Interface != oldBase_Interface) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArtefactPackage.SERVICE_DESCRIPTION__BASE_INTERFACE, oldBase_Interface, base_Interface));
+			}
+		}
+		return base_Interface;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Interface basicGetBase_Interface() {
+		return base_Interface;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Interface(Interface newBase_Interface) {
+		Interface oldBase_Interface = base_Interface;
+		base_Interface = newBase_Interface;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtefactPackage.SERVICE_DESCRIPTION__BASE_INTERFACE, oldBase_Interface, base_Interface));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getResourceGetSet() {
+		if (resourceGetSet == null) {
+			resourceGetSet = new EObjectResolvingEList(Operation.class, this, ArtefactPackage.SERVICE_DESCRIPTION__RESOURCE_GET_SET);
+		}
+		return resourceGetSet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Operation getResourceGetSet(String name, EList ownedParameterNames, EList ownedParameterTypes) {
+		return getResourceGetSet(name, ownedParameterNames, ownedParameterTypes, false);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Operation getResourceGetSet(String name, EList ownedParameterNames, EList ownedParameterTypes, boolean ignoreCase) {
+		resourceGetSetLoop: for (Iterator i = getResourceGetSet().iterator(); i.hasNext(); ) {
+			Operation resourceGetSet = (Operation) i.next();
+			if (name != null && !(ignoreCase ? name.equalsIgnoreCase(resourceGetSet.getName()) : name.equals(resourceGetSet.getName())))
+				continue resourceGetSetLoop;
+			EList<Parameter> ownedParameterList = resourceGetSet.getOwnedParameters();
+			int ownedParameterListSize = ownedParameterList.size();
+			if (ownedParameterNames != null && ownedParameterNames.size() != ownedParameterListSize || (ownedParameterTypes != null && ownedParameterTypes.size() != ownedParameterListSize))
+				continue  resourceGetSetLoop;
+			for (int j = 0; j < ownedParameterListSize; j++) {
+				Parameter ownedParameter = (Parameter) ownedParameterList.get(j);
+				if (ownedParameterNames != null && !(ignoreCase ? ((String)ownedParameterNames.get(j)).equalsIgnoreCase(ownedParameter.getName()) : ownedParameterNames.get(j).equals(ownedParameter.getName())))
+					continue resourceGetSetLoop;
+				if (ownedParameterTypes != null && !ownedParameterTypes.get(j).equals(ownedParameter.getType()))
+					continue resourceGetSetLoop;
+			}
+			return resourceGetSet;
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArtefactPackage.SERVICE_DESCRIPTION__BASE_INTERFACE:
+				if (resolve) return getBase_Interface();
+				return basicGetBase_Interface();
+			case ArtefactPackage.SERVICE_DESCRIPTION__RESOURCE_GET_SET:
+				return getResourceGetSet();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArtefactPackage.SERVICE_DESCRIPTION__BASE_INTERFACE:
+				setBase_Interface((Interface)newValue);
+				return;
+			case ArtefactPackage.SERVICE_DESCRIPTION__RESOURCE_GET_SET:
+				getResourceGetSet().clear();
+				getResourceGetSet().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.SERVICE_DESCRIPTION__BASE_INTERFACE:
+				setBase_Interface((Interface)null);
+				return;
+			case ArtefactPackage.SERVICE_DESCRIPTION__RESOURCE_GET_SET:
+				getResourceGetSet().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.SERVICE_DESCRIPTION__BASE_INTERFACE:
+				return base_Interface != null;
+			case ArtefactPackage.SERVICE_DESCRIPTION__RESOURCE_GET_SET:
+				return resourceGetSet != null && !resourceGetSet.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ServiceDescriptionImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ServiceImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ServiceImpl.java
new file mode 100644
index 0000000..ee9d2b1
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/ServiceImpl.java
@@ -0,0 +1,73 @@
+/**
+ */
+package IoTML.Software.Artefact.impl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+import IoTML.Software.Artefact.Service;
+
+import IoTML.Software.Artefact.util.ArtefactValidator;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.emf.ecore.util.EObjectValidator;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Service</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ServiceImpl extends DigitalArtefactImpl implements Service {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ServiceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return ArtefactPackage.Literals.SERVICE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean Service_C1(DiagnosticChain diagnostics, Map context) {
+		// TODO: implement this method
+		// -> specify the condition that violates the invariant
+		// -> verify the details of the diagnostic, including severity and message
+		// Ensure that you remove @generated or mark it @generated NOT
+		if (false) {
+			if (diagnostics != null) {
+				diagnostics.add
+					(new BasicDiagnostic
+						(Diagnostic.ERROR,
+						 ArtefactValidator.DIAGNOSTIC_SOURCE,
+						 ArtefactValidator.SERVICE__SERVICE_C1,
+						 EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "Service_C1", EObjectValidator.getObjectLabel(this, context) }),
+						 new Object [] { this }));
+			}
+			return false;
+		}
+		return true;
+	}
+
+} //ServiceImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/VirtualEntityImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/VirtualEntityImpl.java
new file mode 100644
index 0000000..87a69bd
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/impl/VirtualEntityImpl.java
@@ -0,0 +1,214 @@
+/**
+ */
+package IoTML.Software.Artefact.impl;
+
+import IoTML.Hybrid.PhysicalEntity;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+import IoTML.Software.Artefact.VirtualEntity;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.uml2.uml.InstanceSpecification;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Virtual Entity</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Artefact.impl.VirtualEntityImpl#getPhisicalEntitySpecification <em>Phisical Entity Specification</em>}</li>
+ *   <li>{@link IoTML.Software.Artefact.impl.VirtualEntityImpl#getPhysicalEntity <em>Physical Entity</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class VirtualEntityImpl extends DigitalArtefactImpl implements VirtualEntity {
+	/**
+	 * The cached value of the '{@link #getPhisicalEntitySpecification() <em>Phisical Entity Specification</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPhisicalEntitySpecification()
+	 * @generated
+	 * @ordered
+	 */
+	protected InstanceSpecification phisicalEntitySpecification;
+
+	/**
+	 * The cached value of the '{@link #getPhysicalEntity() <em>Physical Entity</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPhysicalEntity()
+	 * @generated
+	 * @ordered
+	 */
+	protected PhysicalEntity physicalEntity;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected VirtualEntityImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return ArtefactPackage.Literals.VIRTUAL_ENTITY;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public InstanceSpecification getPhisicalEntitySpecification() {
+		if (phisicalEntitySpecification != null && phisicalEntitySpecification.eIsProxy()) {
+			InternalEObject oldPhisicalEntitySpecification = (InternalEObject)phisicalEntitySpecification;
+			phisicalEntitySpecification = (InstanceSpecification)eResolveProxy(oldPhisicalEntitySpecification);
+			if (phisicalEntitySpecification != oldPhisicalEntitySpecification) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArtefactPackage.VIRTUAL_ENTITY__PHISICAL_ENTITY_SPECIFICATION, oldPhisicalEntitySpecification, phisicalEntitySpecification));
+			}
+		}
+		return phisicalEntitySpecification;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public InstanceSpecification basicGetPhisicalEntitySpecification() {
+		return phisicalEntitySpecification;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPhisicalEntitySpecification(InstanceSpecification newPhisicalEntitySpecification) {
+		InstanceSpecification oldPhisicalEntitySpecification = phisicalEntitySpecification;
+		phisicalEntitySpecification = newPhisicalEntitySpecification;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtefactPackage.VIRTUAL_ENTITY__PHISICAL_ENTITY_SPECIFICATION, oldPhisicalEntitySpecification, phisicalEntitySpecification));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhysicalEntity getPhysicalEntity() {
+		if (physicalEntity != null && physicalEntity.eIsProxy()) {
+			InternalEObject oldPhysicalEntity = (InternalEObject)physicalEntity;
+			physicalEntity = (PhysicalEntity)eResolveProxy(oldPhysicalEntity);
+			if (physicalEntity != oldPhysicalEntity) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArtefactPackage.VIRTUAL_ENTITY__PHYSICAL_ENTITY, oldPhysicalEntity, physicalEntity));
+			}
+		}
+		return physicalEntity;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public PhysicalEntity basicGetPhysicalEntity() {
+		return physicalEntity;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPhysicalEntity(PhysicalEntity newPhysicalEntity) {
+		PhysicalEntity oldPhysicalEntity = physicalEntity;
+		physicalEntity = newPhysicalEntity;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtefactPackage.VIRTUAL_ENTITY__PHYSICAL_ENTITY, oldPhysicalEntity, physicalEntity));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArtefactPackage.VIRTUAL_ENTITY__PHISICAL_ENTITY_SPECIFICATION:
+				if (resolve) return getPhisicalEntitySpecification();
+				return basicGetPhisicalEntitySpecification();
+			case ArtefactPackage.VIRTUAL_ENTITY__PHYSICAL_ENTITY:
+				if (resolve) return getPhysicalEntity();
+				return basicGetPhysicalEntity();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArtefactPackage.VIRTUAL_ENTITY__PHISICAL_ENTITY_SPECIFICATION:
+				setPhisicalEntitySpecification((InstanceSpecification)newValue);
+				return;
+			case ArtefactPackage.VIRTUAL_ENTITY__PHYSICAL_ENTITY:
+				setPhysicalEntity((PhysicalEntity)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.VIRTUAL_ENTITY__PHISICAL_ENTITY_SPECIFICATION:
+				setPhisicalEntitySpecification((InstanceSpecification)null);
+				return;
+			case ArtefactPackage.VIRTUAL_ENTITY__PHYSICAL_ENTITY:
+				setPhysicalEntity((PhysicalEntity)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArtefactPackage.VIRTUAL_ENTITY__PHISICAL_ENTITY_SPECIFICATION:
+				return phisicalEntitySpecification != null;
+			case ArtefactPackage.VIRTUAL_ENTITY__PHYSICAL_ENTITY:
+				return physicalEntity != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //VirtualEntityImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/util/ArtefactAdapterFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/util/ArtefactAdapterFactory.java
new file mode 100644
index 0000000..60cb8a4
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/util/ArtefactAdapterFactory.java
@@ -0,0 +1,218 @@
+/**
+ */
+package IoTML.Software.Artefact.util;
+
+import IoTML.Software.Artefact.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Artefact.ArtefactPackage
+ * @generated
+ */
+public class ArtefactAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ArtefactPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtefactAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ArtefactPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArtefactSwitch modelSwitch =
+		new ArtefactSwitch() {
+			public Object casePropertyAccess(PropertyAccess object) {
+				return createPropertyAccessAdapter();
+			}
+			public Object caseDigitalArtefact(DigitalArtefact object) {
+				return createDigitalArtefactAdapter();
+			}
+			public Object caseVirtualEntity(VirtualEntity object) {
+				return createVirtualEntityAdapter();
+			}
+			public Object caseProvideService(ProvideService object) {
+				return createProvideServiceAdapter();
+			}
+			public Object caseProvideResource(ProvideResource object) {
+				return createProvideResourceAdapter();
+			}
+			public Object caseServiceDescription(ServiceDescription object) {
+				return createServiceDescriptionAdapter();
+			}
+			public Object caseService(Service object) {
+				return createServiceAdapter();
+			}
+			public Object defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	public Adapter createAdapter(Notifier target) {
+		return (Adapter)modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Artefact.PropertyAccess <em>Property Access</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Artefact.PropertyAccess
+	 * @generated
+	 */
+	public Adapter createPropertyAccessAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Artefact.DigitalArtefact <em>Digital Artefact</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Artefact.DigitalArtefact
+	 * @generated
+	 */
+	public Adapter createDigitalArtefactAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Artefact.VirtualEntity <em>Virtual Entity</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Artefact.VirtualEntity
+	 * @generated
+	 */
+	public Adapter createVirtualEntityAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Artefact.ProvideService <em>Provide Service</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Artefact.ProvideService
+	 * @generated
+	 */
+	public Adapter createProvideServiceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Artefact.ProvideResource <em>Provide Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Artefact.ProvideResource
+	 * @generated
+	 */
+	public Adapter createProvideResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Artefact.ServiceDescription <em>Service Description</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Artefact.ServiceDescription
+	 * @generated
+	 */
+	public Adapter createServiceDescriptionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Artefact.Service <em>Service</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Artefact.Service
+	 * @generated
+	 */
+	public Adapter createServiceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ArtefactAdapterFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/util/ArtefactSwitch.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/util/ArtefactSwitch.java
new file mode 100644
index 0000000..cc90d3d
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/util/ArtefactSwitch.java
@@ -0,0 +1,254 @@
+/**
+ */
+package IoTML.Software.Artefact.util;
+
+import IoTML.Software.Artefact.*;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Artefact.ArtefactPackage
+ * @generated
+ */
+public class ArtefactSwitch {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ArtefactPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtefactSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ArtefactPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public Object doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch((EClass)eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ArtefactPackage.PROPERTY_ACCESS: {
+				PropertyAccess propertyAccess = (PropertyAccess)theEObject;
+				Object result = casePropertyAccess(propertyAccess);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ArtefactPackage.DIGITAL_ARTEFACT: {
+				DigitalArtefact digitalArtefact = (DigitalArtefact)theEObject;
+				Object result = caseDigitalArtefact(digitalArtefact);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ArtefactPackage.VIRTUAL_ENTITY: {
+				VirtualEntity virtualEntity = (VirtualEntity)theEObject;
+				Object result = caseVirtualEntity(virtualEntity);
+				if (result == null) result = caseDigitalArtefact(virtualEntity);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ArtefactPackage.PROVIDE_SERVICE: {
+				ProvideService provideService = (ProvideService)theEObject;
+				Object result = caseProvideService(provideService);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ArtefactPackage.PROVIDE_RESOURCE: {
+				ProvideResource provideResource = (ProvideResource)theEObject;
+				Object result = caseProvideResource(provideResource);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ArtefactPackage.SERVICE_DESCRIPTION: {
+				ServiceDescription serviceDescription = (ServiceDescription)theEObject;
+				Object result = caseServiceDescription(serviceDescription);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ArtefactPackage.SERVICE: {
+				Service service = (Service)theEObject;
+				Object result = caseService(service);
+				if (result == null) result = caseDigitalArtefact(service);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Property Access</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Property Access</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object casePropertyAccess(PropertyAccess object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Digital Artefact</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Digital Artefact</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseDigitalArtefact(DigitalArtefact object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Virtual Entity</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Virtual Entity</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseVirtualEntity(VirtualEntity object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Provide Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Provide Service</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseProvideService(ProvideService object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Provide Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Provide Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseProvideResource(ProvideResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Service Description</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Service Description</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseServiceDescription(ServiceDescription object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Service</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseService(Service object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public Object defaultCase(EObject object) {
+		return null;
+	}
+
+} //ArtefactSwitch
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/util/ArtefactValidator.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/util/ArtefactValidator.java
new file mode 100644
index 0000000..b057276
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Artefact/util/ArtefactValidator.java
@@ -0,0 +1,339 @@
+/**
+ */
+package IoTML.Software.Artefact.util;
+
+import IoTML.Software.Artefact.*;
+
+import java.util.Map;
+
+import org.eclipse.emf.common.util.DiagnosticChain;
+
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.EObjectValidator;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Validator</b> for the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Artefact.ArtefactPackage
+ * @generated
+ */
+public class ArtefactValidator extends EObjectValidator {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final ArtefactValidator INSTANCE = new ArtefactValidator();
+
+	/**
+	 * A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.common.util.Diagnostic#getSource()
+	 * @see org.eclipse.emf.common.util.Diagnostic#getCode()
+	 * @generated
+	 */
+	public static final String DIAGNOSTIC_SOURCE = "IoTML.Software.Artefact";
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Property Access C1' of 'Property Access'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int PROPERTY_ACCESS__PROPERTY_ACCESS_C1 = 1;
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Property Access C2' of 'Property Access'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int PROPERTY_ACCESS__PROPERTY_ACCESS_C2 = 2;
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Property Access C3' of 'Property Access'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int PROPERTY_ACCESS__PROPERTY_ACCESS_C3 = 3;
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Provide Service C2' of 'Provide Service'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int PROVIDE_SERVICE__PROVIDE_SERVICE_C2 = 4;
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Provide Service C1' of 'Provide Service'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int PROVIDE_SERVICE__PROVIDE_SERVICE_C1 = 5;
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Provide Resource C1' of 'Provide Resource'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int PROVIDE_RESOURCE__PROVIDE_RESOURCE_C1 = 6;
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Provide Resource C2' of 'Provide Resource'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int PROVIDE_RESOURCE__PROVIDE_RESOURCE_C2 = 7;
+
+	/**
+	 * The {@link org.eclipse.emf.common.util.Diagnostic#getCode() code} for constraint 'Service C1' of 'Service'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final int SERVICE__SERVICE_C1 = 8;
+
+	/**
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 8;
+
+	/**
+	 * A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static final int DIAGNOSTIC_CODE_COUNT = GENERATED_DIAGNOSTIC_CODE_COUNT;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtefactValidator() {
+		super();
+	}
+
+	/**
+	 * Returns the package of this validator switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EPackage getEPackage() {
+	  return ArtefactPackage.eINSTANCE;
+	}
+
+	/**
+	 * Calls <code>validateXXX</code> for the corresponding classifier of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics, Map context) {
+		switch (classifierID) {
+			case ArtefactPackage.PROPERTY_ACCESS:
+				return validatePropertyAccess((PropertyAccess)value, diagnostics, context);
+			case ArtefactPackage.DIGITAL_ARTEFACT:
+				return validateDigitalArtefact((DigitalArtefact)value, diagnostics, context);
+			case ArtefactPackage.VIRTUAL_ENTITY:
+				return validateVirtualEntity((VirtualEntity)value, diagnostics, context);
+			case ArtefactPackage.PROVIDE_SERVICE:
+				return validateProvideService((ProvideService)value, diagnostics, context);
+			case ArtefactPackage.PROVIDE_RESOURCE:
+				return validateProvideResource((ProvideResource)value, diagnostics, context);
+			case ArtefactPackage.SERVICE_DESCRIPTION:
+				return validateServiceDescription((ServiceDescription)value, diagnostics, context);
+			case ArtefactPackage.SERVICE:
+				return validateService((Service)value, diagnostics, context);
+			default:
+				return true;
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validatePropertyAccess(PropertyAccess propertyAccess, DiagnosticChain diagnostics, Map context) {
+		boolean result = validate_EveryMultiplicityConforms(propertyAccess, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(propertyAccess, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(propertyAccess, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(propertyAccess, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(propertyAccess, diagnostics, context);
+		if (result || diagnostics != null) result &= validatePropertyAccess_PropertyAccess_C1(propertyAccess, diagnostics, context);
+		if (result || diagnostics != null) result &= validatePropertyAccess_PropertyAccess_C2(propertyAccess, diagnostics, context);
+		if (result || diagnostics != null) result &= validatePropertyAccess_propertyAccess_C3(propertyAccess, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * Validates the PropertyAccess_C1 constraint of '<em>Property Access</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validatePropertyAccess_PropertyAccess_C1(PropertyAccess propertyAccess, DiagnosticChain diagnostics, Map context) {
+		return propertyAccess.PropertyAccess_C1(diagnostics, context);
+	}
+
+	/**
+	 * Validates the PropertyAccess_C2 constraint of '<em>Property Access</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validatePropertyAccess_PropertyAccess_C2(PropertyAccess propertyAccess, DiagnosticChain diagnostics, Map context) {
+		return propertyAccess.PropertyAccess_C2(diagnostics, context);
+	}
+
+	/**
+	 * Validates the propertyAccess_C3 constraint of '<em>Property Access</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validatePropertyAccess_propertyAccess_C3(PropertyAccess propertyAccess, DiagnosticChain diagnostics, Map context) {
+		return propertyAccess.propertyAccess_C3(diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateDigitalArtefact(DigitalArtefact digitalArtefact, DiagnosticChain diagnostics, Map context) {
+		return validate_EveryDefaultConstraint(digitalArtefact, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateVirtualEntity(VirtualEntity virtualEntity, DiagnosticChain diagnostics, Map context) {
+		return validate_EveryDefaultConstraint(virtualEntity, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateProvideService(ProvideService provideService, DiagnosticChain diagnostics, Map context) {
+		boolean result = validate_EveryMultiplicityConforms(provideService, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(provideService, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(provideService, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(provideService, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(provideService, diagnostics, context);
+		if (result || diagnostics != null) result &= validateProvideService_ProvideService_C2(provideService, diagnostics, context);
+		if (result || diagnostics != null) result &= validateProvideService_ProvideService_C1(provideService, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * Validates the ProvideService_C2 constraint of '<em>Provide Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateProvideService_ProvideService_C2(ProvideService provideService, DiagnosticChain diagnostics, Map context) {
+		return provideService.ProvideService_C2(diagnostics, context);
+	}
+
+	/**
+	 * Validates the ProvideService_C1 constraint of '<em>Provide Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateProvideService_ProvideService_C1(ProvideService provideService, DiagnosticChain diagnostics, Map context) {
+		return provideService.ProvideService_C1(diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateProvideResource(ProvideResource provideResource, DiagnosticChain diagnostics, Map context) {
+		boolean result = validate_EveryMultiplicityConforms(provideResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(provideResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(provideResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(provideResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(provideResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validateProvideResource_ProvideResource_C1(provideResource, diagnostics, context);
+		if (result || diagnostics != null) result &= validateProvideResource_ProvideResource_C2(provideResource, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * Validates the ProvideResource_C1 constraint of '<em>Provide Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateProvideResource_ProvideResource_C1(ProvideResource provideResource, DiagnosticChain diagnostics, Map context) {
+		return provideResource.ProvideResource_C1(diagnostics, context);
+	}
+
+	/**
+	 * Validates the ProvideResource_C2 constraint of '<em>Provide Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateProvideResource_ProvideResource_C2(ProvideResource provideResource, DiagnosticChain diagnostics, Map context) {
+		return provideResource.ProvideResource_C2(diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateServiceDescription(ServiceDescription serviceDescription, DiagnosticChain diagnostics, Map context) {
+		return validate_EveryDefaultConstraint(serviceDescription, diagnostics, context);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateService(Service service, DiagnosticChain diagnostics, Map context) {
+		boolean result = validate_EveryMultiplicityConforms(service, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryDataValueConforms(service, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(service, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_EveryProxyResolves(service, diagnostics, context);
+		if (result || diagnostics != null) result &= validate_UniqueID(service, diagnostics, context);
+		if (result || diagnostics != null) result &= validateService_Service_C1(service, diagnostics, context);
+		return result;
+	}
+
+	/**
+	 * Validates the Service_C1 constraint of '<em>Service</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean validateService_Service_C1(Service service, DiagnosticChain diagnostics, Map context) {
+		return service.Service_C1(diagnostics, context);
+	}
+
+} //ArtefactValidator
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/DetailedValueSpecification.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/DetailedValueSpecification.java
new file mode 100644
index 0000000..160458d
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/DetailedValueSpecification.java
@@ -0,0 +1,71 @@
+/**
+ */
+package IoTML.Software.Core.Structure;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.ValueSpecification;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Detailed Value Specification</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Core.Structure.DetailedValueSpecification#getBase_ValueSpecification <em>Base Value Specification</em>}</li>
+ *   <li>{@link IoTML.Software.Core.Structure.DetailedValueSpecification#getMetaSpecification <em>Meta Specification</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Software.Core.Structure.StructurePackage#getDetailedValueSpecification()
+ * @model
+ * @generated
+ */
+public interface DetailedValueSpecification extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Value Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Value Specification</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Value Specification</em>' reference.
+	 * @see #setBase_ValueSpecification(ValueSpecification)
+	 * @see IoTML.Software.Core.Structure.StructurePackage#getDetailedValueSpecification_Base_ValueSpecification()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	ValueSpecification getBase_ValueSpecification();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Core.Structure.DetailedValueSpecification#getBase_ValueSpecification <em>Base Value Specification</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Value Specification</em>' reference.
+	 * @see #getBase_ValueSpecification()
+	 * @generated
+	 */
+	void setBase_ValueSpecification(ValueSpecification value);
+
+	/**
+	 * Returns the value of the '<em><b>Meta Specification</b></em>' containment reference list.
+	 * The list contents are of type {@link IoTML.Software.Core.Structure.MetaValueSpecification}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Meta Specification</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Meta Specification</em>' containment reference list.
+	 * @see IoTML.Software.Core.Structure.StructurePackage#getDetailedValueSpecification_MetaSpecification()
+	 * @model type="IoTML.Software.Core.Structure.MetaValueSpecification" containment="true" ordered="false"
+	 * @generated
+	 */
+	EList getMetaSpecification();
+
+} // DetailedValueSpecification
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/MetaValueSpecification.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/MetaValueSpecification.java
new file mode 100644
index 0000000..7810a15
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/MetaValueSpecification.java
@@ -0,0 +1,107 @@
+/**
+ */
+package IoTML.Software.Core.Structure;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Type;
+import org.eclipse.uml2.uml.ValueSpecification;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Meta Value Specification</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Core.Structure.MetaValueSpecification#getBase_ValueSpecification <em>Base Value Specification</em>}</li>
+ *   <li>{@link IoTML.Software.Core.Structure.MetaValueSpecification#getType <em>Type</em>}</li>
+ *   <li>{@link IoTML.Software.Core.Structure.MetaValueSpecification#getDescription <em>Description</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Software.Core.Structure.StructurePackage#getMetaValueSpecification()
+ * @model
+ * @generated
+ */
+public interface MetaValueSpecification extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Value Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Value Specification</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Value Specification</em>' reference.
+	 * @see #setBase_ValueSpecification(ValueSpecification)
+	 * @see IoTML.Software.Core.Structure.StructurePackage#getMetaValueSpecification_Base_ValueSpecification()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	ValueSpecification getBase_ValueSpecification();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Core.Structure.MetaValueSpecification#getBase_ValueSpecification <em>Base Value Specification</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Value Specification</em>' reference.
+	 * @see #getBase_ValueSpecification()
+	 * @generated
+	 */
+	void setBase_ValueSpecification(ValueSpecification value);
+
+	/**
+	 * Returns the value of the '<em><b>Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Type</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type</em>' reference.
+	 * @see #setType(Type)
+	 * @see IoTML.Software.Core.Structure.StructurePackage#getMetaValueSpecification_Type()
+	 * @model transient="true" volatile="true" derived="true" ordered="false"
+	 * @generated
+	 */
+	Type getType();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Core.Structure.MetaValueSpecification#getType <em>Type</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type</em>' reference.
+	 * @see #getType()
+	 * @generated
+	 */
+	void setType(Type value);
+
+	/**
+	 * Returns the value of the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Description</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Description</em>' attribute.
+	 * @see #setDescription(String)
+	 * @see IoTML.Software.Core.Structure.StructurePackage#getMetaValueSpecification_Description()
+	 * @model dataType="org.eclipse.uml2.types.String" ordered="false"
+	 * @generated
+	 */
+	String getDescription();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Core.Structure.MetaValueSpecification#getDescription <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Description</em>' attribute.
+	 * @see #getDescription()
+	 * @generated
+	 */
+	void setDescription(String value);
+
+} // MetaValueSpecification
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/StructureFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/StructureFactory.java
new file mode 100644
index 0000000..1d94a14
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/StructureFactory.java
@@ -0,0 +1,51 @@
+/**
+ */
+package IoTML.Software.Core.Structure;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Core.Structure.StructurePackage
+ * @generated
+ */
+public interface StructureFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	StructureFactory eINSTANCE = IoTML.Software.Core.Structure.impl.StructureFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Meta Value Specification</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Meta Value Specification</em>'.
+	 * @generated
+	 */
+	MetaValueSpecification createMetaValueSpecification();
+
+	/**
+	 * Returns a new object of class '<em>Detailed Value Specification</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Detailed Value Specification</em>'.
+	 * @generated
+	 */
+	DetailedValueSpecification createDetailedValueSpecification();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	StructurePackage getStructurePackage();
+
+} //StructureFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/StructurePackage.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/StructurePackage.java
new file mode 100644
index 0000000..f10b921
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/StructurePackage.java
@@ -0,0 +1,301 @@
+/**
+ */
+package IoTML.Software.Core.Structure;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Core.Structure.StructureFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface StructurePackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "Structure";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///IoTML/Software/Core/Structure.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "IoTML.Software.Core.Structure";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	StructurePackage eINSTANCE = IoTML.Software.Core.Structure.impl.StructurePackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Core.Structure.impl.MetaValueSpecificationImpl <em>Meta Value Specification</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Core.Structure.impl.MetaValueSpecificationImpl
+	 * @see IoTML.Software.Core.Structure.impl.StructurePackageImpl#getMetaValueSpecification()
+	 * @generated
+	 */
+	int META_VALUE_SPECIFICATION = 0;
+
+	/**
+	 * The feature id for the '<em><b>Base Value Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int META_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION = 0;
+
+	/**
+	 * The feature id for the '<em><b>Type</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int META_VALUE_SPECIFICATION__TYPE = 1;
+
+	/**
+	 * The feature id for the '<em><b>Description</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int META_VALUE_SPECIFICATION__DESCRIPTION = 2;
+
+	/**
+	 * The number of structural features of the '<em>Meta Value Specification</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int META_VALUE_SPECIFICATION_FEATURE_COUNT = 3;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Core.Structure.impl.DetailedValueSpecificationImpl <em>Detailed Value Specification</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Core.Structure.impl.DetailedValueSpecificationImpl
+	 * @see IoTML.Software.Core.Structure.impl.StructurePackageImpl#getDetailedValueSpecification()
+	 * @generated
+	 */
+	int DETAILED_VALUE_SPECIFICATION = 1;
+
+	/**
+	 * The feature id for the '<em><b>Base Value Specification</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETAILED_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION = 0;
+
+	/**
+	 * The feature id for the '<em><b>Meta Specification</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETAILED_VALUE_SPECIFICATION__META_SPECIFICATION = 1;
+
+	/**
+	 * The number of structural features of the '<em>Detailed Value Specification</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DETAILED_VALUE_SPECIFICATION_FEATURE_COUNT = 2;
+
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Core.Structure.MetaValueSpecification <em>Meta Value Specification</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Meta Value Specification</em>'.
+	 * @see IoTML.Software.Core.Structure.MetaValueSpecification
+	 * @generated
+	 */
+	EClass getMetaValueSpecification();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Core.Structure.MetaValueSpecification#getBase_ValueSpecification <em>Base Value Specification</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Value Specification</em>'.
+	 * @see IoTML.Software.Core.Structure.MetaValueSpecification#getBase_ValueSpecification()
+	 * @see #getMetaValueSpecification()
+	 * @generated
+	 */
+	EReference getMetaValueSpecification_Base_ValueSpecification();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Core.Structure.MetaValueSpecification#getType <em>Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Type</em>'.
+	 * @see IoTML.Software.Core.Structure.MetaValueSpecification#getType()
+	 * @see #getMetaValueSpecification()
+	 * @generated
+	 */
+	EReference getMetaValueSpecification_Type();
+
+	/**
+	 * Returns the meta object for the attribute '{@link IoTML.Software.Core.Structure.MetaValueSpecification#getDescription <em>Description</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Description</em>'.
+	 * @see IoTML.Software.Core.Structure.MetaValueSpecification#getDescription()
+	 * @see #getMetaValueSpecification()
+	 * @generated
+	 */
+	EAttribute getMetaValueSpecification_Description();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Core.Structure.DetailedValueSpecification <em>Detailed Value Specification</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Detailed Value Specification</em>'.
+	 * @see IoTML.Software.Core.Structure.DetailedValueSpecification
+	 * @generated
+	 */
+	EClass getDetailedValueSpecification();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Core.Structure.DetailedValueSpecification#getBase_ValueSpecification <em>Base Value Specification</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Value Specification</em>'.
+	 * @see IoTML.Software.Core.Structure.DetailedValueSpecification#getBase_ValueSpecification()
+	 * @see #getDetailedValueSpecification()
+	 * @generated
+	 */
+	EReference getDetailedValueSpecification_Base_ValueSpecification();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link IoTML.Software.Core.Structure.DetailedValueSpecification#getMetaSpecification <em>Meta Specification</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Meta Specification</em>'.
+	 * @see IoTML.Software.Core.Structure.DetailedValueSpecification#getMetaSpecification()
+	 * @see #getDetailedValueSpecification()
+	 * @generated
+	 */
+	EReference getDetailedValueSpecification_MetaSpecification();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	StructureFactory getStructureFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Core.Structure.impl.MetaValueSpecificationImpl <em>Meta Value Specification</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Core.Structure.impl.MetaValueSpecificationImpl
+		 * @see IoTML.Software.Core.Structure.impl.StructurePackageImpl#getMetaValueSpecification()
+		 * @generated
+		 */
+		EClass META_VALUE_SPECIFICATION = eINSTANCE.getMetaValueSpecification();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Value Specification</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference META_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION = eINSTANCE.getMetaValueSpecification_Base_ValueSpecification();
+
+		/**
+		 * The meta object literal for the '<em><b>Type</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference META_VALUE_SPECIFICATION__TYPE = eINSTANCE.getMetaValueSpecification_Type();
+
+		/**
+		 * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute META_VALUE_SPECIFICATION__DESCRIPTION = eINSTANCE.getMetaValueSpecification_Description();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Core.Structure.impl.DetailedValueSpecificationImpl <em>Detailed Value Specification</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Core.Structure.impl.DetailedValueSpecificationImpl
+		 * @see IoTML.Software.Core.Structure.impl.StructurePackageImpl#getDetailedValueSpecification()
+		 * @generated
+		 */
+		EClass DETAILED_VALUE_SPECIFICATION = eINSTANCE.getDetailedValueSpecification();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Value Specification</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DETAILED_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION = eINSTANCE.getDetailedValueSpecification_Base_ValueSpecification();
+
+		/**
+		 * The meta object literal for the '<em><b>Meta Specification</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference DETAILED_VALUE_SPECIFICATION__META_SPECIFICATION = eINSTANCE.getDetailedValueSpecification_MetaSpecification();
+
+	}
+
+} //StructurePackage
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/DetailedValueSpecificationImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/DetailedValueSpecificationImpl.java
new file mode 100644
index 0000000..3804ccd
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/DetailedValueSpecificationImpl.java
@@ -0,0 +1,209 @@
+/**
+ */
+package IoTML.Software.Core.Structure.impl;
+
+import IoTML.Software.Core.Structure.DetailedValueSpecification;
+import IoTML.Software.Core.Structure.MetaValueSpecification;
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.uml2.uml.ValueSpecification;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Detailed Value Specification</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Core.Structure.impl.DetailedValueSpecificationImpl#getBase_ValueSpecification <em>Base Value Specification</em>}</li>
+ *   <li>{@link IoTML.Software.Core.Structure.impl.DetailedValueSpecificationImpl#getMetaSpecification <em>Meta Specification</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class DetailedValueSpecificationImpl extends MinimalEObjectImpl.Container implements DetailedValueSpecification {
+	/**
+	 * The cached value of the '{@link #getBase_ValueSpecification() <em>Base Value Specification</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_ValueSpecification()
+	 * @generated
+	 * @ordered
+	 */
+	protected ValueSpecification base_ValueSpecification;
+
+	/**
+	 * The cached value of the '{@link #getMetaSpecification() <em>Meta Specification</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMetaSpecification()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList metaSpecification;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected DetailedValueSpecificationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return StructurePackage.Literals.DETAILED_VALUE_SPECIFICATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ValueSpecification getBase_ValueSpecification() {
+		if (base_ValueSpecification != null && base_ValueSpecification.eIsProxy()) {
+			InternalEObject oldBase_ValueSpecification = (InternalEObject)base_ValueSpecification;
+			base_ValueSpecification = (ValueSpecification)eResolveProxy(oldBase_ValueSpecification);
+			if (base_ValueSpecification != oldBase_ValueSpecification) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StructurePackage.DETAILED_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION, oldBase_ValueSpecification, base_ValueSpecification));
+			}
+		}
+		return base_ValueSpecification;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ValueSpecification basicGetBase_ValueSpecification() {
+		return base_ValueSpecification;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_ValueSpecification(ValueSpecification newBase_ValueSpecification) {
+		ValueSpecification oldBase_ValueSpecification = base_ValueSpecification;
+		base_ValueSpecification = newBase_ValueSpecification;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StructurePackage.DETAILED_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION, oldBase_ValueSpecification, base_ValueSpecification));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList getMetaSpecification() {
+		if (metaSpecification == null) {
+			metaSpecification = new EObjectContainmentEList(MetaValueSpecification.class, this, StructurePackage.DETAILED_VALUE_SPECIFICATION__META_SPECIFICATION);
+		}
+		return metaSpecification;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION__META_SPECIFICATION:
+				return ((InternalEList)getMetaSpecification()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION:
+				if (resolve) return getBase_ValueSpecification();
+				return basicGetBase_ValueSpecification();
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION__META_SPECIFICATION:
+				return getMetaSpecification();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION:
+				setBase_ValueSpecification((ValueSpecification)newValue);
+				return;
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION__META_SPECIFICATION:
+				getMetaSpecification().clear();
+				getMetaSpecification().addAll((Collection)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION:
+				setBase_ValueSpecification((ValueSpecification)null);
+				return;
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION__META_SPECIFICATION:
+				getMetaSpecification().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION:
+				return base_ValueSpecification != null;
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION__META_SPECIFICATION:
+				return metaSpecification != null && !metaSpecification.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //DetailedValueSpecificationImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/MetaValueSpecificationImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/MetaValueSpecificationImpl.java
new file mode 100644
index 0000000..ab28c26
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/MetaValueSpecificationImpl.java
@@ -0,0 +1,266 @@
+/**
+ */
+package IoTML.Software.Core.Structure.impl;
+
+import IoTML.Software.Core.Structure.MetaValueSpecification;
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.uml2.uml.Type;
+import org.eclipse.uml2.uml.ValueSpecification;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Meta Value Specification</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Core.Structure.impl.MetaValueSpecificationImpl#getBase_ValueSpecification <em>Base Value Specification</em>}</li>
+ *   <li>{@link IoTML.Software.Core.Structure.impl.MetaValueSpecificationImpl#getType <em>Type</em>}</li>
+ *   <li>{@link IoTML.Software.Core.Structure.impl.MetaValueSpecificationImpl#getDescription <em>Description</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class MetaValueSpecificationImpl extends MinimalEObjectImpl.Container implements MetaValueSpecification {
+	/**
+	 * The cached value of the '{@link #getBase_ValueSpecification() <em>Base Value Specification</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_ValueSpecification()
+	 * @generated
+	 * @ordered
+	 */
+	protected ValueSpecification base_ValueSpecification;
+
+	/**
+	 * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDescription()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DESCRIPTION_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDescription()
+	 * @generated
+	 * @ordered
+	 */
+	protected String description = DESCRIPTION_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MetaValueSpecificationImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return StructurePackage.Literals.META_VALUE_SPECIFICATION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ValueSpecification getBase_ValueSpecification() {
+		if (base_ValueSpecification != null && base_ValueSpecification.eIsProxy()) {
+			InternalEObject oldBase_ValueSpecification = (InternalEObject)base_ValueSpecification;
+			base_ValueSpecification = (ValueSpecification)eResolveProxy(oldBase_ValueSpecification);
+			if (base_ValueSpecification != oldBase_ValueSpecification) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, StructurePackage.META_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION, oldBase_ValueSpecification, base_ValueSpecification));
+			}
+		}
+		return base_ValueSpecification;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ValueSpecification basicGetBase_ValueSpecification() {
+		return base_ValueSpecification;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_ValueSpecification(ValueSpecification newBase_ValueSpecification) {
+		ValueSpecification oldBase_ValueSpecification = base_ValueSpecification;
+		base_ValueSpecification = newBase_ValueSpecification;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StructurePackage.META_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION, oldBase_ValueSpecification, base_ValueSpecification));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Type getType() {
+		Type type = basicGetType();
+		return type != null && type.eIsProxy() ? (Type)eResolveProxy((InternalEObject)type) : type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Type basicGetType() {
+		// TODO: implement this method to return the 'Type' reference
+		// -> do not perform proxy resolution
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setType(Type newType) {
+		// TODO: implement this method to set the 'Type' reference
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getDescription() {
+		return description;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDescription(String newDescription) {
+		String oldDescription = description;
+		description = newDescription;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, StructurePackage.META_VALUE_SPECIFICATION__DESCRIPTION, oldDescription, description));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case StructurePackage.META_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION:
+				if (resolve) return getBase_ValueSpecification();
+				return basicGetBase_ValueSpecification();
+			case StructurePackage.META_VALUE_SPECIFICATION__TYPE:
+				if (resolve) return getType();
+				return basicGetType();
+			case StructurePackage.META_VALUE_SPECIFICATION__DESCRIPTION:
+				return getDescription();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case StructurePackage.META_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION:
+				setBase_ValueSpecification((ValueSpecification)newValue);
+				return;
+			case StructurePackage.META_VALUE_SPECIFICATION__TYPE:
+				setType((Type)newValue);
+				return;
+			case StructurePackage.META_VALUE_SPECIFICATION__DESCRIPTION:
+				setDescription((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case StructurePackage.META_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION:
+				setBase_ValueSpecification((ValueSpecification)null);
+				return;
+			case StructurePackage.META_VALUE_SPECIFICATION__TYPE:
+				setType((Type)null);
+				return;
+			case StructurePackage.META_VALUE_SPECIFICATION__DESCRIPTION:
+				setDescription(DESCRIPTION_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case StructurePackage.META_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION:
+				return base_ValueSpecification != null;
+			case StructurePackage.META_VALUE_SPECIFICATION__TYPE:
+				return basicGetType() != null;
+			case StructurePackage.META_VALUE_SPECIFICATION__DESCRIPTION:
+				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (description: ");
+		result.append(description);
+		result.append(')');
+		return result.toString();
+	}
+
+} //MetaValueSpecificationImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/StructureFactoryImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/StructureFactoryImpl.java
new file mode 100644
index 0000000..2ed268a
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/StructureFactoryImpl.java
@@ -0,0 +1,104 @@
+/**
+ */
+package IoTML.Software.Core.Structure.impl;
+
+import IoTML.Software.Core.Structure.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StructureFactoryImpl extends EFactoryImpl implements StructureFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static StructureFactory init() {
+		try {
+			StructureFactory theStructureFactory = (StructureFactory)EPackage.Registry.INSTANCE.getEFactory(StructurePackage.eNS_URI);
+			if (theStructureFactory != null) {
+				return theStructureFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new StructureFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StructureFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case StructurePackage.META_VALUE_SPECIFICATION: return createMetaValueSpecification();
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION: return createDetailedValueSpecification();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MetaValueSpecification createMetaValueSpecification() {
+		MetaValueSpecificationImpl metaValueSpecification = new MetaValueSpecificationImpl();
+		return metaValueSpecification;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DetailedValueSpecification createDetailedValueSpecification() {
+		DetailedValueSpecificationImpl detailedValueSpecification = new DetailedValueSpecificationImpl();
+		return detailedValueSpecification;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StructurePackage getStructurePackage() {
+		return (StructurePackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static StructurePackage getPackage() {
+		return StructurePackage.eINSTANCE;
+	}
+
+} //StructureFactoryImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/StructurePackageImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/StructurePackageImpl.java
new file mode 100644
index 0000000..ca1b0db
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/impl/StructurePackageImpl.java
@@ -0,0 +1,337 @@
+/**
+ */
+package IoTML.Software.Core.Structure.impl;
+
+import IoTML.Animate.AnimatePackage;
+
+import IoTML.Animate.impl.AnimatePackageImpl;
+
+import IoTML.Hardware.Actuator.ActuatorPackage;
+
+import IoTML.Hardware.Actuator.impl.ActuatorPackageImpl;
+
+import IoTML.Hardware.Core.CorePackage;
+
+import IoTML.Hardware.Core.impl.CorePackageImpl;
+
+import IoTML.Hardware.Network.NetworkPackage;
+
+import IoTML.Hardware.Network.impl.NetworkPackageImpl;
+
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import IoTML.Hardware.Sensor.impl.SensorPackageImpl;
+
+import IoTML.Hybrid.HybridPackage;
+
+import IoTML.Hybrid.impl.HybridPackageImpl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+
+import IoTML.Software.Artefact.impl.ArtefactPackageImpl;
+
+import IoTML.Software.Core.Structure.DetailedValueSpecification;
+import IoTML.Software.Core.Structure.MetaValueSpecification;
+import IoTML.Software.Core.Structure.StructureFactory;
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import IoTML.Software.Resource.ResourcePackage;
+
+import IoTML.Software.Resource.impl.ResourcePackageImpl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.MARTE.MARTEPackage;
+
+import org.eclipse.papyrus.MARTE_Library.BasicNFP_Types.BasicNFP_TypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.GRM_BasicTypes.GRM_BasicTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_DataTypes.MARTE_DataTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_PrimitivesTypes.MARTE_PrimitivesTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MeasurementUnits.MeasurementUnitsPackage;
+
+import org.eclipse.papyrus.MARTE_Library.RS_Library.RS_LibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeLibrary.TimeLibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeTypesLibrary.TimeTypesLibraryPackage;
+
+import org.eclipse.papyrus.sysml14.sysmlPackage;
+
+import org.eclipse.uml2.types.TypesPackage;
+
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class StructurePackageImpl extends EPackageImpl implements StructurePackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass metaValueSpecificationEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass detailedValueSpecificationEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see IoTML.Software.Core.Structure.StructurePackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private StructurePackageImpl() {
+		super(eNS_URI, StructureFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link StructurePackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static StructurePackage init() {
+		if (isInited) return (StructurePackage)EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI);
+
+		// Obtain or create and register package
+		StructurePackageImpl theStructurePackage = (StructurePackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof StructurePackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new StructurePackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		MARTEPackage.eINSTANCE.eClass();
+		MeasurementUnitsPackage.eINSTANCE.eClass();
+		GRM_BasicTypesPackage.eINSTANCE.eClass();
+		MARTE_DataTypesPackage.eINSTANCE.eClass();
+		BasicNFP_TypesPackage.eINSTANCE.eClass();
+		TimeTypesLibraryPackage.eINSTANCE.eClass();
+		TimeLibraryPackage.eINSTANCE.eClass();
+		RS_LibraryPackage.eINSTANCE.eClass();
+		MARTE_PrimitivesTypesPackage.eINSTANCE.eClass();
+		sysmlPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		AnimatePackageImpl theAnimatePackage = (AnimatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) instanceof AnimatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) : AnimatePackage.eINSTANCE);
+		ActuatorPackageImpl theActuatorPackage = (ActuatorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) instanceof ActuatorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) : ActuatorPackage.eINSTANCE);
+		SensorPackageImpl theSensorPackage = (SensorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) instanceof SensorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) : SensorPackage.eINSTANCE);
+		NetworkPackageImpl theNetworkPackage = (NetworkPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) instanceof NetworkPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) : NetworkPackage.eINSTANCE);
+		CorePackageImpl theCorePackage = (CorePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) instanceof CorePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) : CorePackage.eINSTANCE);
+		HybridPackageImpl theHybridPackage = (HybridPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) instanceof HybridPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) : HybridPackage.eINSTANCE);
+		ArtefactPackageImpl theArtefactPackage = (ArtefactPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) instanceof ArtefactPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) : ArtefactPackage.eINSTANCE);
+		ResourcePackageImpl theResourcePackage = (ResourcePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) instanceof ResourcePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI) : ResourcePackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theStructurePackage.createPackageContents();
+		theAnimatePackage.createPackageContents();
+		theActuatorPackage.createPackageContents();
+		theSensorPackage.createPackageContents();
+		theNetworkPackage.createPackageContents();
+		theCorePackage.createPackageContents();
+		theHybridPackage.createPackageContents();
+		theArtefactPackage.createPackageContents();
+		theResourcePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theStructurePackage.initializePackageContents();
+		theAnimatePackage.initializePackageContents();
+		theActuatorPackage.initializePackageContents();
+		theSensorPackage.initializePackageContents();
+		theNetworkPackage.initializePackageContents();
+		theCorePackage.initializePackageContents();
+		theHybridPackage.initializePackageContents();
+		theArtefactPackage.initializePackageContents();
+		theResourcePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theStructurePackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(StructurePackage.eNS_URI, theStructurePackage);
+		return theStructurePackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMetaValueSpecification() {
+		return metaValueSpecificationEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getMetaValueSpecification_Base_ValueSpecification() {
+		return (EReference)metaValueSpecificationEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getMetaValueSpecification_Type() {
+		return (EReference)metaValueSpecificationEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getMetaValueSpecification_Description() {
+		return (EAttribute)metaValueSpecificationEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getDetailedValueSpecification() {
+		return detailedValueSpecificationEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDetailedValueSpecification_Base_ValueSpecification() {
+		return (EReference)detailedValueSpecificationEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getDetailedValueSpecification_MetaSpecification() {
+		return (EReference)detailedValueSpecificationEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StructureFactory getStructureFactory() {
+		return (StructureFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		metaValueSpecificationEClass = createEClass(META_VALUE_SPECIFICATION);
+		createEReference(metaValueSpecificationEClass, META_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION);
+		createEReference(metaValueSpecificationEClass, META_VALUE_SPECIFICATION__TYPE);
+		createEAttribute(metaValueSpecificationEClass, META_VALUE_SPECIFICATION__DESCRIPTION);
+
+		detailedValueSpecificationEClass = createEClass(DETAILED_VALUE_SPECIFICATION);
+		createEReference(detailedValueSpecificationEClass, DETAILED_VALUE_SPECIFICATION__BASE_VALUE_SPECIFICATION);
+		createEReference(detailedValueSpecificationEClass, DETAILED_VALUE_SPECIFICATION__META_SPECIFICATION);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
+		TypesPackage theTypesPackage = (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);
+
+		// Add supertypes to classes
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(metaValueSpecificationEClass, MetaValueSpecification.class, "MetaValueSpecification", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getMetaValueSpecification_Base_ValueSpecification(), theUMLPackage.getValueSpecification(), null, "base_ValueSpecification", null, 1, 1, MetaValueSpecification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getMetaValueSpecification_Type(), theUMLPackage.getType(), null, "type", null, 0, 1, MetaValueSpecification.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED);
+		initEAttribute(getMetaValueSpecification_Description(), theTypesPackage.getString(), "description", null, 0, 1, MetaValueSpecification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(detailedValueSpecificationEClass, DetailedValueSpecification.class, "DetailedValueSpecification", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getDetailedValueSpecification_Base_ValueSpecification(), theUMLPackage.getValueSpecification(), null, "base_ValueSpecification", null, 1, 1, DetailedValueSpecification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getDetailedValueSpecification_MetaSpecification(), this.getMetaValueSpecification(), null, "metaSpecification", null, 0, -1, DetailedValueSpecification.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //StructurePackageImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/util/StructureAdapterFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/util/StructureAdapterFactory.java
new file mode 100644
index 0000000..adfbc70
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/util/StructureAdapterFactory.java
@@ -0,0 +1,133 @@
+/**
+ */
+package IoTML.Software.Core.Structure.util;
+
+import IoTML.Software.Core.Structure.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Core.Structure.StructurePackage
+ * @generated
+ */
+public class StructureAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static StructurePackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StructureAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = StructurePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StructureSwitch modelSwitch =
+		new StructureSwitch() {
+			public Object caseMetaValueSpecification(MetaValueSpecification object) {
+				return createMetaValueSpecificationAdapter();
+			}
+			public Object caseDetailedValueSpecification(DetailedValueSpecification object) {
+				return createDetailedValueSpecificationAdapter();
+			}
+			public Object defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	public Adapter createAdapter(Notifier target) {
+		return (Adapter)modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Core.Structure.MetaValueSpecification <em>Meta Value Specification</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Core.Structure.MetaValueSpecification
+	 * @generated
+	 */
+	public Adapter createMetaValueSpecificationAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Core.Structure.DetailedValueSpecification <em>Detailed Value Specification</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Core.Structure.DetailedValueSpecification
+	 * @generated
+	 */
+	public Adapter createDetailedValueSpecificationAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //StructureAdapterFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/util/StructureSwitch.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/util/StructureSwitch.java
new file mode 100644
index 0000000..2a69475
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Core/Structure/util/StructureSwitch.java
@@ -0,0 +1,147 @@
+/**
+ */
+package IoTML.Software.Core.Structure.util;
+
+import IoTML.Software.Core.Structure.*;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Core.Structure.StructurePackage
+ * @generated
+ */
+public class StructureSwitch {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static StructurePackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StructureSwitch() {
+		if (modelPackage == null) {
+			modelPackage = StructurePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public Object doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch((EClass)eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case StructurePackage.META_VALUE_SPECIFICATION: {
+				MetaValueSpecification metaValueSpecification = (MetaValueSpecification)theEObject;
+				Object result = caseMetaValueSpecification(metaValueSpecification);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case StructurePackage.DETAILED_VALUE_SPECIFICATION: {
+				DetailedValueSpecification detailedValueSpecification = (DetailedValueSpecification)theEObject;
+				Object result = caseDetailedValueSpecification(detailedValueSpecification);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Meta Value Specification</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Meta Value Specification</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseMetaValueSpecification(MetaValueSpecification object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Detailed Value Specification</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Detailed Value Specification</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseDetailedValueSpecification(DetailedValueSpecification object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public Object defaultCase(EObject object) {
+		return null;
+	}
+
+} //StructureSwitch
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/NetworkResource.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/NetworkResource.java
new file mode 100644
index 0000000..196de1d
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/NetworkResource.java
@@ -0,0 +1,50 @@
+/**
+ */
+package IoTML.Software.Resource;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Network Resource</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Resource.NetworkResource#getBase_Class <em>Base Class</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Software.Resource.ResourcePackage#getNetworkResource()
+ * @model
+ * @generated
+ */
+public interface NetworkResource extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Class</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Class</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Class</em>' reference.
+	 * @see #setBase_Class(org.eclipse.uml2.uml.Class)
+	 * @see IoTML.Software.Resource.ResourcePackage#getNetworkResource_Base_Class()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	org.eclipse.uml2.uml.Class getBase_Class();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Resource.NetworkResource#getBase_Class <em>Base Class</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Class</em>' reference.
+	 * @see #getBase_Class()
+	 * @generated
+	 */
+	void setBase_Class(org.eclipse.uml2.uml.Class value);
+
+} // NetworkResource
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/OnDeviceResource.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/OnDeviceResource.java
new file mode 100644
index 0000000..c1eddaa
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/OnDeviceResource.java
@@ -0,0 +1,107 @@
+/**
+ */
+package IoTML.Software.Resource;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.SRM.SW_Brokering.DeviceBroker;
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.SRM.SW_Brokering.MemoryBroker;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>On Device Resource</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Resource.OnDeviceResource#getBase_Class <em>Base Class</em>}</li>
+ *   <li>{@link IoTML.Software.Resource.OnDeviceResource#getDeviceBroker <em>Device Broker</em>}</li>
+ *   <li>{@link IoTML.Software.Resource.OnDeviceResource#getMemoryBroker <em>Memory Broker</em>}</li>
+ * </ul>
+ *
+ * @see IoTML.Software.Resource.ResourcePackage#getOnDeviceResource()
+ * @model
+ * @generated
+ */
+public interface OnDeviceResource extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Base Class</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Class</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Class</em>' reference.
+	 * @see #setBase_Class(org.eclipse.uml2.uml.Class)
+	 * @see IoTML.Software.Resource.ResourcePackage#getOnDeviceResource_Base_Class()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	org.eclipse.uml2.uml.Class getBase_Class();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Resource.OnDeviceResource#getBase_Class <em>Base Class</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Class</em>' reference.
+	 * @see #getBase_Class()
+	 * @generated
+	 */
+	void setBase_Class(org.eclipse.uml2.uml.Class value);
+
+	/**
+	 * Returns the value of the '<em><b>Device Broker</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Device Broker</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Device Broker</em>' reference.
+	 * @see #setDeviceBroker(DeviceBroker)
+	 * @see IoTML.Software.Resource.ResourcePackage#getOnDeviceResource_DeviceBroker()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	DeviceBroker getDeviceBroker();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Resource.OnDeviceResource#getDeviceBroker <em>Device Broker</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Device Broker</em>' reference.
+	 * @see #getDeviceBroker()
+	 * @generated
+	 */
+	void setDeviceBroker(DeviceBroker value);
+
+	/**
+	 * Returns the value of the '<em><b>Memory Broker</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Memory Broker</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Memory Broker</em>' reference.
+	 * @see #setMemoryBroker(MemoryBroker)
+	 * @see IoTML.Software.Resource.ResourcePackage#getOnDeviceResource_MemoryBroker()
+	 * @model ordered="false"
+	 * @generated
+	 */
+	MemoryBroker getMemoryBroker();
+
+	/**
+	 * Sets the value of the '{@link IoTML.Software.Resource.OnDeviceResource#getMemoryBroker <em>Memory Broker</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Memory Broker</em>' reference.
+	 * @see #getMemoryBroker()
+	 * @generated
+	 */
+	void setMemoryBroker(MemoryBroker value);
+
+} // OnDeviceResource
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/ResourceFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/ResourceFactory.java
new file mode 100644
index 0000000..b2d3e8e
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/ResourceFactory.java
@@ -0,0 +1,51 @@
+/**
+ */
+package IoTML.Software.Resource;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Resource.ResourcePackage
+ * @generated
+ */
+public interface ResourceFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ResourceFactory eINSTANCE = IoTML.Software.Resource.impl.ResourceFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Network Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Network Resource</em>'.
+	 * @generated
+	 */
+	NetworkResource createNetworkResource();
+
+	/**
+	 * Returns a new object of class '<em>On Device Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>On Device Resource</em>'.
+	 * @generated
+	 */
+	OnDeviceResource createOnDeviceResource();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ResourcePackage getResourcePackage();
+
+} //ResourceFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/ResourcePackage.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/ResourcePackage.java
new file mode 100644
index 0000000..2c6bec4
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/ResourcePackage.java
@@ -0,0 +1,272 @@
+/**
+ */
+package IoTML.Software.Resource;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Resource.ResourceFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ResourcePackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "Resource";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http:///IoTML/Software/Resource.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "IoTML.Software.Resource";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ResourcePackage eINSTANCE = IoTML.Software.Resource.impl.ResourcePackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Resource.impl.NetworkResourceImpl <em>Network Resource</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Resource.impl.NetworkResourceImpl
+	 * @see IoTML.Software.Resource.impl.ResourcePackageImpl#getNetworkResource()
+	 * @generated
+	 */
+	int NETWORK_RESOURCE = 0;
+
+	/**
+	 * The feature id for the '<em><b>Base Class</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NETWORK_RESOURCE__BASE_CLASS = 0;
+
+	/**
+	 * The number of structural features of the '<em>Network Resource</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NETWORK_RESOURCE_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link IoTML.Software.Resource.impl.OnDeviceResourceImpl <em>On Device Resource</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see IoTML.Software.Resource.impl.OnDeviceResourceImpl
+	 * @see IoTML.Software.Resource.impl.ResourcePackageImpl#getOnDeviceResource()
+	 * @generated
+	 */
+	int ON_DEVICE_RESOURCE = 1;
+
+	/**
+	 * The feature id for the '<em><b>Base Class</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ON_DEVICE_RESOURCE__BASE_CLASS = 0;
+
+	/**
+	 * The feature id for the '<em><b>Device Broker</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ON_DEVICE_RESOURCE__DEVICE_BROKER = 1;
+
+	/**
+	 * The feature id for the '<em><b>Memory Broker</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ON_DEVICE_RESOURCE__MEMORY_BROKER = 2;
+
+	/**
+	 * The number of structural features of the '<em>On Device Resource</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ON_DEVICE_RESOURCE_FEATURE_COUNT = 3;
+
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Resource.NetworkResource <em>Network Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Network Resource</em>'.
+	 * @see IoTML.Software.Resource.NetworkResource
+	 * @generated
+	 */
+	EClass getNetworkResource();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Resource.NetworkResource#getBase_Class <em>Base Class</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Class</em>'.
+	 * @see IoTML.Software.Resource.NetworkResource#getBase_Class()
+	 * @see #getNetworkResource()
+	 * @generated
+	 */
+	EReference getNetworkResource_Base_Class();
+
+	/**
+	 * Returns the meta object for class '{@link IoTML.Software.Resource.OnDeviceResource <em>On Device Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>On Device Resource</em>'.
+	 * @see IoTML.Software.Resource.OnDeviceResource
+	 * @generated
+	 */
+	EClass getOnDeviceResource();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Resource.OnDeviceResource#getBase_Class <em>Base Class</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Class</em>'.
+	 * @see IoTML.Software.Resource.OnDeviceResource#getBase_Class()
+	 * @see #getOnDeviceResource()
+	 * @generated
+	 */
+	EReference getOnDeviceResource_Base_Class();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Resource.OnDeviceResource#getDeviceBroker <em>Device Broker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Device Broker</em>'.
+	 * @see IoTML.Software.Resource.OnDeviceResource#getDeviceBroker()
+	 * @see #getOnDeviceResource()
+	 * @generated
+	 */
+	EReference getOnDeviceResource_DeviceBroker();
+
+	/**
+	 * Returns the meta object for the reference '{@link IoTML.Software.Resource.OnDeviceResource#getMemoryBroker <em>Memory Broker</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Memory Broker</em>'.
+	 * @see IoTML.Software.Resource.OnDeviceResource#getMemoryBroker()
+	 * @see #getOnDeviceResource()
+	 * @generated
+	 */
+	EReference getOnDeviceResource_MemoryBroker();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ResourceFactory getResourceFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Resource.impl.NetworkResourceImpl <em>Network Resource</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Resource.impl.NetworkResourceImpl
+		 * @see IoTML.Software.Resource.impl.ResourcePackageImpl#getNetworkResource()
+		 * @generated
+		 */
+		EClass NETWORK_RESOURCE = eINSTANCE.getNetworkResource();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Class</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference NETWORK_RESOURCE__BASE_CLASS = eINSTANCE.getNetworkResource_Base_Class();
+
+		/**
+		 * The meta object literal for the '{@link IoTML.Software.Resource.impl.OnDeviceResourceImpl <em>On Device Resource</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see IoTML.Software.Resource.impl.OnDeviceResourceImpl
+		 * @see IoTML.Software.Resource.impl.ResourcePackageImpl#getOnDeviceResource()
+		 * @generated
+		 */
+		EClass ON_DEVICE_RESOURCE = eINSTANCE.getOnDeviceResource();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Class</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ON_DEVICE_RESOURCE__BASE_CLASS = eINSTANCE.getOnDeviceResource_Base_Class();
+
+		/**
+		 * The meta object literal for the '<em><b>Device Broker</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ON_DEVICE_RESOURCE__DEVICE_BROKER = eINSTANCE.getOnDeviceResource_DeviceBroker();
+
+		/**
+		 * The meta object literal for the '<em><b>Memory Broker</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ON_DEVICE_RESOURCE__MEMORY_BROKER = eINSTANCE.getOnDeviceResource_MemoryBroker();
+
+	}
+
+} //ResourcePackage
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/NetworkResourceImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/NetworkResourceImpl.java
new file mode 100644
index 0000000..a26f9b3
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/NetworkResourceImpl.java
@@ -0,0 +1,151 @@
+/**
+ */
+package IoTML.Software.Resource.impl;
+
+import IoTML.Software.Resource.NetworkResource;
+import IoTML.Software.Resource.ResourcePackage;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Network Resource</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Resource.impl.NetworkResourceImpl#getBase_Class <em>Base Class</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class NetworkResourceImpl extends MinimalEObjectImpl.Container implements NetworkResource {
+	/**
+	 * The cached value of the '{@link #getBase_Class() <em>Base Class</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Class()
+	 * @generated
+	 * @ordered
+	 */
+	protected org.eclipse.uml2.uml.Class base_Class;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NetworkResourceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return ResourcePackage.Literals.NETWORK_RESOURCE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class getBase_Class() {
+		if (base_Class != null && base_Class.eIsProxy()) {
+			InternalEObject oldBase_Class = (InternalEObject)base_Class;
+			base_Class = (org.eclipse.uml2.uml.Class)eResolveProxy(oldBase_Class);
+			if (base_Class != oldBase_Class) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ResourcePackage.NETWORK_RESOURCE__BASE_CLASS, oldBase_Class, base_Class));
+			}
+		}
+		return base_Class;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class basicGetBase_Class() {
+		return base_Class;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
+		org.eclipse.uml2.uml.Class oldBase_Class = base_Class;
+		base_Class = newBase_Class;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ResourcePackage.NETWORK_RESOURCE__BASE_CLASS, oldBase_Class, base_Class));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ResourcePackage.NETWORK_RESOURCE__BASE_CLASS:
+				if (resolve) return getBase_Class();
+				return basicGetBase_Class();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ResourcePackage.NETWORK_RESOURCE__BASE_CLASS:
+				setBase_Class((org.eclipse.uml2.uml.Class)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ResourcePackage.NETWORK_RESOURCE__BASE_CLASS:
+				setBase_Class((org.eclipse.uml2.uml.Class)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ResourcePackage.NETWORK_RESOURCE__BASE_CLASS:
+				return base_Class != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //NetworkResourceImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/OnDeviceResourceImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/OnDeviceResourceImpl.java
new file mode 100644
index 0000000..295d949
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/OnDeviceResourceImpl.java
@@ -0,0 +1,274 @@
+/**
+ */
+package IoTML.Software.Resource.impl;
+
+import IoTML.Software.Resource.OnDeviceResource;
+import IoTML.Software.Resource.ResourcePackage;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.SRM.SW_Brokering.DeviceBroker;
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.SRM.SW_Brokering.MemoryBroker;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>On Device Resource</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link IoTML.Software.Resource.impl.OnDeviceResourceImpl#getBase_Class <em>Base Class</em>}</li>
+ *   <li>{@link IoTML.Software.Resource.impl.OnDeviceResourceImpl#getDeviceBroker <em>Device Broker</em>}</li>
+ *   <li>{@link IoTML.Software.Resource.impl.OnDeviceResourceImpl#getMemoryBroker <em>Memory Broker</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class OnDeviceResourceImpl extends MinimalEObjectImpl.Container implements OnDeviceResource {
+	/**
+	 * The cached value of the '{@link #getBase_Class() <em>Base Class</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Class()
+	 * @generated
+	 * @ordered
+	 */
+	protected org.eclipse.uml2.uml.Class base_Class;
+
+	/**
+	 * The cached value of the '{@link #getDeviceBroker() <em>Device Broker</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDeviceBroker()
+	 * @generated
+	 * @ordered
+	 */
+	protected DeviceBroker deviceBroker;
+
+	/**
+	 * The cached value of the '{@link #getMemoryBroker() <em>Memory Broker</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getMemoryBroker()
+	 * @generated
+	 * @ordered
+	 */
+	protected MemoryBroker memoryBroker;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected OnDeviceResourceImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected EClass eStaticClass() {
+		return ResourcePackage.Literals.ON_DEVICE_RESOURCE;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class getBase_Class() {
+		if (base_Class != null && base_Class.eIsProxy()) {
+			InternalEObject oldBase_Class = (InternalEObject)base_Class;
+			base_Class = (org.eclipse.uml2.uml.Class)eResolveProxy(oldBase_Class);
+			if (base_Class != oldBase_Class) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ResourcePackage.ON_DEVICE_RESOURCE__BASE_CLASS, oldBase_Class, base_Class));
+			}
+		}
+		return base_Class;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public org.eclipse.uml2.uml.Class basicGetBase_Class() {
+		return base_Class;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Class(org.eclipse.uml2.uml.Class newBase_Class) {
+		org.eclipse.uml2.uml.Class oldBase_Class = base_Class;
+		base_Class = newBase_Class;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ResourcePackage.ON_DEVICE_RESOURCE__BASE_CLASS, oldBase_Class, base_Class));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeviceBroker getDeviceBroker() {
+		if (deviceBroker != null && deviceBroker.eIsProxy()) {
+			InternalEObject oldDeviceBroker = (InternalEObject)deviceBroker;
+			deviceBroker = (DeviceBroker)eResolveProxy(oldDeviceBroker);
+			if (deviceBroker != oldDeviceBroker) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ResourcePackage.ON_DEVICE_RESOURCE__DEVICE_BROKER, oldDeviceBroker, deviceBroker));
+			}
+		}
+		return deviceBroker;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public DeviceBroker basicGetDeviceBroker() {
+		return deviceBroker;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDeviceBroker(DeviceBroker newDeviceBroker) {
+		DeviceBroker oldDeviceBroker = deviceBroker;
+		deviceBroker = newDeviceBroker;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ResourcePackage.ON_DEVICE_RESOURCE__DEVICE_BROKER, oldDeviceBroker, deviceBroker));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MemoryBroker getMemoryBroker() {
+		if (memoryBroker != null && memoryBroker.eIsProxy()) {
+			InternalEObject oldMemoryBroker = (InternalEObject)memoryBroker;
+			memoryBroker = (MemoryBroker)eResolveProxy(oldMemoryBroker);
+			if (memoryBroker != oldMemoryBroker) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, ResourcePackage.ON_DEVICE_RESOURCE__MEMORY_BROKER, oldMemoryBroker, memoryBroker));
+			}
+		}
+		return memoryBroker;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public MemoryBroker basicGetMemoryBroker() {
+		return memoryBroker;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setMemoryBroker(MemoryBroker newMemoryBroker) {
+		MemoryBroker oldMemoryBroker = memoryBroker;
+		memoryBroker = newMemoryBroker;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ResourcePackage.ON_DEVICE_RESOURCE__MEMORY_BROKER, oldMemoryBroker, memoryBroker));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ResourcePackage.ON_DEVICE_RESOURCE__BASE_CLASS:
+				if (resolve) return getBase_Class();
+				return basicGetBase_Class();
+			case ResourcePackage.ON_DEVICE_RESOURCE__DEVICE_BROKER:
+				if (resolve) return getDeviceBroker();
+				return basicGetDeviceBroker();
+			case ResourcePackage.ON_DEVICE_RESOURCE__MEMORY_BROKER:
+				if (resolve) return getMemoryBroker();
+				return basicGetMemoryBroker();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ResourcePackage.ON_DEVICE_RESOURCE__BASE_CLASS:
+				setBase_Class((org.eclipse.uml2.uml.Class)newValue);
+				return;
+			case ResourcePackage.ON_DEVICE_RESOURCE__DEVICE_BROKER:
+				setDeviceBroker((DeviceBroker)newValue);
+				return;
+			case ResourcePackage.ON_DEVICE_RESOURCE__MEMORY_BROKER:
+				setMemoryBroker((MemoryBroker)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ResourcePackage.ON_DEVICE_RESOURCE__BASE_CLASS:
+				setBase_Class((org.eclipse.uml2.uml.Class)null);
+				return;
+			case ResourcePackage.ON_DEVICE_RESOURCE__DEVICE_BROKER:
+				setDeviceBroker((DeviceBroker)null);
+				return;
+			case ResourcePackage.ON_DEVICE_RESOURCE__MEMORY_BROKER:
+				setMemoryBroker((MemoryBroker)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ResourcePackage.ON_DEVICE_RESOURCE__BASE_CLASS:
+				return base_Class != null;
+			case ResourcePackage.ON_DEVICE_RESOURCE__DEVICE_BROKER:
+				return deviceBroker != null;
+			case ResourcePackage.ON_DEVICE_RESOURCE__MEMORY_BROKER:
+				return memoryBroker != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //OnDeviceResourceImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/ResourceFactoryImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/ResourceFactoryImpl.java
new file mode 100644
index 0000000..842d313
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/ResourceFactoryImpl.java
@@ -0,0 +1,104 @@
+/**
+ */
+package IoTML.Software.Resource.impl;
+
+import IoTML.Software.Resource.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ResourceFactoryImpl extends EFactoryImpl implements ResourceFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ResourceFactory init() {
+		try {
+			ResourceFactory theResourceFactory = (ResourceFactory)EPackage.Registry.INSTANCE.getEFactory(ResourcePackage.eNS_URI);
+			if (theResourceFactory != null) {
+				return theResourceFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ResourceFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ResourceFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ResourcePackage.NETWORK_RESOURCE: return createNetworkResource();
+			case ResourcePackage.ON_DEVICE_RESOURCE: return createOnDeviceResource();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NetworkResource createNetworkResource() {
+		NetworkResourceImpl networkResource = new NetworkResourceImpl();
+		return networkResource;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public OnDeviceResource createOnDeviceResource() {
+		OnDeviceResourceImpl onDeviceResource = new OnDeviceResourceImpl();
+		return onDeviceResource;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ResourcePackage getResourcePackage() {
+		return (ResourcePackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	public static ResourcePackage getPackage() {
+		return ResourcePackage.eINSTANCE;
+	}
+
+} //ResourceFactoryImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/ResourcePackageImpl.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/ResourcePackageImpl.java
new file mode 100644
index 0000000..b974459
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/impl/ResourcePackageImpl.java
@@ -0,0 +1,325 @@
+/**
+ */
+package IoTML.Software.Resource.impl;
+
+import IoTML.Animate.AnimatePackage;
+
+import IoTML.Animate.impl.AnimatePackageImpl;
+
+import IoTML.Hardware.Actuator.ActuatorPackage;
+
+import IoTML.Hardware.Actuator.impl.ActuatorPackageImpl;
+
+import IoTML.Hardware.Core.CorePackage;
+
+import IoTML.Hardware.Core.impl.CorePackageImpl;
+
+import IoTML.Hardware.Network.NetworkPackage;
+
+import IoTML.Hardware.Network.impl.NetworkPackageImpl;
+
+import IoTML.Hardware.Sensor.SensorPackage;
+
+import IoTML.Hardware.Sensor.impl.SensorPackageImpl;
+
+import IoTML.Hybrid.HybridPackage;
+
+import IoTML.Hybrid.impl.HybridPackageImpl;
+
+import IoTML.Software.Artefact.ArtefactPackage;
+
+import IoTML.Software.Artefact.impl.ArtefactPackageImpl;
+
+import IoTML.Software.Core.Structure.StructurePackage;
+
+import IoTML.Software.Core.Structure.impl.StructurePackageImpl;
+
+import IoTML.Software.Resource.NetworkResource;
+import IoTML.Software.Resource.OnDeviceResource;
+import IoTML.Software.Resource.ResourceFactory;
+import IoTML.Software.Resource.ResourcePackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.MARTE.MARTEPackage;
+
+import org.eclipse.papyrus.MARTE.MARTE_DesignModel.SRM.SW_Brokering.SW_BrokeringPackage;
+
+import org.eclipse.papyrus.MARTE_Library.BasicNFP_Types.BasicNFP_TypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.GRM_BasicTypes.GRM_BasicTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_DataTypes.MARTE_DataTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MARTE_PrimitivesTypes.MARTE_PrimitivesTypesPackage;
+
+import org.eclipse.papyrus.MARTE_Library.MeasurementUnits.MeasurementUnitsPackage;
+
+import org.eclipse.papyrus.MARTE_Library.RS_Library.RS_LibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeLibrary.TimeLibraryPackage;
+
+import org.eclipse.papyrus.MARTE_Library.TimeTypesLibrary.TimeTypesLibraryPackage;
+
+import org.eclipse.papyrus.sysml14.sysmlPackage;
+
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ResourcePackageImpl extends EPackageImpl implements ResourcePackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass networkResourceEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass onDeviceResourceEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see IoTML.Software.Resource.ResourcePackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ResourcePackageImpl() {
+		super(eNS_URI, ResourceFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ResourcePackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ResourcePackage init() {
+		if (isInited) return (ResourcePackage)EPackage.Registry.INSTANCE.getEPackage(ResourcePackage.eNS_URI);
+
+		// Obtain or create and register package
+		ResourcePackageImpl theResourcePackage = (ResourcePackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ResourcePackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ResourcePackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		MARTEPackage.eINSTANCE.eClass();
+		MeasurementUnitsPackage.eINSTANCE.eClass();
+		GRM_BasicTypesPackage.eINSTANCE.eClass();
+		MARTE_DataTypesPackage.eINSTANCE.eClass();
+		BasicNFP_TypesPackage.eINSTANCE.eClass();
+		TimeTypesLibraryPackage.eINSTANCE.eClass();
+		TimeLibraryPackage.eINSTANCE.eClass();
+		RS_LibraryPackage.eINSTANCE.eClass();
+		MARTE_PrimitivesTypesPackage.eINSTANCE.eClass();
+		sysmlPackage.eINSTANCE.eClass();
+
+		// Obtain or create and register interdependencies
+		AnimatePackageImpl theAnimatePackage = (AnimatePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) instanceof AnimatePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(AnimatePackage.eNS_URI) : AnimatePackage.eINSTANCE);
+		ActuatorPackageImpl theActuatorPackage = (ActuatorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) instanceof ActuatorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ActuatorPackage.eNS_URI) : ActuatorPackage.eINSTANCE);
+		SensorPackageImpl theSensorPackage = (SensorPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) instanceof SensorPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(SensorPackage.eNS_URI) : SensorPackage.eINSTANCE);
+		NetworkPackageImpl theNetworkPackage = (NetworkPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) instanceof NetworkPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(NetworkPackage.eNS_URI) : NetworkPackage.eINSTANCE);
+		CorePackageImpl theCorePackage = (CorePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) instanceof CorePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(CorePackage.eNS_URI) : CorePackage.eINSTANCE);
+		HybridPackageImpl theHybridPackage = (HybridPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) instanceof HybridPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(HybridPackage.eNS_URI) : HybridPackage.eINSTANCE);
+		ArtefactPackageImpl theArtefactPackage = (ArtefactPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) instanceof ArtefactPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArtefactPackage.eNS_URI) : ArtefactPackage.eINSTANCE);
+		StructurePackageImpl theStructurePackage = (StructurePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) instanceof StructurePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StructurePackage.eNS_URI) : StructurePackage.eINSTANCE);
+
+		// Create package meta-data objects
+		theResourcePackage.createPackageContents();
+		theAnimatePackage.createPackageContents();
+		theActuatorPackage.createPackageContents();
+		theSensorPackage.createPackageContents();
+		theNetworkPackage.createPackageContents();
+		theCorePackage.createPackageContents();
+		theHybridPackage.createPackageContents();
+		theArtefactPackage.createPackageContents();
+		theStructurePackage.createPackageContents();
+
+		// Initialize created meta-data
+		theResourcePackage.initializePackageContents();
+		theAnimatePackage.initializePackageContents();
+		theActuatorPackage.initializePackageContents();
+		theSensorPackage.initializePackageContents();
+		theNetworkPackage.initializePackageContents();
+		theCorePackage.initializePackageContents();
+		theHybridPackage.initializePackageContents();
+		theArtefactPackage.initializePackageContents();
+		theStructurePackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theResourcePackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ResourcePackage.eNS_URI, theResourcePackage);
+		return theResourcePackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNetworkResource() {
+		return networkResourceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getNetworkResource_Base_Class() {
+		return (EReference)networkResourceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getOnDeviceResource() {
+		return onDeviceResourceEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getOnDeviceResource_Base_Class() {
+		return (EReference)onDeviceResourceEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getOnDeviceResource_DeviceBroker() {
+		return (EReference)onDeviceResourceEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getOnDeviceResource_MemoryBroker() {
+		return (EReference)onDeviceResourceEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ResourceFactory getResourceFactory() {
+		return (ResourceFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		networkResourceEClass = createEClass(NETWORK_RESOURCE);
+		createEReference(networkResourceEClass, NETWORK_RESOURCE__BASE_CLASS);
+
+		onDeviceResourceEClass = createEClass(ON_DEVICE_RESOURCE);
+		createEReference(onDeviceResourceEClass, ON_DEVICE_RESOURCE__BASE_CLASS);
+		createEReference(onDeviceResourceEClass, ON_DEVICE_RESOURCE__DEVICE_BROKER);
+		createEReference(onDeviceResourceEClass, ON_DEVICE_RESOURCE__MEMORY_BROKER);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		UMLPackage theUMLPackage = (UMLPackage)EPackage.Registry.INSTANCE.getEPackage(UMLPackage.eNS_URI);
+		SW_BrokeringPackage theSW_BrokeringPackage = (SW_BrokeringPackage)EPackage.Registry.INSTANCE.getEPackage(SW_BrokeringPackage.eNS_URI);
+
+		// Add supertypes to classes
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(networkResourceEClass, NetworkResource.class, "NetworkResource", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getNetworkResource_Base_Class(), theUMLPackage.getClass_(), null, "base_Class", null, 1, 1, NetworkResource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		initEClass(onDeviceResourceEClass, OnDeviceResource.class, "OnDeviceResource", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getOnDeviceResource_Base_Class(), theUMLPackage.getClass_(), null, "base_Class", null, 1, 1, OnDeviceResource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getOnDeviceResource_DeviceBroker(), theSW_BrokeringPackage.getDeviceBroker(), null, "deviceBroker", null, 0, 1, OnDeviceResource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+		initEReference(getOnDeviceResource_MemoryBroker(), theSW_BrokeringPackage.getMemoryBroker(), null, "memoryBroker", null, 0, 1, OnDeviceResource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ResourcePackageImpl
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/util/ResourceAdapterFactory.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/util/ResourceAdapterFactory.java
new file mode 100644
index 0000000..ca5481c
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/util/ResourceAdapterFactory.java
@@ -0,0 +1,133 @@
+/**
+ */
+package IoTML.Software.Resource.util;
+
+import IoTML.Software.Resource.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Resource.ResourcePackage
+ * @generated
+ */
+public class ResourceAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ResourcePackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ResourceAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ResourcePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ResourceSwitch modelSwitch =
+		new ResourceSwitch() {
+			public Object caseNetworkResource(NetworkResource object) {
+				return createNetworkResourceAdapter();
+			}
+			public Object caseOnDeviceResource(OnDeviceResource object) {
+				return createOnDeviceResourceAdapter();
+			}
+			public Object defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	public Adapter createAdapter(Notifier target) {
+		return (Adapter)modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Resource.NetworkResource <em>Network Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Resource.NetworkResource
+	 * @generated
+	 */
+	public Adapter createNetworkResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link IoTML.Software.Resource.OnDeviceResource <em>On Device Resource</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see IoTML.Software.Resource.OnDeviceResource
+	 * @generated
+	 */
+	public Adapter createOnDeviceResourceAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ResourceAdapterFactory
diff --git a/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/util/ResourceSwitch.java b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/util/ResourceSwitch.java
new file mode 100644
index 0000000..9996f6e
--- /dev/null
+++ b/org.eclipse.papyrus.iotml.profile/src/IoTML/Software/Resource/util/ResourceSwitch.java
@@ -0,0 +1,147 @@
+/**
+ */
+package IoTML.Software.Resource.util;
+
+import IoTML.Software.Resource.*;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see IoTML.Software.Resource.ResourcePackage
+ * @generated
+ */
+public class ResourceSwitch {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ResourcePackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ResourceSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ResourcePackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public Object doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+		else {
+			List eSuperTypes = theEClass.getESuperTypes();
+			return
+				eSuperTypes.isEmpty() ?
+					defaultCase(theEObject) :
+					doSwitch((EClass)eSuperTypes.get(0), theEObject);
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected Object doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ResourcePackage.NETWORK_RESOURCE: {
+				NetworkResource networkResource = (NetworkResource)theEObject;
+				Object result = caseNetworkResource(networkResource);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ResourcePackage.ON_DEVICE_RESOURCE: {
+				OnDeviceResource onDeviceResource = (OnDeviceResource)theEObject;
+				Object result = caseOnDeviceResource(onDeviceResource);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Network Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Network Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseNetworkResource(NetworkResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>On Device Resource</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>On Device Resource</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public Object caseOnDeviceResource(OnDeviceResource object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public Object defaultCase(EObject object) {
+		return null;
+	}
+
+} //ResourceSwitch