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
