From be26fd54cb5bbb71ee5e889efd1e5757f140d4e2 Mon Sep 17 00:00:00 2001
From: Dominique Marcadet <Dominique.Marcadet@centralesupelec.fr>
Date: Wed, 6 Feb 2019 22:59:32 +0100
Subject: [PATCH] add reverse containment links, relax multiplicity, remove
 genmodel annotation

---
 .../ctool16/CreateNS_dependsOn_DependsOn.gif  |  Bin 0 -> 223 bytes
 .../icons/full/obj16/DependsOn.gif            |  Bin 0 -> 129 bytes
 .../plugin.properties                         |   49 +
 ...ovider.java => DependsOnItemProvider.java} |   51 +-
 .../nsd/provider/DocItemProvider.java         |    4 -
 .../provider/DocumentRootItemProvider.java    |    5 -
 .../iec61850/nsd/provider/NSItemProvider.java |    4 +-
 .../NsdItemProviderAdapterFactory.java        |   40 +-
 .../ServiceTypeRealizationItemProvider.java   |  268 --
 .../model/nsd.aird                            | 3198 ++++++++---------
 .../model/nsd.ecore                           | 1399 +++----
 .../model/nsd.genmodel                        |   63 +-
 .../iec61850/nsd/ACSIServicesKind.java        |    3 -
 .../riseclipse/iec61850/nsd/Abbreviation.java |   98 +-
 .../iec61850/nsd/Abbreviations.java           |   92 +-
 .../iec61850/nsd/AbstractLNClass.java         |   65 +-
 .../riseclipse/iec61850/nsd/AnyLNClass.java   |   67 +-
 .../iec61850/nsd/ApplicableServiceNS.java     |   71 +-
 .../iec61850/nsd/ApplicableServices.java      |   93 +-
 .../iec61850/nsd/AppliesToType.java           |   67 +-
 .../riseclipse/iec61850/nsd/BasicType.java    |   98 +-
 .../riseclipse/iec61850/nsd/BasicTypes.java   |   60 +-
 .../edf/riseclipse/iec61850/nsd/CBKind.java   |    3 -
 .../edf/riseclipse/iec61850/nsd/CDC.java      |  192 +-
 .../edf/riseclipse/iec61850/nsd/CDCs.java     |   63 +-
 .../edf/riseclipse/iec61850/nsd/Changes.java  |  163 +-
 .../iec61850/nsd/ConstructedAttribute.java    |  121 +-
 .../iec61850/nsd/ConstructedAttributes.java   |   63 +-
 .../iec61850/nsd/CopyrightNotice.java         |  101 +-
 .../riseclipse/iec61850/nsd/Copyrighted.java  |   38 +-
 .../iec61850/nsd/DataAttribute.java           |  374 +-
 .../riseclipse/iec61850/nsd/DataObject.java   |  274 +-
 .../iec61850/nsd/DataSetMemberOf.java         |   38 +-
 .../nsd/DefinedAttributeTypeKind.java         |    3 -
 .../{DependsOnType.java => DependsOn.java}    |  113 +-
 .../edf/riseclipse/iec61850/nsd/Doc.java      |   65 +-
 .../riseclipse/iec61850/nsd/DocumentRoot.java |  131 +-
 .../iec61850/nsd/DocumentedClass.java         |   43 +-
 .../riseclipse/iec61850/nsd/Enumeration.java  |  125 +-
 .../riseclipse/iec61850/nsd/Enumerations.java |   63 +-
 .../iec61850/nsd/FunctionalConstraint.java    |  162 +-
 .../iec61850/nsd/FunctionalConstraints.java   |   92 +-
 .../edf/riseclipse/iec61850/nsd/LNClass.java  |   71 +-
 .../riseclipse/iec61850/nsd/LNClasses.java    |   93 +-
 .../edf/riseclipse/iec61850/nsd/License.java  |   68 +-
 .../riseclipse/iec61850/nsd/LicenseKind.java  |    3 -
 .../edf/riseclipse/iec61850/nsd/Literal.java  |   67 +-
 .../edf/riseclipse/iec61850/nsd/NS.java       |  487 ++-
 .../nsd/NSDObjectWithVersionAndRelease.java   |    2 +-
 .../edf/riseclipse/iec61850/nsd/NSDoc.java    |  170 +-
 .../edf/riseclipse/iec61850/nsd/Notice.java   |   33 +-
 .../riseclipse/iec61850/nsd/NsdFactory.java   |   15 +-
 .../riseclipse/iec61850/nsd/NsdPackage.java   | 1725 +++++++--
 .../iec61850/nsd/PresenceCondition.java       |  164 +-
 .../iec61850/nsd/PresenceConditions.java      |   92 +-
 .../edf/riseclipse/iec61850/nsd/PubStage.java |    3 -
 .../riseclipse/iec61850/nsd/ServiceCDC.java   |  127 +-
 .../riseclipse/iec61850/nsd/ServiceCDCs.java  |   63 +-
 .../nsd/ServiceConstructedAttribute.java      |   36 +-
 .../nsd/ServiceConstructedAttributes.java     |   63 +-
 .../iec61850/nsd/ServiceDataAttribute.java    |  238 +-
 .../riseclipse/iec61850/nsd/ServiceNS.java    |  379 +-
 .../iec61850/nsd/ServiceNsUsage.java          |  101 +-
 .../iec61850/nsd/ServiceParameter.java        |  197 +-
 .../riseclipse/iec61850/nsd/ServiceType.java  |   31 +-
 .../iec61850/nsd/ServiceTypeRealization.java  |  288 --
 .../iec61850/nsd/ServiceTypeRealizations.java |   63 +-
 .../iec61850/nsd/SubDataAttribute.java        |  342 +-
 .../iec61850/nsd/SubDataObject.java           |  278 +-
 .../riseclipse/iec61850/nsd/TitledClass.java  |   36 +-
 .../nsd/UndefinedAttributeTypeKind.java       |    3 -
 .../iec61850/nsd/impl/AbbreviationImpl.java   |  200 +-
 .../iec61850/nsd/impl/AbbreviationsImpl.java  |  187 +-
 .../nsd/impl/AbstractLNClassImpl.java         |  151 +-
 .../iec61850/nsd/impl/AnyLNClassImpl.java     |   96 +-
 .../nsd/impl/ApplicableServiceNSImpl.java     |   95 +-
 .../nsd/impl/ApplicableServicesImpl.java      |  162 +-
 .../iec61850/nsd/impl/AppliesToTypeImpl.java  |  153 +-
 .../iec61850/nsd/impl/BasicTypeImpl.java      |  200 +-
 .../iec61850/nsd/impl/BasicTypesImpl.java     |  124 +-
 .../riseclipse/iec61850/nsd/impl/CDCImpl.java |  340 +-
 .../iec61850/nsd/impl/CDCsImpl.java           |  121 +-
 .../iec61850/nsd/impl/ChangesImpl.java        |  307 +-
 .../nsd/impl/ConstructedAttributeImpl.java    |  246 +-
 .../nsd/impl/ConstructedAttributesImpl.java   |  125 +-
 .../nsd/impl/CopyrightNoticeImpl.java         |  262 +-
 .../iec61850/nsd/impl/CopyrightedImpl.java    |  100 +-
 .../iec61850/nsd/impl/DataAttributeImpl.java  |  593 ++-
 .../iec61850/nsd/impl/DataObjectImpl.java     |  454 ++-
 .../nsd/impl/DataSetMemberOfImpl.java         |  105 +
 ...endsOnTypeImpl.java => DependsOnImpl.java} |  200 +-
 .../riseclipse/iec61850/nsd/impl/DocImpl.java |  134 +-
 .../iec61850/nsd/impl/DocumentRootImpl.java   |  161 +-
 .../nsd/impl/DocumentedClassImpl.java         |   47 +-
 .../iec61850/nsd/impl/EnumerationImpl.java    |  220 +-
 .../iec61850/nsd/impl/EnumerationsImpl.java   |  124 +-
 .../nsd/impl/FunctionalConstraintImpl.java    |  327 +-
 .../nsd/impl/FunctionalConstraintsImpl.java   |  190 +-
 .../iec61850/nsd/impl/LNClassImpl.java        |  150 +-
 .../iec61850/nsd/impl/LNClassesImpl.java      |  154 +-
 .../iec61850/nsd/impl/LicenseImpl.java        |  137 +-
 .../iec61850/nsd/impl/LiteralImpl.java        |  151 +-
 .../iec61850/nsd/impl/NSDocImpl.java          |  237 +-
 .../riseclipse/iec61850/nsd/impl/NSImpl.java  | 1126 +++++-
 .../iec61850/nsd/impl/NoticeImpl.java         |   90 +
 .../iec61850/nsd/impl/NsdFactoryImpl.java     |   23 +-
 .../iec61850/nsd/impl/NsdPackageImpl.java     | 1401 +++++---
 .../nsd/impl/PresenceConditionImpl.java       |  295 +-
 .../nsd/impl/PresenceConditionsImpl.java      |  188 +-
 .../iec61850/nsd/impl/ServiceCDCImpl.java     |  222 +-
 .../iec61850/nsd/impl/ServiceCDCsImpl.java    |  125 +-
 .../impl/ServiceConstructedAttributeImpl.java |  110 +
 .../ServiceConstructedAttributesImpl.java     |  130 +-
 .../nsd/impl/ServiceDataAttributeImpl.java    |  403 ++-
 .../iec61850/nsd/impl/ServiceNSImpl.java      |  840 ++++-
 .../iec61850/nsd/impl/ServiceNsUsageImpl.java |  175 +-
 .../nsd/impl/ServiceParameterImpl.java        |  342 +-
 .../iec61850/nsd/impl/ServiceTypeImpl.java    |  105 +
 .../nsd/impl/ServiceTypeRealizationImpl.java  |  602 ----
 .../nsd/impl/ServiceTypeRealizationsImpl.java |  128 +-
 .../nsd/impl/SubDataAttributeImpl.java        |  553 ++-
 .../iec61850/nsd/impl/SubDataObjectImpl.java  |  453 ++-
 .../iec61850/nsd/impl/TitledClassImpl.java    |   47 +-
 .../iec61850/nsd/util/NsdAdapterFactory.java  |   29 +-
 .../iec61850/nsd/util/NsdResourceSetImpl.java |  134 +
 .../iec61850/nsd/util/NsdSwitch.java          |   35 +-
 .../iec61850/nsd/util/NsdValidator.java       |   20 +-
 127 files changed, 20504 insertions(+), 6585 deletions(-)
 create mode 100644 fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/icons/full/ctool16/CreateNS_dependsOn_DependsOn.gif
 create mode 100644 fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/icons/full/obj16/DependsOn.gif
 rename fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/{DependsOnTypeItemProvider.java => DependsOnItemProvider.java} (78%)
 delete mode 100644 fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceTypeRealizationItemProvider.java
 rename fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/{DependsOnType.java => DependsOn.java} (59%)
 delete mode 100644 fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceTypeRealization.java
 rename fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/{DependsOnTypeImpl.java => DependsOnImpl.java} (60%)
 delete mode 100644 fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeRealizationImpl.java
 create mode 100644 fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java

diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/icons/full/ctool16/CreateNS_dependsOn_DependsOn.gif b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/icons/full/ctool16/CreateNS_dependsOn_DependsOn.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f655cb586fba0d881cf1ce5c60e8be5e7e4d60a0
GIT binary patch
literal 223
zcmZ?wbhEHb6krfwIKsg2|NsB{_xIb|$1^Z695`@b&YU?74GqVFga7}JpC51k|Gs@g
zLjzoVrg7S?>1w;Ct8Ja6ysk@rX_M5vO0k(G!vFrh|M&O(-_Pg&em?)_`QqPqn;Bq0
z@h1x-h^+%6Kz1^)#waNCr9|4PG0Z%Bc*=#Xllq(cCY5*^e>Um4mOV*ROub(!Iny~%
zWA^eB>>_<yb55OfvtrOuyYKB{ArRCs`$fWsMJL;t7ACmK-)O11ovU^FWqLkCPEAv4
LV^g-OB7-#mV}@Zw

literal 0
HcmV?d00001

diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/icons/full/obj16/DependsOn.gif b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/icons/full/obj16/DependsOn.gif
new file mode 100644
index 0000000000000000000000000000000000000000..30f0c48da8d4450f7e94a696c4de0a7cc41aa728
GIT binary patch
literal 129
zcmZ?wbhEHb6krfw*vtS14Gatn4Gawp2M!!)XlP*g&%nU&|G<F*|Nnzo|3U0IbLKQO
zG#m>KR{Y7r$iTqKpaaqgGJ}Cd&)}rz>b(}PzkE~Se^}_c-IVoKN`lvdg<oy-K2B4+
XYF6H}Qj=eIIb)~Wk%>aWj11NQ$?`A?

literal 0
HcmV?d00001

diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
index eb90164..0def810 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
@@ -387,3 +387,52 @@ _UI_UndefinedAttributeTypeKind_undefined_literal = undefined
 _UI_NSDObjectWithVersionAndRelease_type = NSD Object With Version And Release
 _UI_NSDObjectWithVersionAndRelease_release_feature = Release
 _UI_NSDObjectWithVersionAndRelease_version_feature = Version
+_UI_DependsOn_type = Depends On
+_UI_AppliesToType_serviceNsUsage_feature = Service Ns Usage
+_UI_DependsOn_id_feature = Id
+_UI_DependsOn_publicationStage_feature = Publication Stage
+_UI_DependsOn_revision_feature = Revision
+_UI_DependsOn_nS_feature = NS
+_UI_ServiceType_applicableServices_feature = Applicable Services
+_UI_Abbreviation_abbreviations_feature = Abbreviations
+_UI_Abbreviations_nS_feature = NS
+_UI_Abbreviations_serviceNS_feature = Service NS
+_UI_AbstractLNClass_lNClasses_feature = LN Classes
+_UI_ApplicableServices_functionalConstraint_feature = Functional Constraint
+_UI_BasicType_basicTypes_feature = Basic Types
+_UI_BasicTypes_nS_feature = NS
+_UI_CDC_cDCs_feature = CD Cs
+_UI_CDCs_nS_feature = NS
+_UI_Changes_nS_feature = NS
+_UI_Changes_serviceNS_feature = Service NS
+_UI_ConstructedAttribute_constructedAttributes_feature = Constructed Attributes
+_UI_ConstructedAttribute_serviceTypeRealizations_feature = Service Type Realizations
+_UI_ConstructedAttributes_nS_feature = NS
+_UI_CopyrightNotice_copyrighted_feature = Copyrighted
+_UI_DataAttribute_cDC_feature = CDC
+_UI_DataObject_anyLNClass_feature = Any LN Class
+_UI_DataSetMemberOf_applicableServices_feature = Applicable Services
+_UI_Doc_nSDoc_feature = NS Doc
+_UI_Enumeration_enumerations_feature = Enumerations
+_UI_Enumerations_nS_feature = NS
+_UI_FunctionalConstraint_functionalConstraints_feature = Functional Constraints
+_UI_FunctionalConstraints_nS_feature = NS
+_UI_FunctionalConstraints_serviceNS_feature = Service NS
+_UI_License_copyrightNotice_feature = Copyright Notice
+_UI_Literal_enumeration_feature = Enumeration
+_UI_LNClass_lNClasses_feature = LN Classes
+_UI_LNClasses_nS_feature = NS
+_UI_Notice_copyrightNotice_feature = Copyright Notice
+_UI_PresenceCondition_presenceConditions_feature = Presence Conditions
+_UI_PresenceConditions_nS_feature = NS
+_UI_PresenceConditions_serviceNS_feature = Service NS
+_UI_ServiceCDC_serviceCDCs_feature = Service CD Cs
+_UI_ServiceCDCs_serviceNS_feature = Service NS
+_UI_ServiceConstructedAttribute_serviceConstructedAttribute_feature = Service Constructed Attribute
+_UI_ServiceConstructedAttributes_serviceNS_feature = Service NS
+_UI_ServiceDataAttribute_serviceCDC_feature = Service CDC
+_UI_ServiceNsUsage_applicableServiceNS_feature = Applicable Service NS
+_UI_ServiceParameter_cDC_feature = CDC
+_UI_ServiceTypeRealizations_serviceNS_feature = Service NS
+_UI_SubDataAttribute_constructedAttribute_feature = Constructed Attribute
+_UI_SubDataObject_cDC_feature = CDC
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DependsOnTypeItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DependsOnItemProvider.java
similarity index 78%
rename from fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DependsOnTypeItemProvider.java
rename to fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DependsOnItemProvider.java
index 508a9d2..ddb193b 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DependsOnTypeItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DependsOnItemProvider.java
@@ -19,7 +19,7 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.provider;
 
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 import java.util.Collection;
@@ -27,25 +27,26 @@ import java.util.List;
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.common.notify.Notification;
+
 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ViewerNotification;
 
 /**
- * This is the item provider adapter for a {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType} object.
+ * This is the item provider adapter for a {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn} object.
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  * @generated
  */
-public class DependsOnTypeItemProvider extends NSDObjectWithVersionAndReleaseItemProvider {
+public class DependsOnItemProvider extends NSDObjectWithVersionAndReleaseItemProvider {
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    public DependsOnTypeItemProvider( AdapterFactory adapterFactory ) {
+    public DependsOnItemProvider( AdapterFactory adapterFactory ) {
         super( adapterFactory );
     }
 
@@ -76,10 +77,10 @@ public class DependsOnTypeItemProvider extends NSDObjectWithVersionAndReleaseIte
     protected void addIdPropertyDescriptor( Object object ) {
         itemPropertyDescriptors.add(
                 createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
-                        getResourceLocator(), getString( "_UI_DependsOnType_id_feature" ),
-                        getString( "_UI_PropertyDescriptor_description", "_UI_DependsOnType_id_feature",
-                                "_UI_DependsOnType_type" ),
-                        NsdPackage.Literals.DEPENDS_ON_TYPE__ID, true, false, false,
+                        getResourceLocator(), getString( "_UI_DependsOn_id_feature" ),
+                        getString( "_UI_PropertyDescriptor_description", "_UI_DependsOn_id_feature",
+                                "_UI_DependsOn_type" ),
+                        NsdPackage.Literals.DEPENDS_ON__ID, true, false, false,
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
     }
 
@@ -92,10 +93,10 @@ public class DependsOnTypeItemProvider extends NSDObjectWithVersionAndReleaseIte
     protected void addPublicationStagePropertyDescriptor( Object object ) {
         itemPropertyDescriptors.add(
                 createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
-                        getResourceLocator(), getString( "_UI_DependsOnType_publicationStage_feature" ),
-                        getString( "_UI_PropertyDescriptor_description", "_UI_DependsOnType_publicationStage_feature",
-                                "_UI_DependsOnType_type" ),
-                        NsdPackage.Literals.DEPENDS_ON_TYPE__PUBLICATION_STAGE, true, false, false,
+                        getResourceLocator(), getString( "_UI_DependsOn_publicationStage_feature" ),
+                        getString( "_UI_PropertyDescriptor_description", "_UI_DependsOn_publicationStage_feature",
+                                "_UI_DependsOn_type" ),
+                        NsdPackage.Literals.DEPENDS_ON__PUBLICATION_STAGE, true, false, false,
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
     }
 
@@ -108,22 +109,22 @@ public class DependsOnTypeItemProvider extends NSDObjectWithVersionAndReleaseIte
     protected void addRevisionPropertyDescriptor( Object object ) {
         itemPropertyDescriptors.add(
                 createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
-                        getResourceLocator(), getString( "_UI_DependsOnType_revision_feature" ),
-                        getString( "_UI_PropertyDescriptor_description", "_UI_DependsOnType_revision_feature",
-                                "_UI_DependsOnType_type" ),
-                        NsdPackage.Literals.DEPENDS_ON_TYPE__REVISION, true, false, false,
+                        getResourceLocator(), getString( "_UI_DependsOn_revision_feature" ),
+                        getString( "_UI_PropertyDescriptor_description", "_UI_DependsOn_revision_feature",
+                                "_UI_DependsOn_type" ),
+                        NsdPackage.Literals.DEPENDS_ON__REVISION, true, false, false,
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
     }
 
     /**
-     * This returns DependsOnType.gif.
+     * This returns DependsOn.gif.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
     @Override
     public Object getImage( Object object ) {
-        return overlayImage( object, getResourceLocator().getImage( "full/obj16/DependsOnType" ) );
+        return overlayImage( object, getResourceLocator().getImage( "full/obj16/DependsOn" ) );
     }
 
     /**
@@ -134,9 +135,9 @@ public class DependsOnTypeItemProvider extends NSDObjectWithVersionAndReleaseIte
      */
     @Override
     public String getText( Object object ) {
-        String label = ( ( DependsOnType ) object ).getId();
-        return label == null || label.length() == 0 ? getString( "_UI_DependsOnType_type" )
-                : getString( "_UI_DependsOnType_type" ) + " " + label;
+        String label = ( ( DependsOn ) object ).getId();
+        return label == null || label.length() == 0 ? getString( "_UI_DependsOn_type" )
+                : getString( "_UI_DependsOn_type" ) + " " + label;
     }
 
     /**
@@ -150,10 +151,10 @@ public class DependsOnTypeItemProvider extends NSDObjectWithVersionAndReleaseIte
     public void notifyChanged( Notification notification ) {
         updateChildren( notification );
 
-        switch( notification.getFeatureID( DependsOnType.class ) ) {
-        case NsdPackage.DEPENDS_ON_TYPE__ID:
-        case NsdPackage.DEPENDS_ON_TYPE__PUBLICATION_STAGE:
-        case NsdPackage.DEPENDS_ON_TYPE__REVISION:
+        switch( notification.getFeatureID( DependsOn.class ) ) {
+        case NsdPackage.DEPENDS_ON__ID:
+        case NsdPackage.DEPENDS_ON__PUBLICATION_STAGE:
+        case NsdPackage.DEPENDS_ON__REVISION:
             fireNotifyChanged( new ViewerNotification( notification, notification.getNotifier(), false, true ) );
             return;
         }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DocItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DocItemProvider.java
index 8f6b174..dfb5bbd 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DocItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DocItemProvider.java
@@ -203,9 +203,6 @@ public class DocItemProvider extends ItemProviderAdapter implements IEditingDoma
                 FeatureMapUtil.createEntry( NsdPackage.Literals.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS,
                         NsdFactory.eINSTANCE.createApplicableServiceNS() ) ) );
 
-        newChildDescriptors.add( createChildParameter( NsdPackage.Literals.DOC__MIXED, FeatureMapUtil.createEntry(
-                NsdPackage.Literals.DOCUMENT_ROOT__COPYRIGHT, NsdFactory.eINSTANCE.createCopyrightNotice() ) ) );
-
         newChildDescriptors.add( createChildParameter( NsdPackage.Literals.DOC__MIXED, FeatureMapUtil
                 .createEntry( NsdPackage.Literals.DOCUMENT_ROOT__NS, NsdFactory.eINSTANCE.createNS() ) ) );
 
@@ -235,7 +232,6 @@ public class DocItemProvider extends ItemProviderAdapter implements IEditingDoma
         }
 
         boolean qualify = childFeature == NsdPackage.Literals.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS
-                || childFeature == NsdPackage.Literals.DOCUMENT_ROOT__COPYRIGHT
                 || childFeature == NsdPackage.Literals.DOCUMENT_ROOT__NS
                 || childFeature == NsdPackage.Literals.DOCUMENT_ROOT__NS_DOC
                 || childFeature == NsdPackage.Literals.DOCUMENT_ROOT__SERVICE_NS;
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DocumentRootItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DocumentRootItemProvider.java
index f7c48b2..fafd074 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DocumentRootItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DocumentRootItemProvider.java
@@ -88,7 +88,6 @@ public class DocumentRootItemProvider extends ItemProviderAdapter implements IEd
         if( childrenFeatures == null ) {
             super.getChildrenFeatures( object );
             childrenFeatures.add( NsdPackage.Literals.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS );
-            childrenFeatures.add( NsdPackage.Literals.DOCUMENT_ROOT__COPYRIGHT );
             childrenFeatures.add( NsdPackage.Literals.DOCUMENT_ROOT__NS );
             childrenFeatures.add( NsdPackage.Literals.DOCUMENT_ROOT__NS_DOC );
             childrenFeatures.add( NsdPackage.Literals.DOCUMENT_ROOT__SERVICE_NS );
@@ -144,7 +143,6 @@ public class DocumentRootItemProvider extends ItemProviderAdapter implements IEd
 
         switch( notification.getFeatureID( DocumentRoot.class ) ) {
         case NsdPackage.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS:
-        case NsdPackage.DOCUMENT_ROOT__COPYRIGHT:
         case NsdPackage.DOCUMENT_ROOT__NS:
         case NsdPackage.DOCUMENT_ROOT__NS_DOC:
         case NsdPackage.DOCUMENT_ROOT__SERVICE_NS:
@@ -168,9 +166,6 @@ public class DocumentRootItemProvider extends ItemProviderAdapter implements IEd
         newChildDescriptors.add( createChildParameter( NsdPackage.Literals.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS,
                 NsdFactory.eINSTANCE.createApplicableServiceNS() ) );
 
-        newChildDescriptors.add( createChildParameter( NsdPackage.Literals.DOCUMENT_ROOT__COPYRIGHT,
-                NsdFactory.eINSTANCE.createCopyrightNotice() ) );
-
         newChildDescriptors
                 .add( createChildParameter( NsdPackage.Literals.DOCUMENT_ROOT__NS, NsdFactory.eINSTANCE.createNS() ) );
 
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NSItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NSItemProvider.java
index 11059ca..25c79e0 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NSItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NSItemProvider.java
@@ -314,8 +314,8 @@ public class NSItemProvider extends CopyrightedItemProvider {
         newChildDescriptors
                 .add( createChildParameter( NsdPackage.Literals.NS__CHANGES, NsdFactory.eINSTANCE.createChanges() ) );
 
-        newChildDescriptors.add( createChildParameter( NsdPackage.Literals.NS__DEPENDS_ON,
-                NsdFactory.eINSTANCE.createDependsOnType() ) );
+        newChildDescriptors.add(
+                createChildParameter( NsdPackage.Literals.NS__DEPENDS_ON, NsdFactory.eINSTANCE.createDependsOn() ) );
 
         newChildDescriptors.add(
                 createChildParameter( NsdPackage.Literals.NS__BASIC_TYPES, NsdFactory.eINSTANCE.createBasicTypes() ) );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NsdItemProviderAdapterFactory.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NsdItemProviderAdapterFactory.java
index 90ece9e..63c5dd0 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NsdItemProviderAdapterFactory.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NsdItemProviderAdapterFactory.java
@@ -113,26 +113,26 @@ public class NsdItemProviderAdapterFactory extends NsdAdapterFactory
     }
 
     /**
-     * This keeps track of the one adapter used for all {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType} instances.
+     * This keeps track of the one adapter used for all {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn} instances.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    protected DependsOnTypeItemProvider dependsOnTypeItemProvider;
+    protected DependsOnItemProvider dependsOnItemProvider;
 
     /**
-     * This creates an adapter for a {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType}.
+     * This creates an adapter for a {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
     @Override
-    public Adapter createDependsOnTypeAdapter() {
-        if( dependsOnTypeItemProvider == null ) {
-            dependsOnTypeItemProvider = new DependsOnTypeItemProvider( this );
+    public Adapter createDependsOnAdapter() {
+        if( dependsOnItemProvider == null ) {
+            dependsOnItemProvider = new DependsOnItemProvider( this );
         }
 
-        return dependsOnTypeItemProvider;
+        return dependsOnItemProvider;
     }
 
     /**
@@ -1101,29 +1101,6 @@ public class NsdItemProviderAdapterFactory extends NsdAdapterFactory
         return serviceParameterItemProvider;
     }
 
-    /**
-     * This keeps track of the one adapter used for all {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization} instances.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected ServiceTypeRealizationItemProvider serviceTypeRealizationItemProvider;
-
-    /**
-     * This creates an adapter for a {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization}.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public Adapter createServiceTypeRealizationAdapter() {
-        if( serviceTypeRealizationItemProvider == null ) {
-            serviceTypeRealizationItemProvider = new ServiceTypeRealizationItemProvider( this );
-        }
-
-        return serviceTypeRealizationItemProvider;
-    }
-
     /**
      * This keeps track of the one adapter used for all {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations} instances.
      * <!-- begin-user-doc -->
@@ -1322,7 +1299,7 @@ public class NsdItemProviderAdapterFactory extends NsdAdapterFactory
     @Override
     public void dispose() {
         if( appliesToTypeItemProvider != null ) appliesToTypeItemProvider.dispose();
-        if( dependsOnTypeItemProvider != null ) dependsOnTypeItemProvider.dispose();
+        if( dependsOnItemProvider != null ) dependsOnItemProvider.dispose();
         if( documentRootItemProvider != null ) documentRootItemProvider.dispose();
         if( serviceTypeItemProvider != null ) serviceTypeItemProvider.dispose();
         if( abbreviationItemProvider != null ) abbreviationItemProvider.dispose();
@@ -1365,7 +1342,6 @@ public class NsdItemProviderAdapterFactory extends NsdAdapterFactory
         if( serviceNSItemProvider != null ) serviceNSItemProvider.dispose();
         if( serviceNsUsageItemProvider != null ) serviceNsUsageItemProvider.dispose();
         if( serviceParameterItemProvider != null ) serviceParameterItemProvider.dispose();
-        if( serviceTypeRealizationItemProvider != null ) serviceTypeRealizationItemProvider.dispose();
         if( serviceTypeRealizationsItemProvider != null ) serviceTypeRealizationsItemProvider.dispose();
         if( subDataAttributeItemProvider != null ) subDataAttributeItemProvider.dispose();
         if( subDataObjectItemProvider != null ) subDataObjectItemProvider.dispose();
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceTypeRealizationItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceTypeRealizationItemProvider.java
deleted file mode 100644
index df10a59..0000000
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceTypeRealizationItemProvider.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/**
- *  Copyright (c) 2019 CentraleSupélec & EDF.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  This file is part of the RiseClipse tool
- *  
- *  Contributors:
- *      Computer Science Department, CentraleSupélec
- *      EDF R&D
- *  Contacts:
- *      dominique.marcadet@centralesupelec.fr
- *      aurelie.dehouck-neveu@edf.fr
- *  Web site:
- *      http://wdi.supelec.fr/software/RiseClipse/
- * 
- */
-package fr.centralesupelec.edf.riseclipse.iec61850.nsd.provider;
-
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.common.util.ResourceLocator;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.IItemPropertySource;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-/**
- * This is the item provider adapter for a {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class ServiceTypeRealizationItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
-        IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
-    /**
-     * This constructs an instance from a factory and a notifier.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public ServiceTypeRealizationItemProvider( AdapterFactory adapterFactory ) {
-        super( adapterFactory );
-    }
-
-    /**
-     * This returns the property descriptors for the adapted class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public List< IItemPropertyDescriptor > getPropertyDescriptors( Object object ) {
-        if( itemPropertyDescriptors == null ) {
-            super.getPropertyDescriptors( object );
-
-            addFcPropertyDescriptor( object );
-            addNamePropertyDescriptor( object );
-            addPresCondPropertyDescriptor( object );
-            addPresCondArgsPropertyDescriptor( object );
-            addPresCondArgsIDPropertyDescriptor( object );
-            addTypePropertyDescriptor( object );
-            addTypeKindPropertyDescriptor( object );
-        }
-        return itemPropertyDescriptors;
-    }
-
-    /**
-     * This adds a property descriptor for the Fc feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected void addFcPropertyDescriptor( Object object ) {
-        itemPropertyDescriptors.add(
-                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
-                        getResourceLocator(), getString( "_UI_ServiceTypeRealization_fc_feature" ),
-                        getString( "_UI_PropertyDescriptor_description", "_UI_ServiceTypeRealization_fc_feature",
-                                "_UI_ServiceTypeRealization_type" ),
-                        NsdPackage.Literals.SERVICE_TYPE_REALIZATION__FC, true, false, false,
-                        ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
-    }
-
-    /**
-     * This adds a property descriptor for the Name feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected void addNamePropertyDescriptor( Object object ) {
-        itemPropertyDescriptors.add(
-                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
-                        getResourceLocator(), getString( "_UI_ServiceTypeRealization_name_feature" ),
-                        getString( "_UI_PropertyDescriptor_description", "_UI_ServiceTypeRealization_name_feature",
-                                "_UI_ServiceTypeRealization_type" ),
-                        NsdPackage.Literals.SERVICE_TYPE_REALIZATION__NAME, true, false, false,
-                        ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
-    }
-
-    /**
-     * This adds a property descriptor for the Pres Cond feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected void addPresCondPropertyDescriptor( Object object ) {
-        itemPropertyDescriptors.add( createItemPropertyDescriptor(
-                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
-                getString( "_UI_ServiceTypeRealization_presCond_feature" ),
-                getString( "_UI_PropertyDescriptor_description", "_UI_ServiceTypeRealization_presCond_feature",
-                        "_UI_ServiceTypeRealization_type" ),
-                NsdPackage.Literals.SERVICE_TYPE_REALIZATION__PRES_COND, true, false, false,
-                ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
-    }
-
-    /**
-     * This adds a property descriptor for the Pres Cond Args feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected void addPresCondArgsPropertyDescriptor( Object object ) {
-        itemPropertyDescriptors.add(
-                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
-                        getResourceLocator(), getString( "_UI_ServiceTypeRealization_presCondArgs_feature" ),
-                        getString( "_UI_PropertyDescriptor_description",
-                                "_UI_ServiceTypeRealization_presCondArgs_feature", "_UI_ServiceTypeRealization_type" ),
-                        NsdPackage.Literals.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS, true, false, false,
-                        ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
-    }
-
-    /**
-     * This adds a property descriptor for the Pres Cond Args ID feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected void addPresCondArgsIDPropertyDescriptor( Object object ) {
-        itemPropertyDescriptors.add( createItemPropertyDescriptor(
-                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
-                getString( "_UI_ServiceTypeRealization_presCondArgsID_feature" ),
-                getString( "_UI_PropertyDescriptor_description", "_UI_ServiceTypeRealization_presCondArgsID_feature",
-                        "_UI_ServiceTypeRealization_type" ),
-                NsdPackage.Literals.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS_ID, true, false, false,
-                ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
-    }
-
-    /**
-     * This adds a property descriptor for the Type feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected void addTypePropertyDescriptor( Object object ) {
-        itemPropertyDescriptors.add(
-                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
-                        getResourceLocator(), getString( "_UI_ServiceTypeRealization_type_feature" ),
-                        getString( "_UI_PropertyDescriptor_description", "_UI_ServiceTypeRealization_type_feature",
-                                "_UI_ServiceTypeRealization_type" ),
-                        NsdPackage.Literals.SERVICE_TYPE_REALIZATION__TYPE, true, false, false,
-                        ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
-    }
-
-    /**
-     * This adds a property descriptor for the Type Kind feature.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected void addTypeKindPropertyDescriptor( Object object ) {
-        itemPropertyDescriptors.add( createItemPropertyDescriptor(
-                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
-                getString( "_UI_ServiceTypeRealization_typeKind_feature" ),
-                getString( "_UI_PropertyDescriptor_description", "_UI_ServiceTypeRealization_typeKind_feature",
-                        "_UI_ServiceTypeRealization_type" ),
-                NsdPackage.Literals.SERVICE_TYPE_REALIZATION__TYPE_KIND, true, false, false,
-                ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
-    }
-
-    /**
-     * This returns ServiceTypeRealization.gif.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public Object getImage( Object object ) {
-        return overlayImage( object, getResourceLocator().getImage( "full/obj16/ServiceTypeRealization" ) );
-    }
-
-    /**
-     * This returns the label text for the adapted class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public String getText( Object object ) {
-        String label = ( ( ServiceTypeRealization ) object ).getName();
-        return label == null || label.length() == 0 ? getString( "_UI_ServiceTypeRealization_type" )
-                : getString( "_UI_ServiceTypeRealization_type" ) + " " + label;
-    }
-
-    /**
-     * This handles model notifications by calling {@link #updateChildren} to update any cached
-     * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void notifyChanged( Notification notification ) {
-        updateChildren( notification );
-
-        switch( notification.getFeatureID( ServiceTypeRealization.class ) ) {
-        case NsdPackage.SERVICE_TYPE_REALIZATION__FC:
-        case NsdPackage.SERVICE_TYPE_REALIZATION__NAME:
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND:
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS:
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS_ID:
-        case NsdPackage.SERVICE_TYPE_REALIZATION__TYPE:
-        case NsdPackage.SERVICE_TYPE_REALIZATION__TYPE_KIND:
-            fireNotifyChanged( new ViewerNotification( notification, notification.getNotifier(), false, true ) );
-            return;
-        }
-        super.notifyChanged( notification );
-    }
-
-    /**
-     * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
-     * that can be created under this object.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    protected void collectNewChildDescriptors( Collection< Object > newChildDescriptors, Object object ) {
-        super.collectNewChildDescriptors( newChildDescriptors, object );
-    }
-
-    /**
-     * Return the resource locator for this item provider's resources.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public ResourceLocator getResourceLocator() {
-        return NSDEditPlugin.INSTANCE;
-    }
-
-}
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.aird b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.aird
index a261324..e7eb17c 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.aird
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.aird
@@ -45,23 +45,22 @@
             <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
           </endLabelStyleDescription>
         </computedStyleDescriptions>
-        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan">
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan">
           <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
-          <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_sBdNsik6Eem-J7NZSmLltA" showIcon="false" labelExpression="service:render">
-            <labelFormat>bold</labelFormat>
+          <beginLabelStyleDescription xmi:type="style:BeginLabelStyleDescription" xmi:id="_3MNt4SpWEem2soT2TDjIcQ" showIcon="false" labelExpression="service:renderEOpposite">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </beginLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_3MNt4ipWEem2soT2TDjIcQ" showIcon="false" labelExpression="service:render">
             <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
-          </centerLabelStyleDescription>
-          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_sBdNsyk6Eem-J7NZSmLltA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
-            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
           </endLabelStyleDescription>
         </computedStyleDescriptions>
-        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan">
+        <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan">
           <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
-          <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_sBd0wSk6Eem-J7NZSmLltA" showIcon="false" labelExpression="service:render">
+          <beginLabelStyleDescription xmi:type="style:BeginLabelStyleDescription" xmi:id="_3MO8ASpWEem2soT2TDjIcQ" showIcon="false" labelExpression="service:renderEOpposite">
+            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+          </beginLabelStyleDescription>
+          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_3MO8AipWEem2soT2TDjIcQ" showIcon="false" labelExpression="service:render">
             <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
-          </centerLabelStyleDescription>
-          <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_sBd0wik6Eem-J7NZSmLltA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
-            <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
           </endLabelStyleDescription>
         </computedStyleDescriptions>
       </data>
@@ -87,28 +86,7 @@
             <styles xmi:type="notation:FilteringStyle" xmi:id="_sCBOYyk6Eem-J7NZSmLltA"/>
           </children>
           <styles xmi:type="notation:ShapeStyle" xmi:id="_sCAnUSk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCAnUik6Eem-J7NZSmLltA" x="948" y="1140"/>
-        </children>
-        <children xmi:type="notation:Node" xmi:id="_sCBOZCk6Eem-J7NZSmLltA" type="2003" element="_r_SDcCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCBOZyk6Eem-J7NZSmLltA" type="5007"/>
-          <children xmi:type="notation:Node" xmi:id="_sCBOaCk6Eem-J7NZSmLltA" type="7004">
-            <children xmi:type="notation:Node" xmi:id="_sCMNkCk6Eem-J7NZSmLltA" type="3010" element="_sAZdwCk6Eem-J7NZSmLltA">
-              <styles xmi:type="notation:FontStyle" xmi:id="_sCMNkSk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8" bold="true"/>
-              <layoutConstraint xmi:type="notation:Location" xmi:id="_sCMNkik6Eem-J7NZSmLltA"/>
-            </children>
-            <children xmi:type="notation:Node" xmi:id="_sCMNkyk6Eem-J7NZSmLltA" type="3010" element="_sAZdwik6Eem-J7NZSmLltA">
-              <styles xmi:type="notation:FontStyle" xmi:id="_sCMNlCk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-              <layoutConstraint xmi:type="notation:Location" xmi:id="_sCMNlSk6Eem-J7NZSmLltA"/>
-            </children>
-            <children xmi:type="notation:Node" xmi:id="_sCM0kCk6Eem-J7NZSmLltA" type="3010" element="_sAaE0Sk6Eem-J7NZSmLltA">
-              <styles xmi:type="notation:FontStyle" xmi:id="_sCM0kSk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-              <layoutConstraint xmi:type="notation:Location" xmi:id="_sCM0kik6Eem-J7NZSmLltA"/>
-            </children>
-            <styles xmi:type="notation:SortingStyle" xmi:id="_sCBOaSk6Eem-J7NZSmLltA"/>
-            <styles xmi:type="notation:FilteringStyle" xmi:id="_sCBOaik6Eem-J7NZSmLltA"/>
-          </children>
-          <styles xmi:type="notation:ShapeStyle" xmi:id="_sCBOZSk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCBOZik6Eem-J7NZSmLltA" x="900" y="752"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCAnUik6Eem-J7NZSmLltA" x="948" y="1132"/>
         </children>
         <children xmi:type="notation:Node" xmi:id="_sCBOayk6Eem-J7NZSmLltA" type="2003" element="_r_Sqgik6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCBObik6Eem-J7NZSmLltA" type="5007"/>
@@ -194,7 +172,7 @@
             <styles xmi:type="notation:FilteringStyle" xmi:id="_sCCcgyk6Eem-J7NZSmLltA"/>
           </children>
           <styles xmi:type="notation:ShapeStyle" xmi:id="_sCB1kCk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8" italic="true"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCB1kSk6Eem-J7NZSmLltA" x="3343" y="680"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCB1kSk6Eem-J7NZSmLltA" x="3344" y="648"/>
         </children>
         <children xmi:type="notation:Node" xmi:id="_sCCchCk6Eem-J7NZSmLltA" type="2003" element="_r_Z_QCk6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCCchyk6Eem-J7NZSmLltA" type="5007"/>
@@ -220,7 +198,7 @@
             <styles xmi:type="notation:FilteringStyle" xmi:id="_sCCckSk6Eem-J7NZSmLltA"/>
           </children>
           <styles xmi:type="notation:ShapeStyle" xmi:id="_sCCcjCk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCCcjSk6Eem-J7NZSmLltA" x="1624" y="811"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCCcjSk6Eem-J7NZSmLltA" x="1624" y="849"/>
         </children>
         <children xmi:type="notation:Node" xmi:id="_sCCcmSk6Eem-J7NZSmLltA" type="2003" element="_r_cbgSk6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCCcnCk6Eem-J7NZSmLltA" type="5007"/>
@@ -284,7 +262,7 @@
             <styles xmi:type="notation:FilteringStyle" xmi:id="_sCDDryk6Eem-J7NZSmLltA"/>
           </children>
           <styles xmi:type="notation:ShapeStyle" xmi:id="_sCDDqik6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCDDqyk6Eem-J7NZSmLltA" x="2912" y="688"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCDDqyk6Eem-J7NZSmLltA" x="2904" y="664"/>
         </children>
         <children xmi:type="notation:Node" xmi:id="_sCDDsCk6Eem-J7NZSmLltA" type="2003" element="_r_h7ESk6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCDqoCk6Eem-J7NZSmLltA" type="5007"/>
@@ -704,11 +682,15 @@
               <styles xmi:type="notation:FontStyle" xmi:id="_sCXMvyk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
               <layoutConstraint xmi:type="notation:Location" xmi:id="_sCXMwCk6Eem-J7NZSmLltA"/>
             </children>
+            <children xmi:type="notation:Node" xmi:id="_3Ms2ECpWEem2soT2TDjIcQ" type="3010" element="_3LqUQCpWEem2soT2TDjIcQ">
+              <styles xmi:type="notation:FontStyle" xmi:id="_3Ms2ESpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+              <layoutConstraint xmi:type="notation:Location" xmi:id="_3Ms2EipWEem2soT2TDjIcQ"/>
+            </children>
             <styles xmi:type="notation:SortingStyle" xmi:id="_sCH8GSk6Eem-J7NZSmLltA"/>
             <styles xmi:type="notation:FilteringStyle" xmi:id="_sCH8Gik6Eem-J7NZSmLltA"/>
           </children>
           <styles xmi:type="notation:ShapeStyle" xmi:id="_sCH8FSk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCH8Fik6Eem-J7NZSmLltA" x="372" y="556"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCH8Fik6Eem-J7NZSmLltA" x="372" y="544"/>
         </children>
         <children xmi:type="notation:Node" xmi:id="_sCH8Gyk6Eem-J7NZSmLltA" type="2003" element="_r_5HcCk6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCH8Hik6Eem-J7NZSmLltA" type="5007"/>
@@ -801,7 +783,7 @@
             <styles xmi:type="notation:FilteringStyle" xmi:id="_sCJKQCk6Eem-J7NZSmLltA"/>
           </children>
           <styles xmi:type="notation:ShapeStyle" xmi:id="_sCJKOyk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCJKPCk6Eem-J7NZSmLltA" x="3868" y="833"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCJKPCk6Eem-J7NZSmLltA" x="3880" y="833"/>
         </children>
         <children xmi:type="notation:Node" xmi:id="_sCJKQSk6Eem-J7NZSmLltA" type="2003" element="_r_9_8Ck6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCJKRCk6Eem-J7NZSmLltA" type="5007"/>
@@ -823,7 +805,7 @@
             <styles xmi:type="notation:FilteringStyle" xmi:id="_sCJxRik6Eem-J7NZSmLltA"/>
           </children>
           <styles xmi:type="notation:ShapeStyle" xmi:id="_sCJxQSk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCJxQik6Eem-J7NZSmLltA" x="3612" y="833"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCJxQik6Eem-J7NZSmLltA" x="3596" y="833"/>
         </children>
         <children xmi:type="notation:Node" xmi:id="_sCJxRyk6Eem-J7NZSmLltA" type="2003" element="_r__OESk6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCJxSik6Eem-J7NZSmLltA" type="5007"/>
@@ -922,7 +904,7 @@
             <styles xmi:type="notation:FilteringStyle" xmi:id="_sCKYVik6Eem-J7NZSmLltA"/>
           </children>
           <styles xmi:type="notation:ShapeStyle" xmi:id="_sCKYUSk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCKYUik6Eem-J7NZSmLltA" x="596" y="1140"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCKYUik6Eem-J7NZSmLltA" x="596" y="1132"/>
         </children>
         <children xmi:type="notation:Node" xmi:id="_sCKYVyk6Eem-J7NZSmLltA" type="2003" element="_sADfgSk6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCKYWik6Eem-J7NZSmLltA" type="5007"/>
@@ -964,7 +946,7 @@
             <styles xmi:type="notation:FilteringStyle" xmi:id="_sCK_Zik6Eem-J7NZSmLltA"/>
           </children>
           <styles xmi:type="notation:ShapeStyle" xmi:id="_sCK_YSk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCK_Yik6Eem-J7NZSmLltA" x="2732" y="680"/>
+          <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCK_Yik6Eem-J7NZSmLltA" x="2732" y="655"/>
         </children>
         <children xmi:type="notation:Node" xmi:id="_sCK_Zyk6Eem-J7NZSmLltA" type="2003" element="_sAGi0ik6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCK_aik6Eem-J7NZSmLltA" type="5007"/>
@@ -1127,35 +1109,19 @@
           <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCehaik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
           <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCfIcCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
         </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCfIcSk6Eem-J7NZSmLltA" type="4001" element="_sBaxeSk6Eem-J7NZSmLltA" source="_sCBOayk6Eem-J7NZSmLltA" target="_sCERtCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCfIdSk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCfIdik6Eem-J7NZSmLltA" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCfIdyk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCfIeCk6Eem-J7NZSmLltA" x="425" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCfIeSk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCfIeik6Eem-J7NZSmLltA" x="157" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCfIcik6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCfIcyk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCfIdCk6Eem-J7NZSmLltA" points="[1, -49, -1166, -33]$[1, -77, -1166, -61]$[1165, -77, -2, -61]$[1165, -65, -2, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCfIeyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCfIfCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
         <edges xmi:type="notation:Edge" xmi:id="_sCfIfSk6Eem-J7NZSmLltA" type="4001" element="_sBbYhik6Eem-J7NZSmLltA" source="_sCBOayk6Eem-J7NZSmLltA" target="_sCH8FCk6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCfIgSk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCfIgik6Eem-J7NZSmLltA" x="54" y="-102"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCfIgik6Eem-J7NZSmLltA" x="48" y="-102"/>
           </children>
           <children xmi:type="notation:Node" xmi:id="_sCfIgyk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCfIhCk6Eem-J7NZSmLltA" x="3"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCfIhCk6Eem-J7NZSmLltA" x="5"/>
           </children>
           <children xmi:type="notation:Node" xmi:id="_sCfIhSk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCfIhik6Eem-J7NZSmLltA" x="-7" y="10"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCfIhik6Eem-J7NZSmLltA" x="-9" y="10"/>
           </children>
           <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCfIfik6Eem-J7NZSmLltA" routing="Rectilinear"/>
           <styles xmi:type="notation:FontStyle" xmi:id="_sCfIfyk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCfIgCk6Eem-J7NZSmLltA" points="[61, 98, -259, -331]$[61, 366, -259, -63]$[240, 366, -80, -63]"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCfIgCk6Eem-J7NZSmLltA" points="[61, 98, -259, -335]$[61, 362, -259, -71]$[240, 362, -80, -71]"/>
           <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCfvgCk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
           <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCfvgSk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
         </edges>
@@ -1191,726 +1157,6 @@
           <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCfvmCk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
           <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCfvmSk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
         </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCfvmik6Eem-J7NZSmLltA" type="4001" element="_sBdNsCk6Eem-J7NZSmLltA" source="_sCB1cyk6Eem-J7NZSmLltA" target="_sCBOeSk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCgWkCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCgWkSk6Eem-J7NZSmLltA" x="18" y="-51"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCgWkik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCgWkyk6Eem-J7NZSmLltA" x="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCgWlCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCgWlSk6Eem-J7NZSmLltA" x="6" y="8"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCfvmyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCfvnCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCfvnSk6Eem-J7NZSmLltA" points="[33, 98, -15, -161]$[33, 161, -15, -98]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCgWlik6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCgWlyk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCgWmCk6Eem-J7NZSmLltA" type="4001" element="_sBdNuik6Eem-J7NZSmLltA" source="_sCB1jyk6Eem-J7NZSmLltA" target="_sCERwik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCgWnCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCgWnSk6Eem-J7NZSmLltA" x="58" y="-58"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCgWnik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCgWnyk6Eem-J7NZSmLltA" x="14" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCgWoCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCgWoSk6Eem-J7NZSmLltA" x="47" y="6"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCgWmSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCgWmik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCgWmyk6Eem-J7NZSmLltA" points="[-59, 1, 245, 446]$[-100, 1, 204, 446]$[-100, -313, 204, 132]$[-290, -313, 14, 132]$[-290, -342, 14, 103]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCgWoik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCgWoyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCgWpCk6Eem-J7NZSmLltA" type="4001" element="_sBd0ySk6Eem-J7NZSmLltA" source="_sCDqsik6Eem-J7NZSmLltA" target="_sCERtCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCgWqCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCgWqSk6Eem-J7NZSmLltA" x="-84" y="-8"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCgWqik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCgWqyk6Eem-J7NZSmLltA" x="109"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCgWrCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCgWrSk6Eem-J7NZSmLltA" x="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCgWpSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCgWpik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCgWpyk6Eem-J7NZSmLltA" points="[59, 73, -265, -229]$[333, 73, 9, -229]$[333, 204, 9, -98]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCg9oCk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCg9oSk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCg9oik6Eem-J7NZSmLltA" type="4001" element="_sBeb0Ck6Eem-J7NZSmLltA" source="_sCCchCk6Eem-J7NZSmLltA" target="_sCKYUCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCg9pik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCg9pyk6Eem-J7NZSmLltA" x="1" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCg9qCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCg9qSk6Eem-J7NZSmLltA" x="1" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCg9qik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCg9qyk6Eem-J7NZSmLltA" x="-1" y="-10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCg9oyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCg9pCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCg9pSk6Eem-J7NZSmLltA" points="[60, 2, -289, -10]$[269, 2, -80, -10]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCg9rCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCg9rSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCg9rik6Eem-J7NZSmLltA" type="4001" element="_sBeb1yk6Eem-J7NZSmLltA" source="_sCCciyk6Eem-J7NZSmLltA" target="_sCBOcik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCg9sik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCg9syk6Eem-J7NZSmLltA" x="8" y="36"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCg9tCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCg9tSk6Eem-J7NZSmLltA" x="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sChksCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sChksSk6Eem-J7NZSmLltA" x="-10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCg9ryk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCg9sCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCg9sSk6Eem-J7NZSmLltA" points="[34, -49, -36, 90]$[34, -90, -36, 49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sChksik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sChksyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sChktCk6Eem-J7NZSmLltA" type="4001" element="_sBfC5ik6Eem-J7NZSmLltA" source="_sCCciyk6Eem-J7NZSmLltA" target="_sCE4wCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sChkuCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sChkuSk6Eem-J7NZSmLltA" x="-29" y="15"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sChkuik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sChkuyk6Eem-J7NZSmLltA" x="3" y="-4"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sChkvCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sChkvSk6Eem-J7NZSmLltA" x="-6" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sChktSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sChktik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sChktyk6Eem-J7NZSmLltA" points="[-39, 0, 73, 41]$[-39, -11, 73, 30]$[-112, -11, 0, 30]$[-112, -41, 0, 0]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sChkvik6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sChkvyk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sChkwCk6Eem-J7NZSmLltA" type="4001" element="_sBfC7Sk6Eem-J7NZSmLltA" source="_sCCcoCk6Eem-J7NZSmLltA" target="_sCCcmSk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sChkxCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sChkxSk6Eem-J7NZSmLltA" x="12" y="-42"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sChkxik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sChkxyk6Eem-J7NZSmLltA" x="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sChkyCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sChkySk6Eem-J7NZSmLltA" x="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sChkwSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sChkwik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sChkwyk6Eem-J7NZSmLltA" points="[-1, 98, -1, -144]$[-1, 144, -1, -98]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sChkyik6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sChkyyk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sChkzCk6Eem-J7NZSmLltA" type="4001" element="_sBfp9ik6Eem-J7NZSmLltA" source="_sCDDoik6Eem-J7NZSmLltA" target="_sCK_bik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCiLwCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiLwSk6Eem-J7NZSmLltA" x="279" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCiLwik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiLwyk6Eem-J7NZSmLltA" x="80" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCiLxCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiLxSk6Eem-J7NZSmLltA" x="71" y="-15"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sChkzSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sChkzik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sChkzyk6Eem-J7NZSmLltA" points="[47, -54, -500, 543]$[47, -417, -500, 180]$[529, -417, -18, 180]$[529, -494, -18, 103]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCiLxik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCiLxyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCiLyCk6Eem-J7NZSmLltA" type="4001" element="_sBgRBik6Eem-J7NZSmLltA" source="_sCDDoik6Eem-J7NZSmLltA" target="_sCERuyk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCiLzCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiLzSk6Eem-J7NZSmLltA" x="291" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCiLzik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiLzyk6Eem-J7NZSmLltA" x="128" y="716"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCiL0Ck6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiL0Sk6Eem-J7NZSmLltA" x="138" y="-1"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCiLySk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCiLyik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCiLyyk6Eem-J7NZSmLltA" points="[65, 0, -789, 338]$[65, -307, -789, 31]$[854, -307, 0, 31]$[854, -338, 0, 0]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCiL0ik6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCiL0yk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCiL1Ck6Eem-J7NZSmLltA" type="4001" element="_sBgRDSk6Eem-J7NZSmLltA" source="_sCDDoik6Eem-J7NZSmLltA" target="_sCKYVyk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCiL2Ck6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiL2Sk6Eem-J7NZSmLltA" x="201" y="-133"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCiL2ik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiL2yk6Eem-J7NZSmLltA" x="-36" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCiL3Ck6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiL3Sk6Eem-J7NZSmLltA" x="70" y="6"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCiL1Sk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCiL1ik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCiL1yk6Eem-J7NZSmLltA" points="[-95, 55, 163, 575]$[-119, 55, 139, 575]$[-119, -489, 139, 31]$[-258, -489, 0, 31]$[-258, -520, 0, 0]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCiy0Ck6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCiy0Sk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCiy0ik6Eem-J7NZSmLltA" type="4001" element="_sBg4Fik6Eem-J7NZSmLltA" source="_sCDDqSk6Eem-J7NZSmLltA" target="_sCDDoik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCiy1ik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiy1yk6Eem-J7NZSmLltA" x="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCiy2Ck6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiy2Sk6Eem-J7NZSmLltA" x="24" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCiy2ik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiy2yk6Eem-J7NZSmLltA" x="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCiy0yk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCiy1Ck6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCiy1Sk6Eem-J7NZSmLltA" points="[9, 49, -27, -95]$[9, 90, -27, -54]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCiy3Ck6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCiy3Sk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCiy3ik6Eem-J7NZSmLltA" type="4001" element="_sBhfJik6Eem-J7NZSmLltA" source="_sCDqpCk6Eem-J7NZSmLltA" target="_sCK_Zyk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCiy4ik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiy4yk6Eem-J7NZSmLltA" x="705" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCiy5Ck6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiy5Sk6Eem-J7NZSmLltA" x="15" y="817"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCiy5ik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCiy5yk6Eem-J7NZSmLltA" x="164" y="-6"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCiy3yk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCiy4Ck6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCiy4Sk6Eem-J7NZSmLltA" points="[16, -2, -1409, 408]$[16, -291, -1409, 119]$[1425, -291, 0, 119]$[1425, -410, 0, 0]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCiy6Ck6Eem-J7NZSmLltA" id="(0.7166666666666667,0.03)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCiy6Sk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCiy6ik6Eem-J7NZSmLltA" type="4001" element="_sBhfLSk6Eem-J7NZSmLltA" source="_sCDqqyk6Eem-J7NZSmLltA" target="_sCDqpCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCjZ4Ck6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCjZ4Sk6Eem-J7NZSmLltA" x="27" y="-6"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCjZ4ik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCjZ4yk6Eem-J7NZSmLltA" x="66" y="-7"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCjZ5Ck6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCjZ5Sk6Eem-J7NZSmLltA" x="16" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCiy6yk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCiy7Ck6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCiy7Sk6Eem-J7NZSmLltA" points="[-35, 98, -79, -161]$[-35, 192, -79, -67]$[-15, 192, -59, -67]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCjZ5ik6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCjZ5yk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCjZ6Ck6Eem-J7NZSmLltA" type="4001" element="_sBiGNik6Eem-J7NZSmLltA" source="_sCERtCk6Eem-J7NZSmLltA" target="_sCHVEik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCjZ7Ck6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCjZ7Sk6Eem-J7NZSmLltA" x="60"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCjZ7ik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCjZ7yk6Eem-J7NZSmLltA" x="-4" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCjZ8Ck6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCjZ8Sk6Eem-J7NZSmLltA" x="-26" y="-10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCjZ6Sk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCjZ6ik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCjZ6yk6Eem-J7NZSmLltA" points="[29, 49, -78, -131]$[29, 83, -78, -97]$[78, 83, -29, -97]$[78, 131, -29, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCjZ8ik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCjZ8yk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCjZ9Ck6Eem-J7NZSmLltA" type="4001" element="_sBitRik6Eem-J7NZSmLltA" source="_sCERtCk6Eem-J7NZSmLltA" target="_sCGG8ik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCjZ-Ck6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCjZ-Sk6Eem-J7NZSmLltA" x="50" y="-8"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCjZ-ik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCjZ-yk6Eem-J7NZSmLltA" x="-5" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCjZ_Ck6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCjZ_Sk6Eem-J7NZSmLltA" x="-31" y="-10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCjZ9Sk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCjZ9ik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCjZ9yk6Eem-J7NZSmLltA" points="[-29, 49, 68, -125]$[-29, 75, 68, -99]$[-69, 75, 28, -99]$[-69, 125, 28, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCkA8Ck6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCkA8Sk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCkA8ik6Eem-J7NZSmLltA" type="4001" element="_sBitTSk6Eem-J7NZSmLltA" source="_sCFf3ik6Eem-J7NZSmLltA" target="_sCGuAik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCkA9ik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkA9yk6Eem-J7NZSmLltA" x="100" y="-80"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCkA-Ck6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkA-Sk6Eem-J7NZSmLltA" x="103" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCkA-ik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkA-yk6Eem-J7NZSmLltA" x="-31" y="-10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCkA8yk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCkA9Ck6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCkA9Sk6Eem-J7NZSmLltA" points="[36, -49, 190, 602]$[36, -510, 190, 141]$[-153, -510, 1, 141]$[-153, -602, 1, 49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCkA_Ck6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCkA_Sk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCkA_ik6Eem-J7NZSmLltA" type="4001" element="_sBjUVik6Eem-J7NZSmLltA" source="_sCFf5Sk6Eem-J7NZSmLltA" target="_sCFf3ik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCkBAik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkBAyk6Eem-J7NZSmLltA" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCkBBCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkBBSk6Eem-J7NZSmLltA" x="1" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCkBBik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkBByk6Eem-J7NZSmLltA" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCkA_yk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCkBACk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCkBASk6Eem-J7NZSmLltA" points="[59, 129, 22, -32]$[-23, 129, -60, -32]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCkBCCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCkBCSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCkBCik6Eem-J7NZSmLltA" type="4001" element="_sBj7Yyk6Eem-J7NZSmLltA" source="_sCGG5Ck6Eem-J7NZSmLltA" target="_sCCciyk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCkoACk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkoASk6Eem-J7NZSmLltA" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCkoAik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkoAyk6Eem-J7NZSmLltA" x="23" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCkoBCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkoBSk6Eem-J7NZSmLltA" x="-86" y="-1"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCkBCyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCkBDCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCkBDSk6Eem-J7NZSmLltA" points="[61, -14, -182, -1]$[184, -14, -59, -1]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCkoBik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCkoByk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCkoCCk6Eem-J7NZSmLltA" type="4001" element="_sBj7aik6Eem-J7NZSmLltA" source="_sCGG6yk6Eem-J7NZSmLltA" target="_sCGG5Ck6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCkoDCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkoDSk6Eem-J7NZSmLltA" x="8" y="-68"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCkoDik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkoDyk6Eem-J7NZSmLltA" x="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCkoECk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkoESk6Eem-J7NZSmLltA" x="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCkoCSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCkoCik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCkoCyk6Eem-J7NZSmLltA" points="[21, 49, -28, -95]$[21, 95, -28, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCkoEik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCkoEyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCkoFCk6Eem-J7NZSmLltA" type="4001" element="_sBkidik6Eem-J7NZSmLltA" source="_sCHVCyk6Eem-J7NZSmLltA" target="_sCB1eik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCkoGCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkoGSk6Eem-J7NZSmLltA" x="35" y="12"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCkoGik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkoGyk6Eem-J7NZSmLltA" x="25" y="2"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCkoHCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCkoHSk6Eem-J7NZSmLltA" x="-60" y="-3"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCkoFSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCkoFik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCkoFyk6Eem-J7NZSmLltA" points="[34, 98, -243, -137]$[34, 115, -243, -120]$[242, 115, -35, -120]$[242, 137, -35, -98]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sClPECk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sClPESk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sClPEik6Eem-J7NZSmLltA" type="4001" element="_sBkifSk6Eem-J7NZSmLltA" source="_sCHVCyk6Eem-J7NZSmLltA" target="_sCHVBCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sClPFik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sClPFyk6Eem-J7NZSmLltA" x="-33" y="12"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sClPGCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sClPGSk6Eem-J7NZSmLltA" x="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sClPGik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sClPGyk6Eem-J7NZSmLltA" x="-42" y="-10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sClPEyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sClPFCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sClPFSk6Eem-J7NZSmLltA" points="[-26, 49, -110, -88]$[-26, 75, -110, -62]$[46, 75, -38, -62]$[46, 88, -38, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sClPHCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sClPHSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sClPHik6Eem-J7NZSmLltA" type="4001" element="_sBlJhik6Eem-J7NZSmLltA" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCDDsCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sClPIik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sClPIyk6Eem-J7NZSmLltA" x="98" y="71"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sClPJCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sClPJSk6Eem-J7NZSmLltA" x="4" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sClPJik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sClPJyk6Eem-J7NZSmLltA" x="-29" y="71"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sClPHyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sClPICk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sClPISk6Eem-J7NZSmLltA" points="[80, 54, -219, -129]$[275, 54, -24, -129]$[275, 134, -24, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sClPKCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sClPKSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sClPKik6Eem-J7NZSmLltA" type="4001" element="_sBlwkyk6Eem-J7NZSmLltA" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCBOZCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCl2Iyk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCl2JCk6Eem-J7NZSmLltA" x="109" y="77"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCl2JSk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCl2Jik6Eem-J7NZSmLltA" x="-2" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCl2Jyk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCl2KCk6Eem-J7NZSmLltA" x="-8" y="14"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCl2ICk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCl2ISk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCl2Iik6Eem-J7NZSmLltA" points="[80, 42, -448, -141]$[480, 42, -48, -141]$[480, 134, -48, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCl2KSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCl2Kik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCl2Kyk6Eem-J7NZSmLltA" type="4001" element="_sBlwmik6Eem-J7NZSmLltA" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCCcoCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCl2Lyk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCl2MCk6Eem-J7NZSmLltA" x="242" y="20"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCl2MSk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCl2Mik6Eem-J7NZSmLltA" x="340" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCl2Myk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCl2NCk6Eem-J7NZSmLltA" x="64" y="21"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCl2LCk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCl2LSk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCl2Lik6Eem-J7NZSmLltA" points="[80, 30, -634, -81]$[685, 30, -29, -81]$[685, 62, -29, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCl2NSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCl2Nik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCl2Nyk6Eem-J7NZSmLltA" type="4001" element="_sBmXoCk6Eem-J7NZSmLltA" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCGG6yk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCmdMCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCmdMSk6Eem-J7NZSmLltA" x="469" y="28"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCmdMik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCmdMyk6Eem-J7NZSmLltA" x="656" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCmdNCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCmdNSk6Eem-J7NZSmLltA" x="68" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCl2OCk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCl2OSk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCl2Oik6Eem-J7NZSmLltA" points="[80, 22, -859, -89]$[924, 22, -15, -89]$[924, 62, -15, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCmdNik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCmdNyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCmdOCk6Eem-J7NZSmLltA" type="4001" element="_sBmXpyk6Eem-J7NZSmLltA" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCIjJik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCmdPCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCmdPSk6Eem-J7NZSmLltA" x="639" y="25"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCmdPik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCmdPyk6Eem-J7NZSmLltA" x="1100" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCmdQCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCmdQSk6Eem-J7NZSmLltA" x="45" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCmdOSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCmdOik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCmdOyk6Eem-J7NZSmLltA" points="[80, 10, -1451, -93]$[1520, 10, -11, -93]$[1520, 54, -11, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCmdQik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCmdQyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCmdRCk6Eem-J7NZSmLltA" type="4001" element="_sBm-tik6Eem-J7NZSmLltA" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCB1cyk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCmdSCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCmdSSk6Eem-J7NZSmLltA" x="764" y="39"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCmdSik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCmdSyk6Eem-J7NZSmLltA" x="1318" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCmdTCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCmdTSk6Eem-J7NZSmLltA" x="143" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCmdRSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCmdRik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCmdRyk6Eem-J7NZSmLltA" points="[80, 0, -1683, -103]$[1764, 0, 1, -103]$[1764, 54, 1, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCmdTik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnEQCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCnEQSk6Eem-J7NZSmLltA" type="4001" element="_sBnlxik6Eem-J7NZSmLltA" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCFf5Sk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCnERSk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnERik6Eem-J7NZSmLltA" x="839" y="49"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnERyk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnESCk6Eem-J7NZSmLltA" x="895" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnESSk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnESik6Eem-J7NZSmLltA" x="232" y="44"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCnEQik6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCnEQyk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCnERCk6Eem-J7NZSmLltA" points="[80, -10, -1859, -113]$[1920, -10, -19, -113]$[1920, 54, -19, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnESyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnETCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCnETSk6Eem-J7NZSmLltA" type="4001" element="_sBnlzSk6Eem-J7NZSmLltA" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCDqqyk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCnEUSk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnEUik6Eem-J7NZSmLltA" x="926" y="61"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnEUyk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnEVCk6Eem-J7NZSmLltA" x="313" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnEVSk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnEVik6Eem-J7NZSmLltA" x="27" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCnETik6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCnETyk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCnEUCk6Eem-J7NZSmLltA" points="[80, -22, -2063, -125]$[2120, -22, -23, -125]$[2120, 54, -23, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnEVyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnEWCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCnEWSk6Eem-J7NZSmLltA" type="4001" element="_sBoM1ik6Eem-J7NZSmLltA" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCDDqSk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCnEXSk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnEXik6Eem-J7NZSmLltA" x="1188" y="89"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnEXyk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnEYCk6Eem-J7NZSmLltA" x="1701" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnEYSk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnEYik6Eem-J7NZSmLltA" x="7" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCnEWik6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCnEWyk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCnEXCk6Eem-J7NZSmLltA" points="[80, -34, -2439, -153]$[2478, -34, -41, -153]$[2478, 70, -41, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnrUCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnrUSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCnrUik6Eem-J7NZSmLltA" type="4001" element="_sBoz5ik6Eem-J7NZSmLltA" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCHVCyk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCnrVik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnrVyk6Eem-J7NZSmLltA" x="1314" y="105"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnrWCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnrWSk6Eem-J7NZSmLltA" x="1761" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnrWik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnrWyk6Eem-J7NZSmLltA" x="14" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCnrUyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCnrVCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCnrVSk6Eem-J7NZSmLltA" points="[80, -46, -2686, -173]$[2736, -46, -30, -173]$[2736, 78, -30, -49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnrXCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnrXSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCnrXik6Eem-J7NZSmLltA" type="4001" element="_sBpa8Ck6Eem-J7NZSmLltA" source="_sCH8Gyk6Eem-J7NZSmLltA" target="_sCFf0Ck6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCnrYik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnrYyk6Eem-J7NZSmLltA" x="21" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnrZCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnrZSk6Eem-J7NZSmLltA" x="122" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnrZik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnrZyk6Eem-J7NZSmLltA" x="6" y="-10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCnrXyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCnrYCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCnrYSk6Eem-J7NZSmLltA" points="[80, 56, -311, -50]$[323, 56, -68, -50]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnraCk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCnraSk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCnraik6Eem-J7NZSmLltA" type="4001" element="_sBpa9yk6Eem-J7NZSmLltA" source="_sCIjJik6Eem-J7NZSmLltA" target="_sCH8Iik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCnrbik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnrbyk6Eem-J7NZSmLltA" x="19" y="-66"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnrcCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnrcSk6Eem-J7NZSmLltA" x="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCnrcik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCnrcyk6Eem-J7NZSmLltA" x="7"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCnrayk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCnrbCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCnrbSk6Eem-J7NZSmLltA" points="[44, 98, 0, -152]$[44, 152, 0, -98]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCoSYCk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCoSYSk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCoSYik6Eem-J7NZSmLltA" type="4001" element="_sBqCBik6Eem-J7NZSmLltA" source="_sCJKMyk6Eem-J7NZSmLltA" target="_sCJxRyk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCoSZik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCoSZyk6Eem-J7NZSmLltA" x="-165" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCoSaCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCoSaSk6Eem-J7NZSmLltA" x="152" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCoSaik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCoSayk6Eem-J7NZSmLltA" x="-113" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCoSYyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCoSZCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCoSZSk6Eem-J7NZSmLltA" points="[59, 7, -360, 406]$[439, 7, 20, 406]$[439, -312, 20, 87]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCoSbCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCoSbSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCoSbik6Eem-J7NZSmLltA" type="4001" element="_sBqpFik6Eem-J7NZSmLltA" source="_sCJKOik6Eem-J7NZSmLltA" target="_sCJKMyk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCoScik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCoScyk6Eem-J7NZSmLltA" x="41" y="44"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCoSdCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCoSdSk6Eem-J7NZSmLltA" x="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCoSdik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCoSdyk6Eem-J7NZSmLltA" x="-10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCoSbyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCoScCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCoScSk6Eem-J7NZSmLltA" points="[12, 0, 0, 111]$[12, -111, 0, 0]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCoSeCk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCoSeSk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCoSeik6Eem-J7NZSmLltA" type="4001" element="_sBrQIyk6Eem-J7NZSmLltA" source="_sCJxQCk6Eem-J7NZSmLltA" target="_sCJKQSk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCoSfik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCoSfyk6Eem-J7NZSmLltA" x="41" y="-73"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCoSgCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCoSgSk6Eem-J7NZSmLltA" x="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCoSgik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCoSgyk6Eem-J7NZSmLltA" x="-11" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCoSeyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCoSfCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCoSfSk6Eem-J7NZSmLltA" points="[-25, -49, -26, 160]$[-25, -160, -26, 49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCo5cCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCo5cSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCo5cik6Eem-J7NZSmLltA" type="4001" element="_sBrQKik6Eem-J7NZSmLltA" source="_sCJxTik6Eem-J7NZSmLltA" target="_sCDDsCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCo5dik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCo5dyk6Eem-J7NZSmLltA" x="133" y="-7"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCo5eCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCo5eSk6Eem-J7NZSmLltA" x="76" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCo5eik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCo5eyk6Eem-J7NZSmLltA" x="-31" y="-9"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCo5cyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCo5dCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCo5dSk6Eem-J7NZSmLltA" points="[80, -50, -283, 119]$[339, -50, -24, 119]$[339, -120, -24, 49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCo5fCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCo5fSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCo5fik6Eem-J7NZSmLltA" type="4001" element="_sBr3Nik6Eem-J7NZSmLltA" source="_sCJxTik6Eem-J7NZSmLltA" target="_sCGG6yk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCo5gik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCo5gyk6Eem-J7NZSmLltA" x="299" y="-141"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCo5hCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCo5hSk6Eem-J7NZSmLltA" x="224" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCo5hik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCo5hyk6Eem-J7NZSmLltA" x="-118" y="-10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCo5fyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCo5gCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCo5gSk6Eem-J7NZSmLltA" points="[80, -38, -923, 203]$[964, -38, -39, 203]$[964, -192, -39, 49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCo5iCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCo5iSk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCo5iik6Eem-J7NZSmLltA" type="4001" element="_sBseQCk6Eem-J7NZSmLltA" source="_sCJxTik6Eem-J7NZSmLltA" target="_sCIjJik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCpggCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCpggSk6Eem-J7NZSmLltA" x="587" y="-163"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCpggik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCpggyk6Eem-J7NZSmLltA" x="1152" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCpghCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCpghSk6Eem-J7NZSmLltA" x="9" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCo5iyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCo5jCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCo5jSk6Eem-J7NZSmLltA" points="[80, -22, -1515, 227]$[1552, -22, -43, 227]$[1552, -200, -43, 49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCpghik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCpghyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCpgiCk6Eem-J7NZSmLltA" type="4001" element="_sBseRyk6Eem-J7NZSmLltA" source="_sCJxTik6Eem-J7NZSmLltA" target="_sCB1cyk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCpgjCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCpgjSk6Eem-J7NZSmLltA" x="704" y="-175"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCpgjik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCpgjyk6Eem-J7NZSmLltA" x="386" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCpgkCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCpgkSk6Eem-J7NZSmLltA" x="8" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCpgiSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCpgiik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCpgiyk6Eem-J7NZSmLltA" points="[80, -10, -1747, 239]$[1780, -10, -47, 239]$[1780, -200, -47, 49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCpgkik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCpgkyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCpglCk6Eem-J7NZSmLltA" type="4001" element="_sBtFVik6Eem-J7NZSmLltA" source="_sCJxTik6Eem-J7NZSmLltA" target="_sCK_YCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCpgmCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCpgmSk6Eem-J7NZSmLltA" x="1007" y="2"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCpgmik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCpgmyk6Eem-J7NZSmLltA" x="365" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCpgnCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCpgnSk6Eem-J7NZSmLltA" x="93" y="-5"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCpglSk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCpglik6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCpglyk6Eem-J7NZSmLltA" points="[80, 0, -2323, 241]$[2368, 0, -35, 241]$[2368, -192, -35, 49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCpgnik6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCqHkCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCqHkSk6Eem-J7NZSmLltA" type="4001" element="_sBtsZik6Eem-J7NZSmLltA" source="_sCJxTik6Eem-J7NZSmLltA" target="_sCJxQCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCqHlSk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqHlik6Eem-J7NZSmLltA" x="1628" y="-56"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCqHlyk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqHmCk6Eem-J7NZSmLltA" x="-84" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCqHmSk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqHmik6Eem-J7NZSmLltA" x="-605" y="-10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCqHkik6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCqHkyk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCqHlCk6Eem-J7NZSmLltA" points="[80, 97, -3213, 74]$[3252, 97, -41, 74]$[3252, 23, -41, 0]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCqHmyk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCqHnCk6Eem-J7NZSmLltA" id="(0.49645390070921985,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCqHnSk6Eem-J7NZSmLltA" type="4001" element="_sBtsbSk6Eem-J7NZSmLltA" source="_sCJxTik6Eem-J7NZSmLltA" target="_sCJKOik6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCqHoSk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqHoik6Eem-J7NZSmLltA" x="1733" y="-83"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCqHoyk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqHpCk6Eem-J7NZSmLltA" x="2735" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCqHpSk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqHpik6Eem-J7NZSmLltA" x="-137" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCqHnik6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCqHnyk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCqHoCk6Eem-J7NZSmLltA" points="[80, 62, -3459, 150]$[3540, 62, 1, 150]$[3540, -39, 1, 49]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCqHpyk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCqHqCk6Eem-J7NZSmLltA" id="(0.5,0.5)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCqHqSk6Eem-J7NZSmLltA" type="4001" element="_sBuTdik6Eem-J7NZSmLltA" source="_sCKYUCk6Eem-J7NZSmLltA" target="_sCAnUCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCqHrSk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqHrik6Eem-J7NZSmLltA" x="-2" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCqHryk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqHsCk6Eem-J7NZSmLltA" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCqHsSk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqHsik6Eem-J7NZSmLltA" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCqHqik6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCqHqyk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCqHrCk6Eem-J7NZSmLltA" points="[80, 48, -272, -50]$[272, 48, -80, -50]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCquoCk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCquoSk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCquoik6Eem-J7NZSmLltA" type="4001" element="_sBu6hik6Eem-J7NZSmLltA" source="_sCK_YCk6Eem-J7NZSmLltA" target="_sCDqpCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCqupik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqupyk6Eem-J7NZSmLltA" x="10" y="14"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCquqCk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCquqSk6Eem-J7NZSmLltA" x="55" y="3"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCquqik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCquqyk6Eem-J7NZSmLltA" x="-41" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCquoyk6Eem-J7NZSmLltA" routing="Rectilinear"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCqupCk6Eem-J7NZSmLltA" fontColor="7490599" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCqupSk6Eem-J7NZSmLltA" points="[0, 98, 152, -153]$[0, 191, 152, -60]$[-93, 191, 59, -60]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCqurCk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCqurSk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
-        </edges>
         <edges xmi:type="notation:Edge" xmi:id="_sCqurik6Eem-J7NZSmLltA" type="4001" element="_sBzL8Ck6Eem-J7NZSmLltA" source="_sCAnUCk6Eem-J7NZSmLltA" target="_sCMNgCk6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCqusik6Eem-J7NZSmLltA" type="6001">
             <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCqusyk6Eem-J7NZSmLltA" y="-10"/>
@@ -1927,22 +1173,6 @@
           <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCquuCk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
           <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCquuSk6Eem-J7NZSmLltA" id="(0.4968944099378882,1.0)"/>
         </edges>
-        <edges xmi:type="notation:Edge" xmi:id="_sCquuik6Eem-J7NZSmLltA" type="4001" element="_sBzzBik6Eem-J7NZSmLltA" source="_sCBOZCk6Eem-J7NZSmLltA" target="_sCMNgCk6Eem-J7NZSmLltA">
-          <children xmi:type="notation:Node" xmi:id="_sCrVsCk6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCrVsSk6Eem-J7NZSmLltA" y="-10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCrVsik6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCrVsyk6Eem-J7NZSmLltA" y="10"/>
-          </children>
-          <children xmi:type="notation:Node" xmi:id="_sCrVtCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCrVtSk6Eem-J7NZSmLltA" y="10"/>
-          </children>
-          <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCquuyk6Eem-J7NZSmLltA" routing="Tree"/>
-          <styles xmi:type="notation:FontStyle" xmi:id="_sCquvCk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCquvSk6Eem-J7NZSmLltA" points="[0, 0, -517, 60]$[517, -60, 0, 0]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCrVtik6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
-          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCrVtyk6Eem-J7NZSmLltA" id="(0.4968944099378882,1.0)"/>
-        </edges>
         <edges xmi:type="notation:Edge" xmi:id="_sCrVuCk6Eem-J7NZSmLltA" type="4001" element="_sB0aEyk6Eem-J7NZSmLltA" source="_sCB1eik6Eem-J7NZSmLltA" target="_sCB1jyk6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCrVvCk6Eem-J7NZSmLltA" type="6001">
             <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCrVvSk6Eem-J7NZSmLltA" y="-10"/>
@@ -2185,18 +1415,18 @@
         </edges>
         <edges xmi:type="notation:Edge" xmi:id="_sCuZGik6Eem-J7NZSmLltA" type="4001" element="_sB22ZCk6Eem-J7NZSmLltA" source="_sCJKQSk6Eem-J7NZSmLltA" target="_sCDqpCk6Eem-J7NZSmLltA">
           <children xmi:type="notation:Node" xmi:id="_sCuZHik6Eem-J7NZSmLltA" type="6001">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCuZHyk6Eem-J7NZSmLltA" y="-10"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCuZHyk6Eem-J7NZSmLltA" x="50" y="-10"/>
           </children>
           <children xmi:type="notation:Node" xmi:id="_sCvAECk6Eem-J7NZSmLltA" type="6002">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCvAESk6Eem-J7NZSmLltA" x="-33" y="10"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCvAESk6Eem-J7NZSmLltA" x="83" y="54"/>
           </children>
           <children xmi:type="notation:Node" xmi:id="_sCvAEik6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCvAEyk6Eem-J7NZSmLltA" x="-79" y="10"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCvAEyk6Eem-J7NZSmLltA" x="-159" y="10"/>
           </children>
           <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCuZGyk6Eem-J7NZSmLltA" routing="Tree"/>
           <styles xmi:type="notation:FontStyle" xmi:id="_sCuZHCk6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCuZHSk6Eem-J7NZSmLltA" points="[0, 98, 1043, -209]$[0, 436, 1043, 129]$[-1042, 436, 1, 129]$[-1042, 307, 1, 0]"/>
-          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCvAFCk6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCuZHSk6Eem-J7NZSmLltA" points="[0, 5, 1101, -209]$[0, 335, 1101, 121]$[-1132, 335, -31, 121]$[-1132, 214, -31, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCvAFCk6Eem-J7NZSmLltA" id="(0.9166666666666666,0.97)"/>
           <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCvAFSk6Eem-J7NZSmLltA" id="(0.5,1.0)"/>
         </edges>
         <edges xmi:type="notation:Edge" xmi:id="_sCvAFik6Eem-J7NZSmLltA" type="4001" element="_sB3dZik6Eem-J7NZSmLltA" source="_sCJxRyk6Eem-J7NZSmLltA" target="_sCFf1yk6Eem-J7NZSmLltA">
@@ -2255,11 +1485,11 @@
             <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCvnMyk6Eem-J7NZSmLltA" x="3" y="10"/>
           </children>
           <children xmi:type="notation:Node" xmi:id="_sCvnNCk6Eem-J7NZSmLltA" type="6003">
-            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCvnNSk6Eem-J7NZSmLltA" x="-15" y="-23"/>
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sCvnNSk6Eem-J7NZSmLltA" x="-19" y="-19"/>
           </children>
           <styles xmi:type="notation:ConnectorStyle" xmi:id="_sCvnLSk6Eem-J7NZSmLltA" routing="Tree"/>
           <styles xmi:type="notation:FontStyle" xmi:id="_sCvnLik6Eem-J7NZSmLltA" fontName=".AppleSystemUIFont" fontHeight="8"/>
-          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCvnLyk6Eem-J7NZSmLltA" points="[0, 0, 123, 1019]$[0, -984, 123, 35]$[-141, -984, -18, 35]$[-141, -1018, -18, 1]"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sCvnLyk6Eem-J7NZSmLltA" points="[0, 0, 123, 1019]$[0, -980, 123, 39]$[-141, -980, -18, 39]$[-141, -1018, -18, 1]"/>
           <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCvnNik6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
           <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCvnNyk6Eem-J7NZSmLltA" id="(0.6149068322981367,0.99)"/>
         </edges>
@@ -2327,85 +1557,754 @@
           <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCw1Rik6Eem-J7NZSmLltA" id="(0.5,0.0)"/>
           <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sCw1Ryk6Eem-J7NZSmLltA" id="(0.496551724137931,1.0)"/>
         </edges>
-      </data>
-    </ownedAnnotationEntries>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_OZECk6Eem-J7NZSmLltA" name="AppliesToType" tooltipText="" outgoingEdges="_sBzL8Ck6Eem-J7NZSmLltA" incomingEdges="_sBuTdik6Eem-J7NZSmLltA" width="12" height="10">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//AppliesToType"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//AppliesToType"/>
-      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
-      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
-      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
-      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_r_Q1UCk6Eem-J7NZSmLltA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
-        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
-      <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAXolyk6Eem-J7NZSmLltA" name="id : EString" tooltipText="">
-        <target xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/id"/>
-        <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/id"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAYPoSk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
-        </ownedStyle>
-        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
-      </ownedElements>
-      <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAY2sCk6Eem-J7NZSmLltA" name="publicationStage : PubStage = IS" tooltipText="">
-        <target xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/publicationStage"/>
-        <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/publicationStage"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAY2sSk6Eem-J7NZSmLltA" labelAlignment="LEFT">
-          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
-        </ownedStyle>
-        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
-      </ownedElements>
-      <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAY2sik6Eem-J7NZSmLltA" name="revision : EString = A" tooltipText="">
-        <target xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/revision"/>
-        <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/revision"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAY2syk6Eem-J7NZSmLltA" labelAlignment="LEFT">
-          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
-        </ownedStyle>
-        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
-      </ownedElements>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_SDcCk6Eem-J7NZSmLltA" name="DependsOnType" tooltipText="" outgoingEdges="_sBzzBik6Eem-J7NZSmLltA" incomingEdges="_sBlwkyk6Eem-J7NZSmLltA" width="12" height="10">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//DependsOnType"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DependsOnType"/>
-      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
-      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
-      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
-      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_r_SqgCk6Eem-J7NZSmLltA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
-        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
-      <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAZdwCk6Eem-J7NZSmLltA" name="id : EString" tooltipText="">
-        <target xmi:type="ecore:EAttribute" href="nsd.ecore#//DependsOnType/id"/>
-        <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//DependsOnType/id"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAZdwSk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
-        </ownedStyle>
-        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
-      </ownedElements>
-      <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAZdwik6Eem-J7NZSmLltA" name="publicationStage : PubStage = IS" tooltipText="">
-        <target xmi:type="ecore:EAttribute" href="nsd.ecore#//DependsOnType/publicationStage"/>
-        <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//DependsOnType/publicationStage"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAaE0Ck6Eem-J7NZSmLltA" labelAlignment="LEFT">
-          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
-        </ownedStyle>
-        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
-      </ownedElements>
-      <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAaE0Sk6Eem-J7NZSmLltA" name="revision : EString = A" tooltipText="">
-        <target xmi:type="ecore:EAttribute" href="nsd.ecore#//DependsOnType/revision"/>
-        <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//DependsOnType/revision"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAaE0ik6Eem-J7NZSmLltA" labelAlignment="LEFT">
-          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
-        </ownedStyle>
-        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
-      </ownedElements>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_Sqgik6Eem-J7NZSmLltA" name="DocumentRoot" tooltipText="" outgoingEdges="_sBaKYCk6Eem-J7NZSmLltA _sBaxeSk6Eem-J7NZSmLltA _sBbYhik6Eem-J7NZSmLltA _sBb_lik6Eem-J7NZSmLltA _sBcmpik6Eem-J7NZSmLltA" width="12" height="10">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//DocumentRoot"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DocumentRoot"/>
-      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
-      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
-      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
-      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_r_T4oCk6Eem-J7NZSmLltA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <edges xmi:type="notation:Edge" xmi:id="_3MxHgCpWEem2soT2TDjIcQ" type="4001" element="_3MNG0CpWEem2soT2TDjIcQ" source="_sCHVCyk6Eem-J7NZSmLltA" target="_sCH8FCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3MxHhCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MxHhSpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3MxHhipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MxHhypWEem2soT2TDjIcQ" x="187" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3MxHiCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MxHiSpWEem2soT2TDjIcQ" x="13" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3MxHgSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3MxHgipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3MxHgypWEem2soT2TDjIcQ" points="[1, -49, 2767, 82]$[1, -189, 2767, -58]$[-2686, -189, 80, -58]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3MxukCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3MxukSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3MxukipWEem2soT2TDjIcQ" type="4001" element="_3MNt6SpWEem2soT2TDjIcQ" source="_sCH8Iik6Eem-J7NZSmLltA" target="_sCIjJik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3MxulipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MxulypWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3MxumCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MxumSpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3MxumipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MxumypWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3MxukypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3MxulCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3MxulSpWEem2soT2TDjIcQ" points="[0, 0, 44, 152]$[-44, -152, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3MyVoCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3MyVoSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3MyVoipWEem2soT2TDjIcQ" type="4001" element="_3MOU9ipWEem2soT2TDjIcQ" source="_sCJKMyk6Eem-J7NZSmLltA" target="_sCJxRyk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3MyVpipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MyVpypWEem2soT2TDjIcQ" x="-239" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3MyVqCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MyVqSpWEem2soT2TDjIcQ" x="-65" y="-12"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3MyVqipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MyVqypWEem2soT2TDjIcQ" x="95" y="-68"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3MyVoypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3MyVpCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3MyVpSpWEem2soT2TDjIcQ" points="[59, 7, -360, 406]$[477, 7, 58, 406]$[477, -312, 58, 87]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3My8sCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3My8sSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3My8sipWEem2soT2TDjIcQ" type="4001" element="_3MO8CSpWEem2soT2TDjIcQ" source="_sCDqpCk6Eem-J7NZSmLltA" target="_sCK_Zyk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3My8tipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3My8typWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3My8uCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3My8uSpWEem2soT2TDjIcQ" x="65" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3My8uipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3My8uypWEem2soT2TDjIcQ" x="289" y="53"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3My8sypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3My8tCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3My8tSpWEem2soT2TDjIcQ" points="[1, 49, -1449, 625]$[1, 88, -1449, 664]$[1449, 88, -1, 664]$[1449, -457, -1, 119]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3My8vCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3My8vSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3My8vipWEem2soT2TDjIcQ" type="4001" element="_3MPjFipWEem2soT2TDjIcQ" source="_sCH8FCk6Eem-J7NZSmLltA" target="_sCIjJik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3My8wipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3My8wypWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3MzjwCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MzjwSpWEem2soT2TDjIcQ" x="-5" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3MzjwipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MzjwypWEem2soT2TDjIcQ" x="-114" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3My8vypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3My8wCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3My8wSpWEem2soT2TDjIcQ" points="[80, 0, -1451, -107]$[1532, 0, 1, -107]$[1532, 58, 1, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3MzjxCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3MzjxSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3MzjxipWEem2soT2TDjIcQ" type="4001" element="_3MQKJipWEem2soT2TDjIcQ" source="_sCJKQSk6Eem-J7NZSmLltA" target="_sCJxQCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3MzjyipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MzjyypWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3MzjzCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MzjzSpWEem2soT2TDjIcQ" x="-2" y="74"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3MzjzipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3MzjzypWEem2soT2TDjIcQ" x="7" y="-80"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3MzjxypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3MzjyCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3MzjySpWEem2soT2TDjIcQ" points="[-17, 49, 0, -160]$[-17, 160, 0, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3Mzj0CpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3Mzj0SpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M0K0CpWEem2soT2TDjIcQ" type="4001" element="_3MQxNipWEem2soT2TDjIcQ" source="_sCFf3ik6Eem-J7NZSmLltA" target="_sCFf5Sk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M0K1CpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M0K1SpWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M0K1ipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M0K1ypWEem2soT2TDjIcQ" x="1" y="-45"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M0K2CpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M0K2SpWEem2soT2TDjIcQ" y="-55"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M0K0SpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M0K0ipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M0K0ypWEem2soT2TDjIcQ" points="[0, 0, 36, 161]$[-36, -161, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M0K2ipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M0K2ypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M0K3CpWEem2soT2TDjIcQ" type="4001" element="_3MRYQypWEem2soT2TDjIcQ" source="_sCHVBCk6Eem-J7NZSmLltA" target="_sCHVCyk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M0K4CpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M0K4SpWEem2soT2TDjIcQ" x="-10" y="2"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M0K4ipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M0K4ypWEem2soT2TDjIcQ" x="-2" y="-38"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M0K5CpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M0K5SpWEem2soT2TDjIcQ" x="-1" y="-40"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M0K3SpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M0K3ipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M0K3ypWEem2soT2TDjIcQ" points="[-54, -49, 30, 88]$[-54, -88, 30, 49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M0x4CpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M0x4SpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M0x4ipWEem2soT2TDjIcQ" type="4001" element="_3MR_VipWEem2soT2TDjIcQ" source="_sCDqqyk6Eem-J7NZSmLltA" target="_sCH8FCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M0x5ipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M0x5ypWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M0x6CpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M0x6SpWEem2soT2TDjIcQ" x="143" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M0x6ipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M0x6ypWEem2soT2TDjIcQ" x="9" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M0x4ypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M0x5CpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M0x5SpWEem2soT2TDjIcQ" points="[1, -49, 2144, 58]$[1, -141, 2144, -34]$[-2063, -141, 80, -34]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M0x7CpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M0x7SpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M0x7ipWEem2soT2TDjIcQ" type="4001" element="_3MSmYCpWEem2soT2TDjIcQ" source="_sCGG6yk6Eem-J7NZSmLltA" target="_sCH8FCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M0x8ipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M0x8ypWEem2soT2TDjIcQ" x="1" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M1Y8CpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M1Y8SpWEem2soT2TDjIcQ" x="112" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M1Y8ipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M1Y8ypWEem2soT2TDjIcQ" x="4" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M0x7ypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M0x8CpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M0x8SpWEem2soT2TDjIcQ" points="[1, -49, 940, 66]$[1, -105, 940, 10]$[-859, -105, 80, 10]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M1Y9CpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M1Y9SpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M1Y9ipWEem2soT2TDjIcQ" type="4001" element="_3MSmZypWEem2soT2TDjIcQ" source="_sCERtCk6Eem-J7NZSmLltA" target="_sCGG8ik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M1Y-ipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M1Y-ypWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M1Y_CpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M1Y_SpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M1Y_ipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M1Y_ypWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M1Y9ypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M1Y-CpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M1Y-SpWEem2soT2TDjIcQ" points="[0, 0, 112, -174]$[-112, 174, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M1ZACpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M1ZASpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M2AACpWEem2soT2TDjIcQ" type="4001" element="_3MTNdipWEem2soT2TDjIcQ" source="_sCB1cyk6Eem-J7NZSmLltA" target="_sCH8FCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M2ABCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M2ABSpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M2ABipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M2ABypWEem2soT2TDjIcQ" x="122" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M2ACCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M2ACSpWEem2soT2TDjIcQ" x="6" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M2AASpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M2AAipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M2AAypWEem2soT2TDjIcQ" points="[1, -49, 1764, 58]$[1, -117, 1764, -10]$[-1683, -117, 80, -10]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M2ACipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M2ACypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M2ADCpWEem2soT2TDjIcQ" type="4001" element="_3MT0hipWEem2soT2TDjIcQ" source="_sCB1jyk6Eem-J7NZSmLltA" target="_sCERwik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M2AECpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M2AESpWEem2soT2TDjIcQ" x="-15" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M2AEipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M2AEypWEem2soT2TDjIcQ" x="-59" y="-44"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M2nECpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M2nESpWEem2soT2TDjIcQ" x="59" y="41"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M2ADSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M2ADipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M2ADypWEem2soT2TDjIcQ" points="[-34, -49, 271, 364]$[-34, -164, 271, 249]$[-235, -164, 70, 249]$[-235, -310, 70, 103]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M2nEipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M2nEypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M2nFCpWEem2soT2TDjIcQ" type="4001" element="_3MUbkypWEem2soT2TDjIcQ" source="_sCCciyk6Eem-J7NZSmLltA" target="_sCGG5Ck6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M2nGCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M2nGSpWEem2soT2TDjIcQ" x="-19" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M2nGipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M2nGypWEem2soT2TDjIcQ" x="30" y="-12"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M2nHCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M2nHSpWEem2soT2TDjIcQ" x="-29" y="8"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M2nFSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M2nFipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M2nFypWEem2soT2TDjIcQ" points="[-59, 3, 184, 28]$[-121, 3, 122, 28]$[-121, -29, 122, -4]$[-182, -29, 61, -4]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M3OICpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M3OISpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M3OIipWEem2soT2TDjIcQ" type="4001" element="_3MVCoCpWEem2soT2TDjIcQ" source="_sCJKMyk6Eem-J7NZSmLltA" target="_sCJKOik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M31MCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M31MSpWEem2soT2TDjIcQ" x="10" y="-3"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M4cQCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M4cQSpWEem2soT2TDjIcQ" x="-10" y="-42"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M4cQipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M4cQypWEem2soT2TDjIcQ" x="4" y="-53"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M3OIypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M3OJCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M3OJSpWEem2soT2TDjIcQ" points="[2, 49, 2, -160]$[2, 160, 2, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M4cRCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M4cRSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M4cRipWEem2soT2TDjIcQ" type="4001" element="_3MVpsCpWEem2soT2TDjIcQ" source="_sCDDoik6Eem-J7NZSmLltA" target="_sCERuyk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M4cSipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5DUCpWEem2soT2TDjIcQ" x="-21" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M5DUSpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5DUipWEem2soT2TDjIcQ" x="-154" y="30"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M5DUypWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5DVCpWEem2soT2TDjIcQ" x="110" y="13"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M4cRypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M4cSCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M4cSSpWEem2soT2TDjIcQ" points="[85, -54, -769, 489]$[85, -445, -769, 98]$[765, -445, -89, 98]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M5DVSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M5DVipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M5DVypWEem2soT2TDjIcQ" type="4001" element="_3MVptypWEem2soT2TDjIcQ" source="_sCIjJik6Eem-J7NZSmLltA" target="_sCJxTik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M5DWypWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5DXCpWEem2soT2TDjIcQ" x="-22" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M5DXSpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5DXipWEem2soT2TDjIcQ" x="226" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M5DXypWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5DYCpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M5DWCpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M5DWSpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M5DWipWEem2soT2TDjIcQ" points="[-39, 49, 1556, -200]$[-39, 255, 1556, 6]$[-1515, 255, 80, 6]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M5DYSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M5DYipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M5DYypWEem2soT2TDjIcQ" type="4001" element="_3MWQxipWEem2soT2TDjIcQ" source="_sCJxQCk6Eem-J7NZSmLltA" target="_sCJxTik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M5DZypWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5DaCpWEem2soT2TDjIcQ" x="-10" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M5DaSpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5DaipWEem2soT2TDjIcQ" x="127" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M5qYCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5qYSpWEem2soT2TDjIcQ" x="8" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M5DZCpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M5DZSpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M5DZipWEem2soT2TDjIcQ" points="[1, 49, 3278, -39]$[1, 130, 3278, 42]$[-3197, 130, 80, 42]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M5qYipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M5qYypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M5qZCpWEem2soT2TDjIcQ" type="4001" element="_3MW31ipWEem2soT2TDjIcQ" source="_sCDDsCk6Eem-J7NZSmLltA" target="_sCJxTik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M5qaCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5qaSpWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M5qaipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5qaypWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M5qbCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5qbSpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M5qZSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M5qZipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M5qZypWEem2soT2TDjIcQ" points="[0, 0, 384, -156]$[-384, 156, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M5qbipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M5qbypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M5qcCpWEem2soT2TDjIcQ" type="4001" element="_3MXe4CpWEem2soT2TDjIcQ" source="_sCDqpCk6Eem-J7NZSmLltA" target="_sCDqqyk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M5qdCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5qdSpWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M5qdipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5qdypWEem2soT2TDjIcQ" x="1" y="-65"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M5qeCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M5qeSpWEem2soT2TDjIcQ" x="8" y="-64"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M5qcSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M5qcipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M5qcypWEem2soT2TDjIcQ" points="[0, 0, 44, 161]$[-44, -161, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M5qeipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M5qeypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M5qfCpWEem2soT2TDjIcQ" type="4001" element="_3MXe5ypWEem2soT2TDjIcQ" source="_sCFf5Sk6Eem-J7NZSmLltA" target="_sCH8FCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M6RcCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M6RcSpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M6RcipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M6RcypWEem2soT2TDjIcQ" x="132" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M6RdCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M6RdSpWEem2soT2TDjIcQ" x="8" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M5qfSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M5qfipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M5qfypWEem2soT2TDjIcQ" points="[1, -49, 1940, 58]$[1, -129, 1940, -22]$[-1859, -129, 80, -22]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M6RdipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M6RdypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M6ReCpWEem2soT2TDjIcQ" type="4001" element="_3MYF9ipWEem2soT2TDjIcQ" source="_sCBOeSk6Eem-J7NZSmLltA" target="_sCB1cyk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M6RfCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M6RfSpWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M6RfipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M6RfypWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M6RgCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M6RgSpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M6ReSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M6ReipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M6ReypWEem2soT2TDjIcQ" points="[0, 0, 48, 161]$[-48, -161, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M6RgipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M6RgypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M6RhCpWEem2soT2TDjIcQ" type="4001" element="_3MYtAypWEem2soT2TDjIcQ" source="_sCCchCk6Eem-J7NZSmLltA" target="_sCKYUCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M6RiCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M6RiSpWEem2soT2TDjIcQ" x="10" y="-3"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M6RiipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M6RiypWEem2soT2TDjIcQ" x="1" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M6RjCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M6RjSpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M6RhSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M6RhipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M6RhypWEem2soT2TDjIcQ" points="[59, -9, -290, -13]$[269, -9, -80, -13]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M6RjipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M64gCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M64gSpWEem2soT2TDjIcQ" type="4001" element="_3MZUFipWEem2soT2TDjIcQ" source="_sCDDoik6Eem-J7NZSmLltA" target="_sCKYVyk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M64hSpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M64hipWEem2soT2TDjIcQ" x="135" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M64hypWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M64iCpWEem2soT2TDjIcQ" x="-103" y="-29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M64iSpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M64iipWEem2soT2TDjIcQ" x="103" y="-59"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M64gipWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M64gypWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M64hCpWEem2soT2TDjIcQ" points="[29, -54, 287, 583]$[29, -423, 287, 214]$[-233, -423, 25, 214]$[-233, -574, 25, 63]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M64iypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M64jCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M64jSpWEem2soT2TDjIcQ" type="4001" element="_3MZ7JipWEem2soT2TDjIcQ" source="_sCB1eik6Eem-J7NZSmLltA" target="_sCHVCyk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M64kSpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M64kipWEem2soT2TDjIcQ" x="45" y="-2"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M64kypWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M64lCpWEem2soT2TDjIcQ" x="-21" y="-43"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M64lSpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M64lipWEem2soT2TDjIcQ" x="-2" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M64jipWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M64jypWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M64kCpWEem2soT2TDjIcQ" points="[-34, -49, 243, 88]$[-34, -94, 243, 43]$[-218, -94, 59, 43]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M64lypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M64mCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M64mSpWEem2soT2TDjIcQ" type="4001" element="_3MaiNipWEem2soT2TDjIcQ" source="_sCDDoik6Eem-J7NZSmLltA" target="_sCDDqSk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M64nSpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M64nipWEem2soT2TDjIcQ" x="-12" y="15"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M7fkCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M7fkSpWEem2soT2TDjIcQ" x="-6" y="-33"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M7fkipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M7fkypWEem2soT2TDjIcQ" x="1" y="-38"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M64mipWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M64mypWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M64nCpWEem2soT2TDjIcQ" points="[-59, -54, -15, 114]$[-59, -75, -15, 93]$[-79, -75, -35, 93]$[-79, -119, -35, 49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M7flCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M7flSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M7flipWEem2soT2TDjIcQ" type="4001" element="_3MbJQypWEem2soT2TDjIcQ" source="_sCGG6yk6Eem-J7NZSmLltA" target="_sCJxTik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M7fmipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M7fmypWEem2soT2TDjIcQ" x="-20" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M7fnCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M7fnSpWEem2soT2TDjIcQ" x="16" y="177"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M7fnipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M7fnypWEem2soT2TDjIcQ" x="-1" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M7flypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M7fmCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M7fmSpWEem2soT2TDjIcQ" points="[-43, 49, 960, -192]$[-43, 235, 960, -6]$[-923, 235, 80, -6]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M7foCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M7foSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M7foipWEem2soT2TDjIcQ" type="4001" element="_3MbwUCpWEem2soT2TDjIcQ" source="_sCCcmSk6Eem-J7NZSmLltA" target="_sCCcoCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M7fpipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M7fpypWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M7fqCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M7fqSpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M7fqipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M7fqypWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M7foypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M7fpCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M7fpSpWEem2soT2TDjIcQ" points="[0, 0, 0, 144]$[0, -144, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M7frCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M7frSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M8GoCpWEem2soT2TDjIcQ" type="4001" element="_3MbwVypWEem2soT2TDjIcQ" source="_sCJxTik6Eem-J7NZSmLltA" target="_sCK_YCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M8GpCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8GpSpWEem2soT2TDjIcQ" x="-17" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M8GpipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8GpypWEem2soT2TDjIcQ" x="-12" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M8GqCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8GqSpWEem2soT2TDjIcQ" x="-295" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M8GoSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M8GoipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M8GoypWEem2soT2TDjIcQ" points="[80, 30, -2323, 296]$[2404, 30, 1, 296]$[2404, -217, 1, 49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M8GqipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M8GqypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M8GrCpWEem2soT2TDjIcQ" type="4001" element="_3McXZipWEem2soT2TDjIcQ" source="_sCJKOik6Eem-J7NZSmLltA" target="_sCJxTik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M8GsCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8GsSpWEem2soT2TDjIcQ" x="10" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M8GsipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8GsypWEem2soT2TDjIcQ" x="154" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M8GtCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8GtSpWEem2soT2TDjIcQ" x="12" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M8GrSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M8GripWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M8GrypWEem2soT2TDjIcQ" points="[1, 49, 3552, -39]$[1, 142, 3552, 54]$[-3471, 142, 80, 54]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M8GtipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M8GtypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M8GuCpWEem2soT2TDjIcQ" type="4001" element="_3Mc-dipWEem2soT2TDjIcQ" source="_sCDDoik6Eem-J7NZSmLltA" target="_sCK_bik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M8GvCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8GvSpWEem2soT2TDjIcQ" x="11" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M8GvipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8GvypWEem2soT2TDjIcQ" x="-101" y="29"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M8GwCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8GwSpWEem2soT2TDjIcQ" x="117" y="53"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M8GuSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M8GuipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M8GuypWEem2soT2TDjIcQ" points="[49, -54, -498, 543]$[49, -285, -498, 312]$[453, -285, -94, 312]$[453, -494, -94, 103]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M8tsCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M8tsSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M8tsipWEem2soT2TDjIcQ" type="4001" element="_3MdlgSpWEem2soT2TDjIcQ" source="_sCDqpCk6Eem-J7NZSmLltA" target="_sCK_YCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M8ttipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8ttypWEem2soT2TDjIcQ" x="-13" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M8tuCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8tuSpWEem2soT2TDjIcQ" x="-10" y="61"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M8tuipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8tuypWEem2soT2TDjIcQ" x="7" y="-29"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M8tsypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M8ttCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M8ttSpWEem2soT2TDjIcQ" points="[48, -49, -104, 129]$[48, -77, -104, 101]$[103, -77, -49, 101]$[103, -129, -49, 49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M8tvCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M8tvSpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M8tvipWEem2soT2TDjIcQ" type="4001" element="_3MdliCpWEem2soT2TDjIcQ" source="_sCFf3ik6Eem-J7NZSmLltA" target="_sCGuAik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M8twipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8twypWEem2soT2TDjIcQ" x="110" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M8txCpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8txSpWEem2soT2TDjIcQ" x="-88" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M8txipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M8txypWEem2soT2TDjIcQ" x="99" y="33"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M8tvypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M8twCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M8twSpWEem2soT2TDjIcQ" points="[48, -49, 202, 602]$[48, -406, 202, 245]$[-143, -406, 11, 245]$[-143, -602, 11, 49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M8tyCpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M8tySpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M8tyipWEem2soT2TDjIcQ" type="4001" element="_3MeMlipWEem2soT2TDjIcQ" source="_sCCcoCk6Eem-J7NZSmLltA" target="_sCH8FCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M9UwCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M9UwSpWEem2soT2TDjIcQ" x="2" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M9UwipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M9UwypWEem2soT2TDjIcQ" x="105" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M9UxCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M9UxSpWEem2soT2TDjIcQ" x="2" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M8tyypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M8tzCpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M8tzSpWEem2soT2TDjIcQ" points="[1, -49, 715, 66]$[1, -97, 715, 18]$[-634, -97, 80, 18]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M9UxipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M9UxypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M9UyCpWEem2soT2TDjIcQ" type="4001" element="_3MezpipWEem2soT2TDjIcQ" source="_sCDDqSk6Eem-J7NZSmLltA" target="_sCH8FCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M9UzCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M9UzSpWEem2soT2TDjIcQ" x="-16" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M9UzipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M9UzypWEem2soT2TDjIcQ" x="142" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M9U0CpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M9U0SpWEem2soT2TDjIcQ" x="6" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M9UySpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M9UyipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M9UyypWEem2soT2TDjIcQ" points="[1, -49, 2512, 50]$[1, -145, 2512, -46]$[-2431, -145, 80, -46]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M970CpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M970SpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M970ipWEem2soT2TDjIcQ" type="4001" element="_3MfasypWEem2soT2TDjIcQ" source="_sCFf0Ck6Eem-J7NZSmLltA" target="_sCH8Gyk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M971ipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M971ypWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M972CpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M972SpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M972ipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M972ypWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M970ypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M971CpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M971SpWEem2soT2TDjIcQ" points="[0, 0, 403, 8]$[-403, -8, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M973CpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M973SpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M973ipWEem2soT2TDjIcQ" type="4001" element="_3MgBwCpWEem2soT2TDjIcQ" source="_sCAnUCk6Eem-J7NZSmLltA" target="_sCKYUCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M974ipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M974ypWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M975CpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M975SpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M-i4CpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M-i4SpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M973ypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M974CpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M974SpWEem2soT2TDjIcQ" points="[-80, -8, 272, -8]$[-272, -8, 80, -8]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M-i4ipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M-i4ypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M-i5CpWEem2soT2TDjIcQ" type="4001" element="_3MgBxypWEem2soT2TDjIcQ" source="_sCB1cyk6Eem-J7NZSmLltA" target="_sCJxTik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M-i6CpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M-i6SpWEem2soT2TDjIcQ" x="-7" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M-i6ipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M-i6ypWEem2soT2TDjIcQ" x="244" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M-i7CpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M-i7SpWEem2soT2TDjIcQ" x="2" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M-i5SpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M-i5ipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M-i5ypWEem2soT2TDjIcQ" points="[-31, 49, 1796, -200]$[-31, 267, 1796, 18]$[-1747, 267, 80, 18]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M_J8CpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M_J8SpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M_J8ipWEem2soT2TDjIcQ" type="4001" element="_3Mgo1ipWEem2soT2TDjIcQ" source="_sCCciyk6Eem-J7NZSmLltA" target="_sCE4wCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M_J9ipWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M_J9ypWEem2soT2TDjIcQ" x="-7" y="-16"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M_J-CpWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M_J-SpWEem2soT2TDjIcQ" x="-6" y="-57"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M_J-ipWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M_J-ypWEem2soT2TDjIcQ" x="13" y="-55"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M_J8ypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M_J9CpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M_J9SpWEem2soT2TDjIcQ" points="[-40, -49, 72, 128]$[-40, -108, 72, 69]$[-73, -108, 39, 69]$[-73, -128, 39, 49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M_J_CpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M_J_SpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M_J_ipWEem2soT2TDjIcQ" type="4001" element="_3MhP5ipWEem2soT2TDjIcQ" source="_sCGG5Ck6Eem-J7NZSmLltA" target="_sCGG6yk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M_xACpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M_xASpWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M_xAipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M_xAypWEem2soT2TDjIcQ" x="2" y="57"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M_xBCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M_xBSpWEem2soT2TDjIcQ" x="-3" y="72"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M_J_ypWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M_KACpWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M_KASpWEem2soT2TDjIcQ" points="[0, 0, 48, 144]$[-48, -144, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M_xBipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M_xBypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M_xCCpWEem2soT2TDjIcQ" type="4001" element="_3Mh28CpWEem2soT2TDjIcQ" source="_sCDqsik6Eem-J7NZSmLltA" target="_sCERtCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3M_xDCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M_xDSpWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M_xDipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M_xDypWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3M_xECpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3M_xESpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M_xCSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M_xCipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M_xCypWEem2soT2TDjIcQ" points="[0, 0, -324, -204]$[324, 204, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M_xEipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3M_xEypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3M_xFCpWEem2soT2TDjIcQ" type="4001" element="_3Mh29ypWEem2soT2TDjIcQ" source="_sCBOcik6Eem-J7NZSmLltA" target="_sCCciyk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3NAYECpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3NAYESpWEem2soT2TDjIcQ" y="-9"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3NAYEipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3NAYEypWEem2soT2TDjIcQ" x="-3" y="-36"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3NAYFCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3NAYFSpWEem2soT2TDjIcQ" x="4" y="-60"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3M_xFSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3M_xFipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3M_xFypWEem2soT2TDjIcQ" points="[-24, 49, 42, -128]$[-24, 69, 42, -108]$[-43, 69, 23, -108]$[-43, 128, 23, -49]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3NAYFipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3NAYFypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3NAYGCpWEem2soT2TDjIcQ" type="4001" element="_3MieBipWEem2soT2TDjIcQ" source="_sCDDsCk6Eem-J7NZSmLltA" target="_sCH8FCk6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3NAYHCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3NAYHSpWEem2soT2TDjIcQ" x="-6" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3NAYHipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3NAYHypWEem2soT2TDjIcQ" x="-2" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3NAYICpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3NAYISpWEem2soT2TDjIcQ" x="2" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3NAYGSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3NAYGipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3NAYGypWEem2soT2TDjIcQ" points="[-59, -35, 240, 152]$[-139, -35, 160, 152]$[-139, -140, 160, 47]$[-219, -140, 80, 47]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3NAYIipWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3NAYIypWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+        <edges xmi:type="notation:Edge" xmi:id="_3NAYJCpWEem2soT2TDjIcQ" type="4001" element="_3MjFEypWEem2soT2TDjIcQ" source="_sCERtCk6Eem-J7NZSmLltA" target="_sCHVEik6Eem-J7NZSmLltA">
+          <children xmi:type="notation:Node" xmi:id="_3NAYKCpWEem2soT2TDjIcQ" type="6001">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3NAYKSpWEem2soT2TDjIcQ" y="-10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3NAYKipWEem2soT2TDjIcQ" type="6002">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3NAYKypWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <children xmi:type="notation:Node" xmi:id="_3NAYLCpWEem2soT2TDjIcQ" type="6003">
+            <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3NAYLSpWEem2soT2TDjIcQ" y="10"/>
+          </children>
+          <styles xmi:type="notation:ConnectorStyle" xmi:id="_3NAYJSpWEem2soT2TDjIcQ" routing="Rectilinear"/>
+          <styles xmi:type="notation:FontStyle" xmi:id="_3NAYJipWEem2soT2TDjIcQ" fontName=".AppleSystemUIFont" fontHeight="8"/>
+          <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3NAYJypWEem2soT2TDjIcQ" points="[0, 0, -100, -180]$[100, 180, 0, 0]"/>
+          <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3NA_ICpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+          <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_3NA_ISpWEem2soT2TDjIcQ" id="(0.5,0.5)"/>
+        </edges>
+      </data>
+    </ownedAnnotationEntries>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_OZECk6Eem-J7NZSmLltA" name="AppliesToType" tooltipText="" outgoingEdges="_sBzL8Ck6Eem-J7NZSmLltA _3MgBwCpWEem2soT2TDjIcQ" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//AppliesToType"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//AppliesToType"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_r_Q1UCk6Eem-J7NZSmLltA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
+        <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAXolyk6Eem-J7NZSmLltA" name="id : EString" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/id"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/id"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LTH4SpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAY2sCk6Eem-J7NZSmLltA" name="publicationStage : PubStage = IS" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/publicationStage"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/publicationStage"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAY2sSk6Eem-J7NZSmLltA" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAY2sik6Eem-J7NZSmLltA" name="revision : EString = A" tooltipText="">
+        <target xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/revision"/>
+        <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//AppliesToType/revision"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAY2syk6Eem-J7NZSmLltA" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+      </ownedElements>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_Sqgik6Eem-J7NZSmLltA" name="DocumentRoot" tooltipText="" outgoingEdges="_sBaKYCk6Eem-J7NZSmLltA _sBbYhik6Eem-J7NZSmLltA _sBb_lik6Eem-J7NZSmLltA _sBcmpik6Eem-J7NZSmLltA" width="12" height="10">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//DocumentRoot"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DocumentRoot"/>
+      <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+      <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+      <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+      <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_r_T4oCk6Eem-J7NZSmLltA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
         <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
@@ -2434,7 +2333,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_UfsCk6Eem-J7NZSmLltA" name="ServiceType" tooltipText="" incomingEdges="_sBeb1yk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_UfsCk6Eem-J7NZSmLltA" name="ServiceType" tooltipText="" outgoingEdges="_3Mh29ypWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ServiceType"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ServiceType"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2447,13 +2346,13 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAbS8yk6Eem-J7NZSmLltA" name="name : ACSIServicesKind = Associate" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceType/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceType/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAbS9Ck6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LUWAypWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_VGwSk6Eem-J7NZSmLltA" name="Abbreviation" tooltipText="" incomingEdges="_sBdNsCk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_VGwSk6Eem-J7NZSmLltA" name="Abbreviation" tooltipText="" outgoingEdges="_3MYF9ipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//Abbreviation"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Abbreviation"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2474,13 +2373,13 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAb6Aik6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//Abbreviation/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//Abbreviation/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAchECk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LVkISpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_Vt0ik6Eem-J7NZSmLltA" name="Abbreviations" tooltipText="" outgoingEdges="_sBdNsCk6Eem-J7NZSmLltA" incomingEdges="_sBm-tik6Eem-J7NZSmLltA _sBseRyk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_Vt0ik6Eem-J7NZSmLltA" name="Abbreviations" tooltipText="" outgoingEdges="_3MTNdipWEem2soT2TDjIcQ _3MgBxypWEem2soT2TDjIcQ" incomingEdges="_3MYF9ipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//Abbreviations"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Abbreviations"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2491,7 +2390,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_W78Ck6Eem-J7NZSmLltA" name="AbstractLNClass" tooltipText="" outgoingEdges="_sB0aEyk6Eem-J7NZSmLltA" incomingEdges="_sBkidik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_W78Ck6Eem-J7NZSmLltA" name="AbstractLNClass" tooltipText="" outgoingEdges="_sB0aEyk6Eem-J7NZSmLltA _3MZ7JipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//AbstractLNClass"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//AbstractLNClass"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2504,13 +2403,13 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAchESk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//AbstractLNClass/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//AbstractLNClass/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAdIICk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LWLMSpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_YxISk6Eem-J7NZSmLltA" name="AnyLNClass" tooltipText="" outgoingEdges="_sBdNuik6Eem-J7NZSmLltA _sB0aGik6Eem-J7NZSmLltA" incomingEdges="_sB0aEyk6Eem-J7NZSmLltA _sB2PSik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_YxISk6Eem-J7NZSmLltA" name="AnyLNClass" tooltipText="" outgoingEdges="_sB0aGik6Eem-J7NZSmLltA _3MT0hipWEem2soT2TDjIcQ" incomingEdges="_sB0aEyk6Eem-J7NZSmLltA _sB2PSik6Eem-J7NZSmLltA" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//AnyLNClass"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//AnyLNClass"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2530,7 +2429,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_Z_QCk6Eem-J7NZSmLltA" name="ApplicableServiceNS" tooltipText="" outgoingEdges="_sBeb0Ck6Eem-J7NZSmLltA _sB0aISk6Eem-J7NZSmLltA" incomingEdges="_sBaKYCk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_Z_QCk6Eem-J7NZSmLltA" name="ApplicableServiceNS" tooltipText="" outgoingEdges="_sB0aISk6Eem-J7NZSmLltA _3MYtAypWEem2soT2TDjIcQ" incomingEdges="_sBaKYCk6Eem-J7NZSmLltA" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ApplicableServiceNS"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ApplicableServiceNS"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2543,21 +2442,21 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAdvMSk6Eem-J7NZSmLltA" name="date : DateTime" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//ApplicableServiceNS/date"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//ApplicableServiceNS/date"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAeWQCk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LXZUSpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAeWQSk6Eem-J7NZSmLltA" name="version : UnsignedInt" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//ApplicableServiceNS/version"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//ApplicableServiceNS/version"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAeWQik6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LXZUypWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_bNYCk6Eem-J7NZSmLltA" name="ApplicableServices" tooltipText="" outgoingEdges="_sBeb1yk6Eem-J7NZSmLltA _sBfC5ik6Eem-J7NZSmLltA" incomingEdges="_sBj7Yyk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_bNYCk6Eem-J7NZSmLltA" name="ApplicableServices" tooltipText="" outgoingEdges="_3MUbkypWEem2soT2TDjIcQ _3Mgo1ipWEem2soT2TDjIcQ" incomingEdges="_3Mh29ypWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ApplicableServices"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ApplicableServices"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2568,7 +2467,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_cbgSk6Eem-J7NZSmLltA" name="BasicType" tooltipText="" incomingEdges="_sBfC7Sk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_cbgSk6Eem-J7NZSmLltA" name="BasicType" tooltipText="" outgoingEdges="_3MbwUCpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//BasicType"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//BasicType"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2589,13 +2488,13 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAfkYSk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//BasicType/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//BasicType/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAfkYik6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LYncipWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_dpoCk6Eem-J7NZSmLltA" name="BasicTypes" tooltipText="" outgoingEdges="_sBfC7Sk6Eem-J7NZSmLltA" incomingEdges="_sBlwmik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_dpoCk6Eem-J7NZSmLltA" name="BasicTypes" tooltipText="" outgoingEdges="_3MeMlipWEem2soT2TDjIcQ" incomingEdges="_3MbwUCpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//BasicTypes"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//BasicTypes"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2606,7 +2505,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_fe0Ck6Eem-J7NZSmLltA" name="CDC" tooltipText="" outgoingEdges="_sBfp9ik6Eem-J7NZSmLltA _sBgRBik6Eem-J7NZSmLltA _sBgRDSk6Eem-J7NZSmLltA _sB1BJik6Eem-J7NZSmLltA" incomingEdges="_sBg4Fik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_fe0Ck6Eem-J7NZSmLltA" name="CDC" tooltipText="" outgoingEdges="_sB1BJik6Eem-J7NZSmLltA _3MVpsCpWEem2soT2TDjIcQ _3MZUFipWEem2soT2TDjIcQ _3MaiNipWEem2soT2TDjIcQ _3Mc-dipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//CDC"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//CDC"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2627,8 +2526,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAgygCk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//CDC/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//CDC/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAgygSk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LZ1kSpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -2657,7 +2556,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_gs8ik6Eem-J7NZSmLltA" name="CDCs" tooltipText="" outgoingEdges="_sBg4Fik6Eem-J7NZSmLltA" incomingEdges="_sBoM1ik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_gs8ik6Eem-J7NZSmLltA" name="CDCs" tooltipText="" outgoingEdges="_3MezpipWEem2soT2TDjIcQ" incomingEdges="_3MaiNipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//CDCs"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//CDCs"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2668,7 +2567,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_h7ESk6Eem-J7NZSmLltA" name="Changes" tooltipText="" outgoingEdges="_sB1BLSk6Eem-J7NZSmLltA" incomingEdges="_sBlJhik6Eem-J7NZSmLltA _sBrQKik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_h7ESk6Eem-J7NZSmLltA" name="Changes" tooltipText="" outgoingEdges="_sB1BLSk6Eem-J7NZSmLltA _3MW31ipWEem2soT2TDjIcQ _3MieBipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//Changes"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Changes"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2711,7 +2610,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_jJMSk6Eem-J7NZSmLltA" name="ConstructedAttribute" tooltipText="" outgoingEdges="_sBhfJik6Eem-J7NZSmLltA _sB1BNCk6Eem-J7NZSmLltA" incomingEdges="_sBhfLSk6Eem-J7NZSmLltA _sBu6hik6Eem-J7NZSmLltA _sB22ZCk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_jJMSk6Eem-J7NZSmLltA" name="ConstructedAttribute" tooltipText="" outgoingEdges="_sB1BNCk6Eem-J7NZSmLltA _3MO8CSpWEem2soT2TDjIcQ _3MXe4CpWEem2soT2TDjIcQ _3MdlgSpWEem2soT2TDjIcQ" incomingEdges="_sB22ZCk6Eem-J7NZSmLltA" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ConstructedAttribute"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ConstructedAttribute"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2724,13 +2623,13 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAjOwSk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//ConstructedAttribute/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//ConstructedAttribute/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAjOwik6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LbqwipWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_jwQik6Eem-J7NZSmLltA" name="ConstructedAttributes" tooltipText="" outgoingEdges="_sBhfLSk6Eem-J7NZSmLltA" incomingEdges="_sBnlzSk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_jwQik6Eem-J7NZSmLltA" name="ConstructedAttributes" tooltipText="" outgoingEdges="_3MR_VipWEem2soT2TDjIcQ" incomingEdges="_3MXe4CpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ConstructedAttributes"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ConstructedAttributes"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2741,7 +2640,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_kXUik6Eem-J7NZSmLltA" name="Copyrighted" tooltipText="" outgoingEdges="_sBd0ySk6Eem-J7NZSmLltA" incomingEdges="_sB0aISk6Eem-J7NZSmLltA _sB2PUSk6Eem-J7NZSmLltA _sB22Vik6Eem-J7NZSmLltA _sB3dbSk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_kXUik6Eem-J7NZSmLltA" name="Copyrighted" tooltipText="" outgoingEdges="_3Mh28CpWEem2soT2TDjIcQ" incomingEdges="_sB0aISk6Eem-J7NZSmLltA _sB2PUSk6Eem-J7NZSmLltA _sB22Vik6Eem-J7NZSmLltA _sB3dbSk6Eem-J7NZSmLltA" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//Copyrighted"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Copyrighted"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2752,7 +2651,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_k-Yik6Eem-J7NZSmLltA" name="CopyrightNotice" tooltipText="" outgoingEdges="_sBiGNik6Eem-J7NZSmLltA _sBitRik6Eem-J7NZSmLltA" incomingEdges="_sBaxeSk6Eem-J7NZSmLltA _sBd0ySk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_k-Yik6Eem-J7NZSmLltA" name="CopyrightNotice" tooltipText="" outgoingEdges="_3MSmZypWEem2soT2TDjIcQ _3MjFEypWEem2soT2TDjIcQ" incomingEdges="_3Mh28CpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//CopyrightNotice"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//CopyrightNotice"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2763,7 +2662,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_mMgCk6Eem-J7NZSmLltA" name="DataAttribute" tooltipText="" outgoingEdges="_sB1oNik6Eem-J7NZSmLltA" incomingEdges="_sBgRBik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_mMgCk6Eem-J7NZSmLltA" name="DataAttribute" tooltipText="" outgoingEdges="_sB1oNik6Eem-J7NZSmLltA" incomingEdges="_3MVpsCpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//DataAttribute"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DataAttribute"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2800,8 +2699,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAlD8Ck6Eem-J7NZSmLltA" name="fc : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//DataAttribute/fc"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//DataAttribute/fc"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAlD8Sk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3Ldf8ipWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -2848,8 +2747,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAmSEyk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//DataAttribute/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//DataAttribute/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAm5ICk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LeHAypWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -2910,7 +2809,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_oowSk6Eem-J7NZSmLltA" name="DataObject" tooltipText="" outgoingEdges="_sB1oPSk6Eem-J7NZSmLltA" incomingEdges="_sBdNuik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_oowSk6Eem-J7NZSmLltA" name="DataObject" tooltipText="" outgoingEdges="_sB1oPSk6Eem-J7NZSmLltA" incomingEdges="_3MT0hipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//DataObject"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DataObject"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -2947,8 +2846,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sApVYyk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//DataObject/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//DataObject/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAp8cCk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3Lf8NCpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -2987,8 +2886,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sArKkCk6Eem-J7NZSmLltA" name="type : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//DataObject/type"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//DataObject/type"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sArKkSk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LgjRSpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3009,7 +2908,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_qd8Ck6Eem-J7NZSmLltA" name="DataSetMemberOf" tooltipText="" incomingEdges="_sBfC5ik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_qd8Ck6Eem-J7NZSmLltA" name="DataSetMemberOf" tooltipText="" incomingEdges="_3Mgo1ipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//DataSetMemberOf"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DataSetMemberOf"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3022,13 +2921,13 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sArxoSk6Eem-J7NZSmLltA" name="cb : CBKind = RCB" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//DataSetMemberOf/cb"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//DataSetMemberOf/cb"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAsYsCk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_R5-fFCpZEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_rsEik6Eem-J7NZSmLltA" name="Doc" tooltipText="" incomingEdges="_sBpa8Ck6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_rsEik6Eem-J7NZSmLltA" name="Doc" tooltipText="" outgoingEdges="_3MfasypWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//Doc"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Doc"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3061,8 +2960,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAtm0Ck6Eem-J7NZSmLltA" name="id : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//Doc/id"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//Doc/id"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAtm0Sk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3Li_gypWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3102,7 +3001,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_thQik6Eem-J7NZSmLltA" name="Enumeration" tooltipText="" outgoingEdges="_sBitTSk6Eem-J7NZSmLltA _sB1oRCk6Eem-J7NZSmLltA" incomingEdges="_sBjUVik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_thQik6Eem-J7NZSmLltA" name="Enumeration" tooltipText="" outgoingEdges="_sB1oRCk6Eem-J7NZSmLltA _3MQxNipWEem2soT2TDjIcQ _3MdliCpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//Enumeration"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Enumeration"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3123,13 +3022,13 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAvcASk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//Enumeration/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//Enumeration/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAvcAik6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3Lk0sSpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_uvYik6Eem-J7NZSmLltA" name="Enumerations" tooltipText="" outgoingEdges="_sBjUVik6Eem-J7NZSmLltA" incomingEdges="_sBnlxik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_uvYik6Eem-J7NZSmLltA" name="Enumerations" tooltipText="" outgoingEdges="_3MXe5ypWEem2soT2TDjIcQ" incomingEdges="_3MQxNipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//Enumerations"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Enumerations"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3140,7 +3039,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_vWcik6Eem-J7NZSmLltA" name="FunctionalConstraint" tooltipText="" outgoingEdges="_sBj7Yyk6Eem-J7NZSmLltA" incomingEdges="_sBj7aik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_vWcik6Eem-J7NZSmLltA" name="FunctionalConstraint" tooltipText="" outgoingEdges="_3MhP5ipWEem2soT2TDjIcQ" incomingEdges="_3MUbkypWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//FunctionalConstraint"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//FunctionalConstraint"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3153,8 +3052,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAwDECk6Eem-J7NZSmLltA" name="abbreviation : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//FunctionalConstraint/abbreviation"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//FunctionalConstraint/abbreviation"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAwDESk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_R6A7USpZEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3175,7 +3074,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_xLoCk6Eem-J7NZSmLltA" name="FunctionalConstraints" tooltipText="" outgoingEdges="_sBj7aik6Eem-J7NZSmLltA" incomingEdges="_sBmXoCk6Eem-J7NZSmLltA _sBr3Nik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_xLoCk6Eem-J7NZSmLltA" name="FunctionalConstraints" tooltipText="" outgoingEdges="_3MSmYCpWEem2soT2TDjIcQ _3MbJQypWEem2soT2TDjIcQ" incomingEdges="_3MhP5ipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//FunctionalConstraints"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//FunctionalConstraints"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3186,7 +3085,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_xysCk6Eem-J7NZSmLltA" name="License" tooltipText="" incomingEdges="_sBitRik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_xysCk6Eem-J7NZSmLltA" name="License" tooltipText="" incomingEdges="_3MSmZypWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//License"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//License"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3221,7 +3120,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_zn4Sk6Eem-J7NZSmLltA" name="Literal" tooltipText="" outgoingEdges="_sB2PQyk6Eem-J7NZSmLltA" incomingEdges="_sBitTSk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_zn4Sk6Eem-J7NZSmLltA" name="Literal" tooltipText="" outgoingEdges="_sB2PQyk6Eem-J7NZSmLltA" incomingEdges="_3MdliCpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//Literal"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Literal"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3234,21 +3133,21 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAyfUik6Eem-J7NZSmLltA" name="literalVal : Int" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//Literal/literalVal"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//Literal/literalVal"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAzGYCk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LnQ8SpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sAzGYSk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//Literal/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//Literal/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sAzGYik6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LnQ8ypWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_0O8ik6Eem-J7NZSmLltA" name="LNClass" tooltipText="" outgoingEdges="_sB2PSik6Eem-J7NZSmLltA" incomingEdges="_sBkifSk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_0O8ik6Eem-J7NZSmLltA" name="LNClass" tooltipText="" outgoingEdges="_sB2PSik6Eem-J7NZSmLltA _3MRYQypWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//LNClass"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//LNClass"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3277,13 +3176,13 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sA0UgCk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//LNClass/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//LNClass/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sA0UgSk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3Ln4AypWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_1dECk6Eem-J7NZSmLltA" name="LNClasses" tooltipText="" outgoingEdges="_sBkidik6Eem-J7NZSmLltA _sBkifSk6Eem-J7NZSmLltA" incomingEdges="_sBoz5ik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_1dECk6Eem-J7NZSmLltA" name="LNClasses" tooltipText="" outgoingEdges="_3MNG0CpWEem2soT2TDjIcQ" incomingEdges="_3MRYQypWEem2soT2TDjIcQ _3MZ7JipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//LNClasses"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//LNClasses"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3294,7 +3193,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_2EIik6Eem-J7NZSmLltA" name="Notice" tooltipText="" incomingEdges="_sBiGNik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_2EIik6Eem-J7NZSmLltA" name="Notice" tooltipText="" incomingEdges="_3MjFEypWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//Notice"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Notice"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3313,7 +3212,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_2rMik6Eem-J7NZSmLltA" name="NS" tooltipText="" outgoingEdges="_sBlJhik6Eem-J7NZSmLltA _sBlwkyk6Eem-J7NZSmLltA _sBlwmik6Eem-J7NZSmLltA _sBmXoCk6Eem-J7NZSmLltA _sBmXpyk6Eem-J7NZSmLltA _sBm-tik6Eem-J7NZSmLltA _sBnlxik6Eem-J7NZSmLltA _sBnlzSk6Eem-J7NZSmLltA _sBoM1ik6Eem-J7NZSmLltA _sBoz5ik6Eem-J7NZSmLltA _sB2PUSk6Eem-J7NZSmLltA _sB2PWCk6Eem-J7NZSmLltA" incomingEdges="_sBbYhik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_2rMik6Eem-J7NZSmLltA" name="NS" tooltipText="" outgoingEdges="_sB2PUSk6Eem-J7NZSmLltA _sB2PWCk6Eem-J7NZSmLltA _3MPjFipWEem2soT2TDjIcQ" incomingEdges="_sBbYhik6Eem-J7NZSmLltA _3MNG0CpWEem2soT2TDjIcQ _3MR_VipWEem2soT2TDjIcQ _3MSmYCpWEem2soT2TDjIcQ _3MTNdipWEem2soT2TDjIcQ _3MXe5ypWEem2soT2TDjIcQ _3MeMlipWEem2soT2TDjIcQ _3MezpipWEem2soT2TDjIcQ _3MieBipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//NS"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//NS"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3334,8 +3233,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sA1ioSk6Eem-J7NZSmLltA" name="id : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//NS/id"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//NS/id"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sA2JsCk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LpGIipWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3371,8 +3270,16 @@
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
+      <ownedElements xmi:type="diagram:DNodeListElement" uid="_3LqUQCpWEem2soT2TDjIcQ" name=" dependsOn : DependsOn" tooltipText="">
+        <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/dependsOn"/>
+        <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/dependsOn"/>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LriYCpWEem2soT2TDjIcQ" labelAlignment="LEFT" color="114,159,207">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']/@style"/>
+        </ownedStyle>
+        <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EReferenceNode']"/>
+      </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_5HcCk6Eem-J7NZSmLltA" name="NSDoc" tooltipText="" outgoingEdges="_sBpa8Ck6Eem-J7NZSmLltA _sB22Vik6Eem-J7NZSmLltA _sB22XSk6Eem-J7NZSmLltA" incomingEdges="_sBb_lik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_5HcCk6Eem-J7NZSmLltA" name="NSDoc" tooltipText="" outgoingEdges="_sB22Vik6Eem-J7NZSmLltA _sB22XSk6Eem-J7NZSmLltA" incomingEdges="_sBb_lik6Eem-J7NZSmLltA _3MfasypWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//NSDoc"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//NSDoc"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3385,16 +3292,16 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sA3X0ik6Eem-J7NZSmLltA" name="id : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//NSDoc/id"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//NSDoc/id"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sA3-4Ck6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LsJcSpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sA3-4Sk6Eem-J7NZSmLltA" name="lang : Language" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//NSDoc/lang"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//NSDoc/lang"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sA4l8Ck6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LsJcypWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3431,7 +3338,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_5ugik6Eem-J7NZSmLltA" name="PresenceCondition" tooltipText="" incomingEdges="_sBpa9yk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_5ugik6Eem-J7NZSmLltA" name="PresenceCondition" tooltipText="" outgoingEdges="_3MNt6SpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//PresenceCondition"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//PresenceCondition"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3460,8 +3367,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sA6bIik6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//PresenceCondition/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//PresenceCondition/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sA7CMCk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LtXkypWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3474,7 +3381,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_68oSk6Eem-J7NZSmLltA" name="PresenceConditions" tooltipText="" outgoingEdges="_sBpa9yk6Eem-J7NZSmLltA" incomingEdges="_sBmXpyk6Eem-J7NZSmLltA _sBseQCk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_68oSk6Eem-J7NZSmLltA" name="PresenceConditions" tooltipText="" outgoingEdges="_3MVptypWEem2soT2TDjIcQ" incomingEdges="_3MNt6SpWEem2soT2TDjIcQ _3MPjFipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//PresenceConditions"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//PresenceConditions"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3485,7 +3392,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_8KxCk6Eem-J7NZSmLltA" name="ServiceCDC" tooltipText="" outgoingEdges="_sBqCBik6Eem-J7NZSmLltA" incomingEdges="_sBqpFik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_8KxCk6Eem-J7NZSmLltA" name="ServiceCDC" tooltipText="" outgoingEdges="_3MOU9ipWEem2soT2TDjIcQ _3MVCoCpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ServiceCDC"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ServiceCDC"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3512,7 +3419,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_9Y4Ck6Eem-J7NZSmLltA" name="ServiceCDCs" tooltipText="" outgoingEdges="_sBqpFik6Eem-J7NZSmLltA" incomingEdges="_sBtsbSk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_9Y4Ck6Eem-J7NZSmLltA" name="ServiceCDCs" tooltipText="" outgoingEdges="_3McXZipWEem2soT2TDjIcQ" incomingEdges="_3MVCoCpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ServiceCDCs"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ServiceCDCs"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3523,7 +3430,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_9_8Ck6Eem-J7NZSmLltA" name="ServiceConstructedAttribute" tooltipText="" outgoingEdges="_sB22ZCk6Eem-J7NZSmLltA" incomingEdges="_sBrQIyk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_9_8Ck6Eem-J7NZSmLltA" name="ServiceConstructedAttribute" tooltipText="" outgoingEdges="_sB22ZCk6Eem-J7NZSmLltA _3MQKJipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ServiceConstructedAttribute"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ServiceConstructedAttribute"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3542,7 +3449,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_-nASk6Eem-J7NZSmLltA" name="ServiceConstructedAttributes" tooltipText="" outgoingEdges="_sBrQIyk6Eem-J7NZSmLltA" incomingEdges="_sBtsZik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r_-nASk6Eem-J7NZSmLltA" name="ServiceConstructedAttributes" tooltipText="" outgoingEdges="_3MWQxipWEem2soT2TDjIcQ" incomingEdges="_3MQKJipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ServiceConstructedAttributes"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ServiceConstructedAttributes"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3553,7 +3460,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r__OESk6Eem-J7NZSmLltA" name="ServiceDataAttribute" tooltipText="" outgoingEdges="_sB3dZik6Eem-J7NZSmLltA" incomingEdges="_sBqCBik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_r__OESk6Eem-J7NZSmLltA" name="ServiceDataAttribute" tooltipText="" outgoingEdges="_sB3dZik6Eem-J7NZSmLltA" incomingEdges="_3MOU9ipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ServiceDataAttribute"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ServiceDataAttribute"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3566,16 +3473,16 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sA83YCk6Eem-J7NZSmLltA" name="fc : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceDataAttribute/fc"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceDataAttribute/fc"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sA83YSk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3Lvz0SpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sA83Yik6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceDataAttribute/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceDataAttribute/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sA9ecCk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3Lwa4SpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3636,7 +3543,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sAAcMSk6Eem-J7NZSmLltA" name="ServiceNS" tooltipText="" outgoingEdges="_sBrQKik6Eem-J7NZSmLltA _sBr3Nik6Eem-J7NZSmLltA _sBseQCk6Eem-J7NZSmLltA _sBseRyk6Eem-J7NZSmLltA _sBtFVik6Eem-J7NZSmLltA _sBtsZik6Eem-J7NZSmLltA _sBtsbSk6Eem-J7NZSmLltA _sB3dbSk6Eem-J7NZSmLltA _sB3ddCk6Eem-J7NZSmLltA" incomingEdges="_sBcmpik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sAAcMSk6Eem-J7NZSmLltA" name="ServiceNS" tooltipText="" outgoingEdges="_sB3dbSk6Eem-J7NZSmLltA _sB3ddCk6Eem-J7NZSmLltA _3MbwVypWEem2soT2TDjIcQ" incomingEdges="_sBcmpik6Eem-J7NZSmLltA _3MVptypWEem2soT2TDjIcQ _3MWQxipWEem2soT2TDjIcQ _3MW31ipWEem2soT2TDjIcQ _3MbJQypWEem2soT2TDjIcQ _3McXZipWEem2soT2TDjIcQ _3MgBxypWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ServiceNS"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ServiceNS"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3657,8 +3564,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sA_6sik6Eem-J7NZSmLltA" name="id : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceNS/id"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceNS/id"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sA_6syk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3LyQESpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3695,7 +3602,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sACRYik6Eem-J7NZSmLltA" name="ServiceNsUsage" tooltipText="" outgoingEdges="_sBuTdik6Eem-J7NZSmLltA _sB4Edik6Eem-J7NZSmLltA" incomingEdges="_sBeb0Ck6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sACRYik6Eem-J7NZSmLltA" name="ServiceNsUsage" tooltipText="" outgoingEdges="_sB4Edik6Eem-J7NZSmLltA" incomingEdges="_3MYtAypWEem2soT2TDjIcQ _3MgBwCpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ServiceNsUsage"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ServiceNsUsage"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3708,8 +3615,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sBBv4Sk6Eem-J7NZSmLltA" name="id : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceNsUsage/id"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceNsUsage/id"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sBBv4ik6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3Ly3IipWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3730,7 +3637,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sADfgSk6Eem-J7NZSmLltA" name="ServiceParameter" tooltipText="" outgoingEdges="_sB4EfSk6Eem-J7NZSmLltA" incomingEdges="_sBgRDSk6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sADfgSk6Eem-J7NZSmLltA" name="ServiceParameter" tooltipText="" outgoingEdges="_sB4EfSk6Eem-J7NZSmLltA" incomingEdges="_3MZUFipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ServiceParameter"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ServiceParameter"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3767,8 +3674,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sBDlESk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceParameter/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//ServiceParameter/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sBDlEik6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3L0sUSpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3789,7 +3696,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sAF7wSk6Eem-J7NZSmLltA" name="ServiceTypeRealizations" tooltipText="" outgoingEdges="_sBu6hik6Eem-J7NZSmLltA" incomingEdges="_sBtFVik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sAF7wSk6Eem-J7NZSmLltA" name="ServiceTypeRealizations" tooltipText="" incomingEdges="_3MbwVypWEem2soT2TDjIcQ _3MdlgSpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//ServiceTypeRealizations"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ServiceTypeRealizations"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3800,7 +3707,7 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sAGi0ik6Eem-J7NZSmLltA" name="SubDataAttribute" tooltipText="" outgoingEdges="_sB4EhCk6Eem-J7NZSmLltA" incomingEdges="_sBhfJik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sAGi0ik6Eem-J7NZSmLltA" name="SubDataAttribute" tooltipText="" outgoingEdges="_sB4EhCk6Eem-J7NZSmLltA" incomingEdges="_3MO8CSpWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//SubDataAttribute"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//SubDataAttribute"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3861,8 +3768,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sBHPcyk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//SubDataAttribute/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//SubDataAttribute/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sBH2gCk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3L16dSpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3915,7 +3822,7 @@
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sAIYASk6Eem-J7NZSmLltA" name="SubDataObject" tooltipText="" outgoingEdges="_sB4rgyk6Eem-J7NZSmLltA" incomingEdges="_sBfp9ik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sAIYASk6Eem-J7NZSmLltA" name="SubDataObject" tooltipText="" outgoingEdges="_sB4rgyk6Eem-J7NZSmLltA" incomingEdges="_3Mc-dipWEem2soT2TDjIcQ" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//SubDataObject"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//SubDataObject"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -3952,8 +3859,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sBKSwSk6Eem-J7NZSmLltA" name="name : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//SubDataObject/name"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//SubDataObject/name"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sBKSwik6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3L3vpCpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -3992,8 +3899,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sBLg4yk6Eem-J7NZSmLltA" name="type : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//SubDataObject/type"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//SubDataObject/type"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sBMH8Ck6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3L49wSpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -4027,13 +3934,13 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sBMvASk6Eem-J7NZSmLltA" name="titleID : EString" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//TitledClass/titleID"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//TitledClass/titleID"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sBMvAik6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3L5k0SpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sAK0QCk6Eem-J7NZSmLltA" name="NSDObjectWithVersionAndRelease" tooltipText="" incomingEdges="_sBzL8Ck6Eem-J7NZSmLltA _sBzzBik6Eem-J7NZSmLltA _sB1BLSk6Eem-J7NZSmLltA _sB2PWCk6Eem-J7NZSmLltA _sB22XSk6Eem-J7NZSmLltA _sB3ddCk6Eem-J7NZSmLltA _sB4Edik6Eem-J7NZSmLltA" width="12" height="10">
+    <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_sAK0QCk6Eem-J7NZSmLltA" name="NSDObjectWithVersionAndRelease" tooltipText="" incomingEdges="_sBzL8Ck6Eem-J7NZSmLltA _sB1BLSk6Eem-J7NZSmLltA _sB2PWCk6Eem-J7NZSmLltA _sB22XSk6Eem-J7NZSmLltA _sB3ddCk6Eem-J7NZSmLltA _sB4Edik6Eem-J7NZSmLltA" width="12" height="10">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//NSDObjectWithVersionAndRelease"/>
       <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//NSDObjectWithVersionAndRelease"/>
       <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
@@ -4055,8 +3962,8 @@
       <ownedElements xmi:type="diagram:DNodeListElement" uid="_sBNWEik6Eem-J7NZSmLltA" name="version : EIntegerObject" tooltipText="">
         <target xmi:type="ecore:EAttribute" href="nsd.ecore#//NSDObjectWithVersionAndRelease/version"/>
         <semanticElements xmi:type="ecore:EAttribute" href="nsd.ecore#//NSDObjectWithVersionAndRelease/version"/>
-        <ownedStyle xmi:type="diagram:BundledImage" uid="_sBNWEyk6Eem-J7NZSmLltA" labelAlignment="LEFT" description="_sAYPoCk6Eem-J7NZSmLltA">
-          <labelFormat>bold</labelFormat>
+        <ownedStyle xmi:type="diagram:BundledImage" uid="_3L6L4SpWEem2soT2TDjIcQ" labelAlignment="LEFT">
+          <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
         </ownedStyle>
         <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
       </ownedElements>
@@ -4074,19 +3981,6 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBaxeSk6Eem-J7NZSmLltA" name="[0..-2] /copyright" sourceNode="_r_Sqgik6Eem-J7NZSmLltA" targetNode="_r_k-Yik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//DocumentRoot/copyright"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//DocumentRoot/copyright"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBbYgCk6Eem-J7NZSmLltA" description="_sBaxcCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="114,159,207">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBbYgik6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBbYgSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
     <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBbYhik6Eem-J7NZSmLltA" name="[0..1] /nS" sourceNode="_r_Sqgik6Eem-J7NZSmLltA" targetNode="_r_2rMik6Eem-J7NZSmLltA">
       <target xmi:type="ecore:EReference" href="nsd.ecore#//DocumentRoot/nS"/>
       <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//DocumentRoot/nS"/>
@@ -4126,759 +4020,149 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBdNsCk6Eem-J7NZSmLltA" name="[1..*] abbreviation" sourceNode="_r_Vt0ik6Eem-J7NZSmLltA" targetNode="_r_VGwSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//Abbreviations/abbreviation"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Abbreviations/abbreviation"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBdNtCk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBdNtik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBdNtSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBdNuik6Eem-J7NZSmLltA" name="[0..*] dataObject" sourceNode="_r_YxISk6Eem-J7NZSmLltA" targetNode="_r_oowSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//AnyLNClass/dataObject"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//AnyLNClass/dataObject"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBd0wyk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBd0xSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBd0xCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBzL8Ck6Eem-J7NZSmLltA" sourceNode="_r_OZECk6Eem-J7NZSmLltA" targetNode="_sAK0QCk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//AppliesToType"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//AppliesToType"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBzzACk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sBzzASk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBzzAik6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBd0ySk6Eem-J7NZSmLltA" name="[0..1] copyright" sourceNode="_r_kXUik6Eem-J7NZSmLltA" targetNode="_r_k-Yik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//Copyrighted/copyright"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Copyrighted/copyright"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBd0yik6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBd0zCk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBd0yyk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB0aEyk6Eem-J7NZSmLltA" sourceNode="_r_W78Ck6Eem-J7NZSmLltA" targetNode="_r_YxISk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//AbstractLNClass"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//AbstractLNClass"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB0aFCk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB0aFSk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB0aFik6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBeb0Ck6Eem-J7NZSmLltA" name="[1..*] serviceNsUsage" sourceNode="_r_Z_QCk6Eem-J7NZSmLltA" targetNode="_sACRYik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServiceNS/serviceNsUsage"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServiceNS/serviceNsUsage"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBeb0Sk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBeb0yk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBeb0ik6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB0aGik6Eem-J7NZSmLltA" sourceNode="_r_YxISk6Eem-J7NZSmLltA" targetNode="_sAJmICk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//AnyLNClass"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//AnyLNClass"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB0aGyk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB0aHCk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB0aHSk6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBeb1yk6Eem-J7NZSmLltA" name="[0..*] service" sourceNode="_r_bNYCk6Eem-J7NZSmLltA" targetNode="_r_UfsCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServices/service"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServices/service"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBfC4Ck6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBfC4ik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBfC4Sk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB0aISk6Eem-J7NZSmLltA" sourceNode="_r_Z_QCk6Eem-J7NZSmLltA" targetNode="_r_kXUik6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//ApplicableServiceNS"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ApplicableServiceNS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1BICk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1BISk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1BIik6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBfC5ik6Eem-J7NZSmLltA" name="[0..*] dataSetMemberOf" sourceNode="_r_bNYCk6Eem-J7NZSmLltA" targetNode="_r_qd8Ck6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServices/dataSetMemberOf"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServices/dataSetMemberOf"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBfC5yk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBfC6Sk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBfC6Ck6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1BJik6Eem-J7NZSmLltA" sourceNode="_r_fe0Ck6Eem-J7NZSmLltA" targetNode="_sAJmICk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//CDC"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//CDC"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1BJyk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1BKCk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1BKSk6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBfC7Sk6Eem-J7NZSmLltA" name="[1..*] basicType" sourceNode="_r_dpoCk6Eem-J7NZSmLltA" targetNode="_r_cbgSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//BasicTypes/basicType"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//BasicTypes/basicType"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBfp8Ck6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBfp8ik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBfp8Sk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1BLSk6Eem-J7NZSmLltA" sourceNode="_r_h7ESk6Eem-J7NZSmLltA" targetNode="_sAK0QCk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//Changes"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Changes"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1BLik6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1BLyk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1BMCk6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBfp9ik6Eem-J7NZSmLltA" name="[0..*] subDataObject" sourceNode="_r_fe0Ck6Eem-J7NZSmLltA" targetNode="_sAIYASk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//CDC/subDataObject"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CDC/subDataObject"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBgRACk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBgRAik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBgRASk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1BNCk6Eem-J7NZSmLltA" sourceNode="_r_jJMSk6Eem-J7NZSmLltA" targetNode="_sAJmICk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//ConstructedAttribute"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ConstructedAttribute"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1oMCk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1oMSk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1oMik6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBgRBik6Eem-J7NZSmLltA" name="[1..*] dataAttribute" sourceNode="_r_fe0Ck6Eem-J7NZSmLltA" targetNode="_r_mMgCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//CDC/dataAttribute"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CDC/dataAttribute"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBgRByk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBgRCSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBgRCCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1oNik6Eem-J7NZSmLltA" sourceNode="_r_mMgCk6Eem-J7NZSmLltA" targetNode="_r_s6MSk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//DataAttribute"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DataAttribute"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1oNyk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1oOCk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1oOSk6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBgRDSk6Eem-J7NZSmLltA" name="[0..1] serviceParameter" sourceNode="_r_fe0Ck6Eem-J7NZSmLltA" targetNode="_sADfgSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//CDC/serviceParameter"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CDC/serviceParameter"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBg4ECk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBg4Eik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBg4ESk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1oPSk6Eem-J7NZSmLltA" sourceNode="_r_oowSk6Eem-J7NZSmLltA" targetNode="_r_s6MSk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//DataObject"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DataObject"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1oPik6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1oPyk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1oQCk6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBg4Fik6Eem-J7NZSmLltA" name="[0..*] cDC" sourceNode="_r_gs8ik6Eem-J7NZSmLltA" targetNode="_r_fe0Ck6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//CDCs/cDC"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CDCs/cDC"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBhfICk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBhfIik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBhfISk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1oRCk6Eem-J7NZSmLltA" sourceNode="_r_thQik6Eem-J7NZSmLltA" targetNode="_sAJmICk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//Enumeration"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Enumeration"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1oRSk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1oRik6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1oRyk6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBhfJik6Eem-J7NZSmLltA" name="[1..*] subDataAttribute" sourceNode="_r_jJMSk6Eem-J7NZSmLltA" targetNode="_sAGi0ik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttribute/subDataAttribute"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttribute/subDataAttribute"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBhfJyk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBhfKSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBhfKCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB2PQyk6Eem-J7NZSmLltA" sourceNode="_r_zn4Sk6Eem-J7NZSmLltA" targetNode="_r_s6MSk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//Literal"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Literal"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB2PRCk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB2PRSk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB2PRik6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBhfLSk6Eem-J7NZSmLltA" name="[0..*] constructedAttribute" sourceNode="_r_jwQik6Eem-J7NZSmLltA" targetNode="_r_jJMSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttributes/constructedAttribute"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttributes/constructedAttribute"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBiGMCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBiGMik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBiGMSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB2PSik6Eem-J7NZSmLltA" sourceNode="_r_0O8ik6Eem-J7NZSmLltA" targetNode="_r_YxISk6Eem-J7NZSmLltA">
+      <target xmi:type="ecore:EClass" href="nsd.ecore#//LNClass"/>
+      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//LNClass"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB2PSyk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
+        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB2PTCk6Eem-J7NZSmLltA" showIcon="false">
+          <labelFormat>italic</labelFormat>
+        </beginLabelStyle>
+        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB2PTSk6Eem-J7NZSmLltA" showIcon="false"/>
       </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBiGNik6Eem-J7NZSmLltA" name="[1..1] notice" sourceNode="_r_k-Yik6Eem-J7NZSmLltA" targetNode="_r_2EIik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//CopyrightNotice/notice"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CopyrightNotice/notice"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBitQCk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBitQik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBitQSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBitRik6Eem-J7NZSmLltA" name="[1..1] license" sourceNode="_r_k-Yik6Eem-J7NZSmLltA" targetNode="_r_xysCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//CopyrightNotice/license"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CopyrightNotice/license"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBitRyk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBitSSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBitSCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBitTSk6Eem-J7NZSmLltA" name="[1..*] literal" sourceNode="_r_thQik6Eem-J7NZSmLltA" targetNode="_r_zn4Sk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//Enumeration/literal"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Enumeration/literal"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBjUUCk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBjUUik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBjUUSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBjUVik6Eem-J7NZSmLltA" name="[0..*] enumeration" sourceNode="_r_uvYik6Eem-J7NZSmLltA" targetNode="_r_thQik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//Enumerations/enumeration"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Enumerations/enumeration"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBjUVyk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBjUWSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBjUWCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBj7Yyk6Eem-J7NZSmLltA" name="[0..1] applicableServices" sourceNode="_r_vWcik6Eem-J7NZSmLltA" targetNode="_r_bNYCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraint/applicableServices"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraint/applicableServices"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBj7ZCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBj7Zik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBj7ZSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBj7aik6Eem-J7NZSmLltA" name="[1..*] functionalConstraint" sourceNode="_r_xLoCk6Eem-J7NZSmLltA" targetNode="_r_vWcik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraints/functionalConstraint"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraints/functionalConstraint"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBkicCk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBkicik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBkicSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBkidik6Eem-J7NZSmLltA" name="[0..*] abstractLNClass" sourceNode="_r_1dECk6Eem-J7NZSmLltA" targetNode="_r_W78Ck6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//LNClasses/abstractLNClass"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//LNClasses/abstractLNClass"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBkidyk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBkieSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBkieCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBkifSk6Eem-J7NZSmLltA" name="[0..*] lNClass" sourceNode="_r_1dECk6Eem-J7NZSmLltA" targetNode="_r_0O8ik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//LNClasses/lNClass"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//LNClasses/lNClass"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBlJgCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBlJgik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBlJgSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBlJhik6Eem-J7NZSmLltA" name="[0..1] changes" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_h7ESk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/changes"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/changes"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBlJhyk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBlJiSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBlJiCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBlwkyk6Eem-J7NZSmLltA" name="[0..1] dependsOn" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_SDcCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/dependsOn"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/dependsOn"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBlwlCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBlwlik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBlwlSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBlwmik6Eem-J7NZSmLltA" name="[0..1] basicTypes" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_dpoCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/basicTypes"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/basicTypes"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBlwmyk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBlwnSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBlwnCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBmXoCk6Eem-J7NZSmLltA" name="[0..1] functionalConstraints" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_xLoCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/functionalConstraints"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/functionalConstraints"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBmXoSk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBmXoyk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBmXoik6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBmXpyk6Eem-J7NZSmLltA" name="[0..1] presenceConditions" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_68oSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/presenceConditions"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/presenceConditions"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBm-sCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBm-sik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBm-sSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBm-tik6Eem-J7NZSmLltA" name="[0..1] abbreviations" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_Vt0ik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/abbreviations"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/abbreviations"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBnlwCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBnlwik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBnlwSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBnlxik6Eem-J7NZSmLltA" name="[0..1] enumerations" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_uvYik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/enumerations"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/enumerations"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBnlxyk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBnlySk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBnlyCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBnlzSk6Eem-J7NZSmLltA" name="[0..1] constructedAttributes" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_jwQik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/constructedAttributes"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/constructedAttributes"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBoM0Ck6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBoM0ik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBoM0Sk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBoM1ik6Eem-J7NZSmLltA" name="[0..1] cDCs" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_gs8ik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/cDCs"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/cDCs"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBoz4Ck6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBoz4ik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBoz4Sk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBoz5ik6Eem-J7NZSmLltA" name="[0..1] lNClasses" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_1dECk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/lNClasses"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/lNClasses"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBoz5yk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBoz6Sk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBoz6Ck6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBpa8Ck6Eem-J7NZSmLltA" name="[1..*] doc" sourceNode="_r_5HcCk6Eem-J7NZSmLltA" targetNode="_r_rsEik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//NSDoc/doc"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NSDoc/doc"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBpa8Sk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBpa8yk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBpa8ik6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBpa9yk6Eem-J7NZSmLltA" name="[1..*] presenceCondition" sourceNode="_r_68oSk6Eem-J7NZSmLltA" targetNode="_r_5ugik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//PresenceConditions/presenceCondition"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//PresenceConditions/presenceCondition"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBqCACk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBqCAik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBqCASk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBqCBik6Eem-J7NZSmLltA" name="[1..*] serviceDataAttribute" sourceNode="_r_8KxCk6Eem-J7NZSmLltA" targetNode="_r__OESk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDC/serviceDataAttribute"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDC/serviceDataAttribute"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBqpECk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBqpEik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBqpESk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBqpFik6Eem-J7NZSmLltA" name="[0..*] serviceCDC" sourceNode="_r_9Y4Ck6Eem-J7NZSmLltA" targetNode="_r_8KxCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDCs/serviceCDC"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDCs/serviceCDC"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBqpFyk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBqpGSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBqpGCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBrQIyk6Eem-J7NZSmLltA" name="[0..*] serviceConstructedAttribute" sourceNode="_r_-nASk6Eem-J7NZSmLltA" targetNode="_r_9_8Ck6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceConstructedAttributes/serviceConstructedAttribute"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceConstructedAttributes/serviceConstructedAttribute"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBrQJCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBrQJik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBrQJSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBrQKik6Eem-J7NZSmLltA" name="[0..1] changes" sourceNode="_sAAcMSk6Eem-J7NZSmLltA" targetNode="_r_h7ESk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/changes"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/changes"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBr3MCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBr3Mik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBr3MSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBr3Nik6Eem-J7NZSmLltA" name="[0..1] functionalConstraints" sourceNode="_sAAcMSk6Eem-J7NZSmLltA" targetNode="_r_xLoCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/functionalConstraints"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/functionalConstraints"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBr3Nyk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBr3OSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBr3OCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBseQCk6Eem-J7NZSmLltA" name="[0..1] presenceConditions" sourceNode="_sAAcMSk6Eem-J7NZSmLltA" targetNode="_r_68oSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/presenceConditions"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/presenceConditions"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBseQSk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBseQyk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBseQik6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBseRyk6Eem-J7NZSmLltA" name="[0..1] abbreviations" sourceNode="_sAAcMSk6Eem-J7NZSmLltA" targetNode="_r_Vt0ik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/abbreviations"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/abbreviations"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBtFUCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBtFUik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBtFUSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBtFVik6Eem-J7NZSmLltA" name="[0..1] serviceTypeRealizations" sourceNode="_sAAcMSk6Eem-J7NZSmLltA" targetNode="_sAF7wSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/serviceTypeRealizations"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/serviceTypeRealizations"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBtsYCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBtsYik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBtsYSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBtsZik6Eem-J7NZSmLltA" name="[0..1] serviceConstructedAttributes" sourceNode="_sAAcMSk6Eem-J7NZSmLltA" targetNode="_r_-nASk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/serviceConstructedAttributes"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/serviceConstructedAttributes"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBtsZyk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBtsaSk6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBtsaCk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBtsbSk6Eem-J7NZSmLltA" name="[0..1] serviceCDCs" sourceNode="_sAAcMSk6Eem-J7NZSmLltA" targetNode="_r_9Y4Ck6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/serviceCDCs"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/serviceCDCs"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBuTcCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBuTcik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBuTcSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBuTdik6Eem-J7NZSmLltA" name="[1..*] appliesTo" sourceNode="_sACRYik6Eem-J7NZSmLltA" targetNode="_r_OZECk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNsUsage/appliesTo"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNsUsage/appliesTo"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBu6gCk6Eem-J7NZSmLltA" description="_sBdNsSk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBu6gik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-          <labelFormat>bold</labelFormat>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBu6gSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBu6hik6Eem-J7NZSmLltA" name="[0..*] serviceTypeRealization" sourceNode="_sAF7wSk6Eem-J7NZSmLltA" targetNode="_r_jJMSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceTypeRealizations/serviceTypeRealization"/>
-      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceTypeRealizations/serviceTypeRealization"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBvhkCk6Eem-J7NZSmLltA" description="_sBd0wCk6Eem-J7NZSmLltA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBvhkik6Eem-J7NZSmLltA" showIcon="false">
-          <customFeatures>labelSize</customFeatures>
-        </centerLabelStyle>
-        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_sBvhkSk6Eem-J7NZSmLltA" showIcon="false" labelColor="39,76,114">
-          <customFeatures>labelSize</customFeatures>
-        </endLabelStyle>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBzL8Ck6Eem-J7NZSmLltA" sourceNode="_r_OZECk6Eem-J7NZSmLltA" targetNode="_sAK0QCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//AppliesToType"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//AppliesToType"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBzzACk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sBzzASk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBzzAik6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sBzzBik6Eem-J7NZSmLltA" sourceNode="_r_SDcCk6Eem-J7NZSmLltA" targetNode="_sAK0QCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//DependsOnType"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DependsOnType"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sBzzByk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sBzzCCk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sBzzCSk6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB0aEyk6Eem-J7NZSmLltA" sourceNode="_r_W78Ck6Eem-J7NZSmLltA" targetNode="_r_YxISk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//AbstractLNClass"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//AbstractLNClass"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB0aFCk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB0aFSk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB0aFik6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB0aGik6Eem-J7NZSmLltA" sourceNode="_r_YxISk6Eem-J7NZSmLltA" targetNode="_sAJmICk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//AnyLNClass"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//AnyLNClass"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB0aGyk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB0aHCk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB0aHSk6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB0aISk6Eem-J7NZSmLltA" sourceNode="_r_Z_QCk6Eem-J7NZSmLltA" targetNode="_r_kXUik6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//ApplicableServiceNS"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ApplicableServiceNS"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1BICk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1BISk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1BIik6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1BJik6Eem-J7NZSmLltA" sourceNode="_r_fe0Ck6Eem-J7NZSmLltA" targetNode="_sAJmICk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//CDC"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//CDC"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1BJyk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1BKCk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1BKSk6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1BLSk6Eem-J7NZSmLltA" sourceNode="_r_h7ESk6Eem-J7NZSmLltA" targetNode="_sAK0QCk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//Changes"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Changes"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1BLik6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1BLyk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1BMCk6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1BNCk6Eem-J7NZSmLltA" sourceNode="_r_jJMSk6Eem-J7NZSmLltA" targetNode="_sAJmICk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//ConstructedAttribute"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//ConstructedAttribute"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1oMCk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1oMSk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1oMik6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1oNik6Eem-J7NZSmLltA" sourceNode="_r_mMgCk6Eem-J7NZSmLltA" targetNode="_r_s6MSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//DataAttribute"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DataAttribute"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1oNyk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1oOCk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1oOSk6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1oPSk6Eem-J7NZSmLltA" sourceNode="_r_oowSk6Eem-J7NZSmLltA" targetNode="_r_s6MSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//DataObject"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//DataObject"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1oPik6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1oPyk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1oQCk6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB1oRCk6Eem-J7NZSmLltA" sourceNode="_r_thQik6Eem-J7NZSmLltA" targetNode="_sAJmICk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//Enumeration"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Enumeration"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB1oRSk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB1oRik6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB1oRyk6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB2PQyk6Eem-J7NZSmLltA" sourceNode="_r_zn4Sk6Eem-J7NZSmLltA" targetNode="_r_s6MSk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//Literal"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//Literal"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB2PRCk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB2PRSk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB2PRik6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
-    </ownedDiagramElements>
-    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB2PSik6Eem-J7NZSmLltA" sourceNode="_r_0O8ik6Eem-J7NZSmLltA" targetNode="_r_YxISk6Eem-J7NZSmLltA">
-      <target xmi:type="ecore:EClass" href="nsd.ecore#//LNClass"/>
-      <semanticElements xmi:type="ecore:EClass" href="nsd.ecore#//LNClass"/>
-      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_sB2PSyk6Eem-J7NZSmLltA" targetArrow="InputClosedArrow" routingStyle="tree">
-        <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
-        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_sB2PTCk6Eem-J7NZSmLltA" showIcon="false">
-          <labelFormat>italic</labelFormat>
-        </beginLabelStyle>
-        <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_sB2PTSk6Eem-J7NZSmLltA" showIcon="false"/>
-      </ownedStyle>
-      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
     <ownedDiagramElements xmi:type="diagram:DEdge" uid="_sB2PUSk6Eem-J7NZSmLltA" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_kXUik6Eem-J7NZSmLltA">
       <target xmi:type="ecore:EClass" href="nsd.ecore#//NS"/>
@@ -5036,6 +4320,446 @@
       </ownedStyle>
       <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
     </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MNG0CpWEem2soT2TDjIcQ" sourceNode="_r_1dECk6Eem-J7NZSmLltA" targetNode="_r_2rMik6Eem-J7NZSmLltA" beginLabel="[0..1] lNClasses" endLabel="[0..1] nS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//LNClasses/nS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/lNClasses"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//LNClasses/nS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MNt4ypWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MNt5CpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MNt5SpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MNt6SpWEem2soT2TDjIcQ" sourceNode="_r_5ugik6Eem-J7NZSmLltA" targetNode="_r_68oSk6Eem-J7NZSmLltA" beginLabel="[0..*] presenceCondition" endLabel="[0..1] presenceConditions">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//PresenceCondition/presenceConditions"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//PresenceConditions/presenceCondition"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//PresenceCondition/presenceConditions"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MOU8CpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MOU8SpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MOU8ipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MOU9ipWEem2soT2TDjIcQ" sourceNode="_r_8KxCk6Eem-J7NZSmLltA" targetNode="_r__OESk6Eem-J7NZSmLltA" beginLabel="[0..1] serviceCDC" endLabel="[0..*] serviceDataAttribute">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDC/serviceDataAttribute"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceDataAttribute/serviceCDC"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDC/serviceDataAttribute"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MO8AypWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MO8BCpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MO8BSpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MO8CSpWEem2soT2TDjIcQ" sourceNode="_r_jJMSk6Eem-J7NZSmLltA" targetNode="_sAGi0ik6Eem-J7NZSmLltA" beginLabel="[0..1] constructedAttribute" endLabel="[0..*] subDataAttribute">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttribute/subDataAttribute"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//SubDataAttribute/constructedAttribute"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttribute/subDataAttribute"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MPjECpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MPjESpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MPjEipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MPjFipWEem2soT2TDjIcQ" sourceNode="_r_2rMik6Eem-J7NZSmLltA" targetNode="_r_68oSk6Eem-J7NZSmLltA" beginLabel="[0..1] nS" endLabel="[0..1] presenceConditions">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//NS/presenceConditions"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//PresenceConditions/nS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/presenceConditions"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MQKICpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MQKISpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MQKIipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MQKJipWEem2soT2TDjIcQ" sourceNode="_r_9_8Ck6Eem-J7NZSmLltA" targetNode="_r_-nASk6Eem-J7NZSmLltA" beginLabel="[0..*] serviceConstructedAttribute" endLabel="[0..1] serviceConstructedAttribute">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceConstructedAttribute/serviceConstructedAttribute"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceConstructedAttribute/serviceConstructedAttribute"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceConstructedAttributes/serviceConstructedAttribute"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MQxMCpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MQxMSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MQxMipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MQxNipWEem2soT2TDjIcQ" sourceNode="_r_thQik6Eem-J7NZSmLltA" targetNode="_r_uvYik6Eem-J7NZSmLltA" beginLabel="[0..*] enumeration" endLabel="[0..1] enumerations">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//Enumeration/enumerations"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Enumerations/enumeration"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Enumeration/enumerations"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MQxNypWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MQxOCpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MQxOSpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MRYQypWEem2soT2TDjIcQ" sourceNode="_r_0O8ik6Eem-J7NZSmLltA" targetNode="_r_1dECk6Eem-J7NZSmLltA" beginLabel="[0..*] lNClass" endLabel="[0..1] lNClasses">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//LNClass/lNClasses"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//LNClasses/lNClass"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//LNClass/lNClasses"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MR_UCpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MR_USpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MR_UipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MR_VipWEem2soT2TDjIcQ" sourceNode="_r_jwQik6Eem-J7NZSmLltA" targetNode="_r_2rMik6Eem-J7NZSmLltA" beginLabel="[0..1] constructedAttributes" endLabel="[0..1] nS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttributes/nS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/constructedAttributes"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttributes/nS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MR_VypWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MR_WCpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MR_WSpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MSmYCpWEem2soT2TDjIcQ" sourceNode="_r_xLoCk6Eem-J7NZSmLltA" targetNode="_r_2rMik6Eem-J7NZSmLltA" beginLabel="[0..1] functionalConstraints" endLabel="[0..1] nS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraints/nS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/functionalConstraints"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraints/nS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MSmYSpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MSmYipWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MSmYypWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MSmZypWEem2soT2TDjIcQ" sourceNode="_r_k-Yik6Eem-J7NZSmLltA" targetNode="_r_xysCk6Eem-J7NZSmLltA" beginLabel="[0..1] copyrightNotice" endLabel="[0..1] license">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//CopyrightNotice/license"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//License/copyrightNotice"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CopyrightNotice/license"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MTNcCpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MTNcSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MTNcipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MTNdipWEem2soT2TDjIcQ" sourceNode="_r_Vt0ik6Eem-J7NZSmLltA" targetNode="_r_2rMik6Eem-J7NZSmLltA" beginLabel="[0..1] abbreviations" endLabel="[0..1] nS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//Abbreviations/nS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/abbreviations"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Abbreviations/nS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MT0gCpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MT0gSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MT0gipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MT0hipWEem2soT2TDjIcQ" sourceNode="_r_YxISk6Eem-J7NZSmLltA" targetNode="_r_oowSk6Eem-J7NZSmLltA" beginLabel="[0..1] anyLNClass" endLabel="[0..*] dataObject">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//AnyLNClass/dataObject"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//DataObject/anyLNClass"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//AnyLNClass/dataObject"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MT0hypWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MT0iCpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MT0iSpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MUbkypWEem2soT2TDjIcQ" sourceNode="_r_bNYCk6Eem-J7NZSmLltA" targetNode="_r_vWcik6Eem-J7NZSmLltA" beginLabel="[0..1] applicableServices" endLabel="[0..1] functionalConstraint">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServices/functionalConstraint"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraint/applicableServices"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServices/functionalConstraint"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MUblCpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MUblSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MUblipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MVCoCpWEem2soT2TDjIcQ" sourceNode="_r_8KxCk6Eem-J7NZSmLltA" targetNode="_r_9Y4Ck6Eem-J7NZSmLltA" beginLabel="[0..*] serviceCDC" endLabel="[0..1] serviceCDCs">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDC/serviceCDCs"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDCs/serviceCDC"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDC/serviceCDCs"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MVCoSpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MVCoipWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MVCoypWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MVpsCpWEem2soT2TDjIcQ" sourceNode="_r_fe0Ck6Eem-J7NZSmLltA" targetNode="_r_mMgCk6Eem-J7NZSmLltA" beginLabel="[0..1] cDC" endLabel="[0..*] dataAttribute">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//CDC/dataAttribute"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//DataAttribute/cDC"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CDC/dataAttribute"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MVpsSpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MVpsipWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MVpsypWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MVptypWEem2soT2TDjIcQ" sourceNode="_r_68oSk6Eem-J7NZSmLltA" targetNode="_sAAcMSk6Eem-J7NZSmLltA" beginLabel="[0..1] presenceConditions" endLabel="[0..1] serviceNS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//PresenceConditions/serviceNS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/presenceConditions"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//PresenceConditions/serviceNS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MWQwCpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MWQwSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MWQwipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MWQxipWEem2soT2TDjIcQ" sourceNode="_r_-nASk6Eem-J7NZSmLltA" targetNode="_sAAcMSk6Eem-J7NZSmLltA" beginLabel="[0..1] serviceConstructedAttributes" endLabel="[0..1] serviceNS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceConstructedAttributes/serviceNS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/serviceConstructedAttributes"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceConstructedAttributes/serviceNS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MW30CpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MW30SpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MW30ipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MW31ipWEem2soT2TDjIcQ" sourceNode="_r_h7ESk6Eem-J7NZSmLltA" targetNode="_sAAcMSk6Eem-J7NZSmLltA" beginLabel="[0..1] changes" endLabel="[0..1] serviceNS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//Changes/serviceNS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/changes"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Changes/serviceNS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MW31ypWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MW32CpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MW32SpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MXe4CpWEem2soT2TDjIcQ" sourceNode="_r_jJMSk6Eem-J7NZSmLltA" targetNode="_r_jwQik6Eem-J7NZSmLltA" beginLabel="[0..*] constructedAttribute" endLabel="[0..1] constructedAttributes">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttribute/constructedAttributes"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttributes/constructedAttribute"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttribute/constructedAttributes"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MXe4SpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MXe4ipWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MXe4ypWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MXe5ypWEem2soT2TDjIcQ" sourceNode="_r_uvYik6Eem-J7NZSmLltA" targetNode="_r_2rMik6Eem-J7NZSmLltA" beginLabel="[0..1] enumerations" endLabel="[0..1] nS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//Enumerations/nS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/enumerations"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Enumerations/nS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MYF8CpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MYF8SpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MYF8ipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MYF9ipWEem2soT2TDjIcQ" sourceNode="_r_VGwSk6Eem-J7NZSmLltA" targetNode="_r_Vt0ik6Eem-J7NZSmLltA" beginLabel="[0..*] abbreviation" endLabel="[0..1] abbreviations">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//Abbreviation/abbreviations"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Abbreviations/abbreviation"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Abbreviation/abbreviations"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MYF9ypWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MYF-CpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MYF-SpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MYtAypWEem2soT2TDjIcQ" sourceNode="_r_Z_QCk6Eem-J7NZSmLltA" targetNode="_sACRYik6Eem-J7NZSmLltA" beginLabel="[0..1] applicableServiceNS" endLabel="[0..*] serviceNsUsage">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServiceNS/serviceNsUsage"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNsUsage/applicableServiceNS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServiceNS/serviceNsUsage"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MZUECpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MZUESpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MZUEipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MZUFipWEem2soT2TDjIcQ" sourceNode="_r_fe0Ck6Eem-J7NZSmLltA" targetNode="_sADfgSk6Eem-J7NZSmLltA" beginLabel="[0..1] cDC" endLabel="[0..1] serviceParameter">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//CDC/serviceParameter"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceParameter/cDC"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CDC/serviceParameter"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MZ7ICpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MZ7ISpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MZ7IipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MZ7JipWEem2soT2TDjIcQ" sourceNode="_r_W78Ck6Eem-J7NZSmLltA" targetNode="_r_1dECk6Eem-J7NZSmLltA" beginLabel="[0..*] abstractLNClass" endLabel="[0..1] lNClasses">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//AbstractLNClass/lNClasses"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//LNClasses/abstractLNClass"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//AbstractLNClass/lNClasses"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MaiMCpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MaiMSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MaiMipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MaiNipWEem2soT2TDjIcQ" sourceNode="_r_fe0Ck6Eem-J7NZSmLltA" targetNode="_r_gs8ik6Eem-J7NZSmLltA" beginLabel="[0..*] cDC" endLabel="[0..1] cDCs">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//CDC/cDCs"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CDCs/cDC"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CDC/cDCs"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MaiNypWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MaiOCpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MaiOSpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MbJQypWEem2soT2TDjIcQ" sourceNode="_r_xLoCk6Eem-J7NZSmLltA" targetNode="_sAAcMSk6Eem-J7NZSmLltA" beginLabel="[0..1] functionalConstraints" endLabel="[0..1] serviceNS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraints/serviceNS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/functionalConstraints"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraints/serviceNS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MbJRCpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MbJRSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MbJRipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MbwUCpWEem2soT2TDjIcQ" sourceNode="_r_cbgSk6Eem-J7NZSmLltA" targetNode="_r_dpoCk6Eem-J7NZSmLltA" beginLabel="[0..*] basicType" endLabel="[0..1] basicTypes">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//BasicType/basicTypes"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//BasicTypes/basicType"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//BasicType/basicTypes"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MbwUSpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MbwUipWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MbwUypWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MbwVypWEem2soT2TDjIcQ" sourceNode="_sAAcMSk6Eem-J7NZSmLltA" targetNode="_sAF7wSk6Eem-J7NZSmLltA" beginLabel="[0..1] serviceNS" endLabel="[0..1] serviceTypeRealizations">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/serviceTypeRealizations"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceTypeRealizations/serviceNS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/serviceTypeRealizations"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3McXYCpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3McXYSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3McXYipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3McXZipWEem2soT2TDjIcQ" sourceNode="_r_9Y4Ck6Eem-J7NZSmLltA" targetNode="_sAAcMSk6Eem-J7NZSmLltA" beginLabel="[0..1] serviceCDCs" endLabel="[0..1] serviceNS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDCs/serviceNS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/serviceCDCs"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceCDCs/serviceNS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3Mc-cCpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3Mc-cSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3Mc-cipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3Mc-dipWEem2soT2TDjIcQ" sourceNode="_r_fe0Ck6Eem-J7NZSmLltA" targetNode="_sAIYASk6Eem-J7NZSmLltA" beginLabel="[0..1] cDC" endLabel="[0..*] subDataObject">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//CDC/subDataObject"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//SubDataObject/cDC"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CDC/subDataObject"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3Mc-dypWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3Mc-eCpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3Mc-eSpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MdlgSpWEem2soT2TDjIcQ" sourceNode="_r_jJMSk6Eem-J7NZSmLltA" targetNode="_sAF7wSk6Eem-J7NZSmLltA" beginLabel="[0..*] serviceTypeRealization" endLabel="[0..1] serviceTypeRealizations">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttribute/serviceTypeRealizations"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceTypeRealizations/serviceTypeRealization"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ConstructedAttribute/serviceTypeRealizations"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MdlgipWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MdlgypWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MdlhCpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MdliCpWEem2soT2TDjIcQ" sourceNode="_r_thQik6Eem-J7NZSmLltA" targetNode="_r_zn4Sk6Eem-J7NZSmLltA" beginLabel="[0..1] enumeration" endLabel="[0..*] literal">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//Enumeration/literal"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Literal/enumeration"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Enumeration/literal"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MeMkCpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MeMkSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MeMkipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MeMlipWEem2soT2TDjIcQ" sourceNode="_r_dpoCk6Eem-J7NZSmLltA" targetNode="_r_2rMik6Eem-J7NZSmLltA" beginLabel="[0..1] basicTypes" endLabel="[0..1] nS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//BasicTypes/nS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/basicTypes"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//BasicTypes/nS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MezoCpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MezoSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MezoipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MezpipWEem2soT2TDjIcQ" sourceNode="_r_gs8ik6Eem-J7NZSmLltA" targetNode="_r_2rMik6Eem-J7NZSmLltA" beginLabel="[0..1] cDCs" endLabel="[0..1] nS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//CDCs/nS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/cDCs"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CDCs/nS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MezpypWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MezqCpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MezqSpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MfasypWEem2soT2TDjIcQ" sourceNode="_r_rsEik6Eem-J7NZSmLltA" targetNode="_r_5HcCk6Eem-J7NZSmLltA" beginLabel="[0..*] doc" endLabel="[0..1] nSDoc">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//Doc/nSDoc"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NSDoc/doc"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Doc/nSDoc"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MfatCpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MfatSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MfatipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MgBwCpWEem2soT2TDjIcQ" sourceNode="_r_OZECk6Eem-J7NZSmLltA" targetNode="_sACRYik6Eem-J7NZSmLltA" beginLabel="[0..*] appliesTo" endLabel="[0..1] serviceNsUsage">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//AppliesToType/serviceNsUsage"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNsUsage/appliesTo"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//AppliesToType/serviceNsUsage"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MgBwSpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MgBwipWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MgBwypWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MgBxypWEem2soT2TDjIcQ" sourceNode="_r_Vt0ik6Eem-J7NZSmLltA" targetNode="_sAAcMSk6Eem-J7NZSmLltA" beginLabel="[0..1] abbreviations" endLabel="[0..1] serviceNS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//Abbreviations/serviceNS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceNS/abbreviations"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Abbreviations/serviceNS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3Mgo0CpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3Mgo0SpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3Mgo0ipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3Mgo1ipWEem2soT2TDjIcQ" sourceNode="_r_bNYCk6Eem-J7NZSmLltA" targetNode="_r_qd8Ck6Eem-J7NZSmLltA" beginLabel="[0..1] applicableServices" endLabel="[0..*] dataSetMemberOf">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServices/dataSetMemberOf"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//DataSetMemberOf/applicableServices"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServices/dataSetMemberOf"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MhP4CpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MhP4SpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MhP4ipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MhP5ipWEem2soT2TDjIcQ" sourceNode="_r_vWcik6Eem-J7NZSmLltA" targetNode="_r_xLoCk6Eem-J7NZSmLltA" beginLabel="[0..*] functionalConstraint" endLabel="[0..1] functionalConstraints">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraint/functionalConstraints"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraints/functionalConstraint"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//FunctionalConstraint/functionalConstraints"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MhP5ypWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MhP6CpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MhP6SpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3Mh28CpWEem2soT2TDjIcQ" sourceNode="_r_kXUik6Eem-J7NZSmLltA" targetNode="_r_k-Yik6Eem-J7NZSmLltA" beginLabel="[0..1] copyrighted" endLabel="[0..1] copyright">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//Copyrighted/copyright"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Copyrighted/copyright"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CopyrightNotice/copyrighted"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3Mh28SpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3Mh28ipWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3Mh28ypWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3Mh29ypWEem2soT2TDjIcQ" sourceNode="_r_UfsCk6Eem-J7NZSmLltA" targetNode="_r_bNYCk6Eem-J7NZSmLltA" beginLabel="[0..*] service" endLabel="[0..1] applicableServices">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//ServiceType/applicableServices"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ServiceType/applicableServices"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//ApplicableServices/service"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MieACpWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MieASpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MieAipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MieBipWEem2soT2TDjIcQ" sourceNode="_r_h7ESk6Eem-J7NZSmLltA" targetNode="_r_2rMik6Eem-J7NZSmLltA" beginLabel="[0..1] changes" endLabel="[0..1] nS">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//Changes/nS"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//NS/changes"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Changes/nS"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MieBypWEem2soT2TDjIcQ" description="_3MNt4CpWEem2soT2TDjIcQ" sourceArrow="InputArrow" targetArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MieCCpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MieCSpWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
+    <ownedDiagramElements xmi:type="diagram:DEdge" uid="_3MjFEypWEem2soT2TDjIcQ" sourceNode="_r_k-Yik6Eem-J7NZSmLltA" targetNode="_r_2EIik6Eem-J7NZSmLltA" beginLabel="[0..1] copyrightNotice" endLabel="[0..1] notice">
+      <target xmi:type="ecore:EReference" href="nsd.ecore#//CopyrightNotice/notice"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//Notice/copyrightNotice"/>
+      <semanticElements xmi:type="ecore:EReference" href="nsd.ecore#//CopyrightNotice/notice"/>
+      <ownedStyle xmi:type="diagram:EdgeStyle" uid="_3MjFFCpWEem2soT2TDjIcQ" description="_3MO8ACpWEem2soT2TDjIcQ" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+        <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_3MjFFSpWEem2soT2TDjIcQ" showIcon="false"/>
+        <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_3MjFFipWEem2soT2TDjIcQ" showIcon="false"/>
+      </ownedStyle>
+      <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='Bi-directional%20EC_EReference%20']"/>
+    </ownedDiagramElements>
     <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
     <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_rQwJgCk6Eem-J7NZSmLltA"/>
     <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
index 8c0d899..2e59383 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
@@ -6,10 +6,8 @@
       <details key="name" value="AppliesTo_._type"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Identifier of the namespace, e.g., &quot;IEC 61850-7-4&quot;, &quot;(Tr)IEC 61850-90-4&quot;."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="id"/>
@@ -17,9 +15,6 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="publicationStage" eType="#//PubStage"
         defaultValueLiteral="IS" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The publication stage of the namespace, by default IS."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="publicationStage"/>
@@ -27,24 +22,22 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="revision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="A" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Revision of the namespace version, by default 'A'."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="revision"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNsUsage" ordered="false"
+        eType="#//ServiceNsUsage" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ServiceNsUsage/appliesTo"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="DependsOnType" eSuperTypes="#//NSDObjectWithVersionAndRelease">
+  <eClassifiers xsi:type="ecore:EClass" name="DependsOn" eSuperTypes="#//NSDObjectWithVersionAndRelease">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="DependsOn_._type"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Identifier of the namespace, e.g., &quot;IEC 61850-7-4&quot;, &quot;(Tr)IEC 61850-90-4&quot;."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="id"/>
@@ -52,9 +45,6 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="publicationStage" eType="#//PubStage"
         defaultValueLiteral="IS" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The publication stage of the namespace, by default IS."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="publicationStage"/>
@@ -62,14 +52,13 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="revision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="A" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Revision of the namespace version, by default 'A'."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="revision"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" ordered="false" eType="#//NS"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//NS/dependsOn"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DocumentRoot">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -99,59 +88,35 @@
         <details key="name" value="xsi:schemaLocation"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="applicableServiceNS" upperBound="-2"
-        eType="#//ApplicableServiceNS" volatile="true" transient="true" derived="true"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Root element of a file holding the allowed usages of ServiceNS-es."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="applicableServiceNS" eType="#//ApplicableServiceNS"
+        volatile="true" transient="true" unsettable="true" derived="true" containment="true"
+        resolveProxies="false">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ApplicableServiceNS"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="copyright" upperBound="-2"
-        eType="#//CopyrightNotice" volatile="true" transient="true" derived="true"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The copyright notice attached to the XML"/>
-      </eAnnotations>
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="Copyright"/>
-        <details key="namespace" value="##targetNamespace"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" upperBound="-2" eType="#//NS"
-        volatile="true" transient="true" derived="true" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Root element of a namespace definition (NSD) file."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" eType="#//NS" volatile="true"
+        transient="true" unsettable="true" derived="true" containment="true" resolveProxies="false">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="NS"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="nSDoc" upperBound="-2"
-        eType="#//NSDoc" volatile="true" transient="true" derived="true" containment="true"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nSDoc" eType="#//NSDoc"
+        volatile="true" transient="true" unsettable="true" derived="true" containment="true"
         resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Root element of a file holding the documentation strings of an NSD file (NSDOC)."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="NSDoc"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNS" upperBound="-2"
-        eType="#//ServiceNS" volatile="true" transient="true" derived="true" containment="true"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNS" eType="#//ServiceNS"
+        volatile="true" transient="true" unsettable="true" derived="true" containment="true"
         resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Root element of a service namespace definition (SNSD) file."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ServiceNS"/>
@@ -164,83 +129,76 @@
       <details key="name" value="Service_._type"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="#//ACSIServicesKind"
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//ACSIServicesKind"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="applicableServices" ordered="false"
+        eType="#//ApplicableServices" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ApplicableServices/service"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Abbreviation">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of an abbreviation."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tAbbreviation"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to a full description of this abbreviation."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="descID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the abbreviation, as used in IEC 61850 data models."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="abbreviations" ordered="false"
+        eType="#//Abbreviations" unsettable="true" resolveProxies="false" eOpposite="#//Abbreviations/abbreviation"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Abbreviations">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of abbreviationss which are introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tAbbreviations"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="abbreviation" lowerBound="1"
-        upperBound="-1" eType="#//Abbreviation" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Definition of an abbreviation."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="abbreviation" ordered="false"
+        upperBound="-1" eType="#//Abbreviation" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//Abbreviation/abbreviations">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Abbreviation"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" ordered="false" eType="#//NS"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//NS/abbreviations"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNS" ordered="false"
+        eType="#//ServiceNS" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ServiceNS/abbreviations"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="AbstractLNClass" eSuperTypes="#//AnyLNClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of an abstract logical node and its contents."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tAbstractLNClass"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The name of the abstract logical node."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="lNClasses" ordered="false"
+        eType="#//LNClasses" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//LNClasses/abstractLNClass"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="ACSIServicesKind">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Enumeration holding the names of all ACSI services, as defined in Part 7-2. Is conceptually identical to the 7-2 ServiceNameKind enumeration (except the Unknown)."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tACSIServicesKind"/>
     </eAnnotations>
@@ -311,28 +269,21 @@
     </eAnnotations>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="AnyLNClass" abstract="true" eSuperTypes="#//TitledClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a logical node (abstract or not) and its contents."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tAnyLNClass"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="dataObject" upperBound="-1"
-        eType="#//DataObject" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Child Data Object of the logical node."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="dataObject" ordered="false"
+        upperBound="-1" eType="#//DataObject" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//DataObject/anyLNClass">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="DataObject"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="base" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the abstract LN class this one extends (directly)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="base" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="base"/>
@@ -340,39 +291,28 @@
     </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ApplicableServiceNS" eSuperTypes="#//Copyrighted">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Describes the allowed usages of ServiceNS-es."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tApplicableServiceNS"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNsUsage" lowerBound="1"
-        upperBound="-1" eType="#//ServiceNsUsage" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Specification of a ServiceNS and all NS it can be used for."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNsUsage" ordered="false"
+        upperBound="-1" eType="#//ServiceNsUsage" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//ServiceNsUsage/applicableServiceNS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ServiceNsUsage"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="date" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Date of definition of the file."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="date" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="date"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//UnsignedInt"
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//UnsignedInt"
         unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Version of the file."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="version"/>
@@ -380,93 +320,79 @@
     </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ApplicableServices">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Applicable services for a given functional constraint."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tApplicableServices"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="service" upperBound="-1"
-        eType="#//ServiceType" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="If present, indicates that the service with given name applies to attributes with the specified FC (otherwise it may not be used)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="service" ordered="false"
+        upperBound="-1" eType="#//ServiceType" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//ServiceType/applicableServices">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Service"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="dataSetMemberOf" upperBound="-1"
-        eType="#//DataSetMemberOf" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="An attribute of this FC can be member of a dataset for a control block type indicated by attribute cb if and only if this element is present."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="dataSetMemberOf" ordered="false"
+        upperBound="-1" eType="#//DataSetMemberOf" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//DataSetMemberOf/applicableServices">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="DataSetMemberOf"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="functionalConstraint" ordered="false"
+        eType="#//FunctionalConstraint" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//FunctionalConstraint/applicableServices"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EDataType" name="AttributeTypeKind" instanceClassName="org.eclipse.emf.common.util.Enumerator">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Type kind of a data attribute, which may be &quot;undefined&quot;."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tAttributeTypeKind"/>
       <details key="memberTypes" value="tDefinedAttributeTypeKind tUndefinedAttributeTypeKind"/>
     </eAnnotations>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="BasicType">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a basic type for a data attribute."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tBasicType"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to a full description of this object."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="descID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the basic type (e.g., INT32), as used in SCL."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="basicTypes" ordered="false"
+        eType="#//BasicTypes" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//BasicTypes/basicType"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="BasicTypes">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of basic types for data attributes introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tBasicTypes"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="basicType" lowerBound="1"
-        upperBound="-1" eType="#//BasicType" containment="true" resolveProxies="false">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="basicType" ordered="false"
+        upperBound="-1" eType="#//BasicType" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//BasicType/basicTypes">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="BasicType"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" ordered="false" eType="#//NS"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//NS/basicTypes"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="CBKind">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Enumeration of control block kinds."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tCBKind"/>
     </eAnnotations>
@@ -482,31 +408,31 @@
     </eAnnotations>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="CDC" eSuperTypes="#//TitledClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a Common Data Class (CDC). It is always non-abstract."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tCDC"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="subDataObject" upperBound="-1"
-        eType="#//SubDataObject" containment="true" resolveProxies="false">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subDataObject" ordered="false"
+        upperBound="-1" eType="#//SubDataObject" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//SubDataObject/cDC">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="SubDataObject"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="dataAttribute" lowerBound="1"
-        upperBound="-1" eType="#//DataAttribute" containment="true" resolveProxies="false">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="dataAttribute" ordered="false"
+        upperBound="-1" eType="#//DataAttribute" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//DataAttribute/cDC">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="DataAttribute"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceParameter" eType="#//ServiceParameter"
-        containment="true" resolveProxies="false">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceParameter" ordered="false"
+        eType="#//ServiceParameter" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//ServiceParameter/cDC">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ServiceParameter"/>
@@ -515,18 +441,13 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="enumParameterized" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether this CDC has at least one child data attribute of typeKind ENUMERATION but its exact enumeration type is left open."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="enumParameterized"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the common data class."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
@@ -534,9 +455,6 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="statistics" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether DataObject of this CDC can be used for statistics."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="statistics"/>
@@ -545,65 +463,52 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeKindParameterized"
         eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether this CDC has at least one child data attribute with typeKind &quot;undefined&quot;.&#xA;Cannot be set to true at the same time as sibling attribute enumParameterized."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="typeKindParameterized"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variant" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Token">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Identification of the variant of the CDC (e.g., SPG_SP)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variant" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Token"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="variant"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="cDCs" ordered="false" eType="#//CDCs"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//CDCs/cDC"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="CDCs">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of CDCs introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tCDCs"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="cDC" upperBound="-1" eType="#//CDC"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Definition of a common data class."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="cDC" ordered="false" upperBound="-1"
+        eType="#//CDC" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//CDC/cDCs">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="CDC"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" ordered="false" eType="#//NS"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//NS/cDCs"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Changes" eSuperTypes="#//NSDObjectWithVersionAndRelease">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Namespace history, e.g., which version it is based on and which TISSUES it includes since then."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tChanges"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="changesID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to a textual description of changes (not TISSUE list). Shall only be used for private namespaces."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="changesID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="changesID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="date" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Date">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The date since the Tissues have been logged."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="date" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Date"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="date"/>
@@ -611,83 +516,77 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="revision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="A" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Revision of the namespace this NSD file is based on, per default 'A'."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="revision"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="tissues" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Comma-separated list of TISSUE numbers that were implemented since the previous namespace version/revision/release."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="tissues" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="tissues"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" ordered="false" eType="#//NS"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//NS/changes"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNS" ordered="false"
+        eType="#//ServiceNS" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ServiceNS/changes"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ConstructedAttribute" eSuperTypes="#//TitledClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a constructed (structured) data attribute."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tConstructedAttribute"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="subDataAttribute" lowerBound="1"
-        upperBound="-1" eType="#//SubDataAttribute" containment="true" resolveProxies="false">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="subDataAttribute" ordered="false"
+        upperBound="-1" eType="#//SubDataAttribute" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//SubDataAttribute/constructedAttribute">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="SubDataAttribute"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the constructed (structured) data attribute."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constructedAttributes"
+        ordered="false" eType="#//ConstructedAttributes" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//ConstructedAttributes/constructedAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceTypeRealizations"
+        ordered="false" eType="#//ServiceTypeRealizations" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//ServiceTypeRealizations/serviceTypeRealization"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ConstructedAttributes">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of Constructed Attributes introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tConstructedAttributes"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="constructedAttribute" upperBound="-1"
-        eType="#//ConstructedAttribute" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Definition of a constructed (structured) data attribute."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constructedAttribute" ordered="false"
+        upperBound="-1" eType="#//ConstructedAttribute" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//ConstructedAttribute/constructedAttributes">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ConstructedAttribute"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" ordered="false" eType="#//NS"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//NS/constructedAttributes"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Copyrighted">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Add description for a copyrighted XML."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tCopyrighted"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="copyright" eType="#//CopyrightNotice"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The copyright notice attached to the XML"/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="copyright" ordered="false"
+        eType="#//CopyrightNotice" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//CopyrightNotice/copyrighted">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Copyright"/>
@@ -696,40 +595,33 @@
     </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="CopyrightNotice">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Copyright notice definition."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tCopyrightNotice"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="notice" lowerBound="1"
-        eType="#//Notice" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The textual copyright notice."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="notice" ordered="false"
+        eType="#//Notice" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//Notice/copyrightNotice">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Notice"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="license" lowerBound="1"
-        eType="#//License" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The license definition."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="license" ordered="false"
+        eType="#//License" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//License/copyrightNotice">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="License"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="copyrighted" ordered="false"
+        eType="#//Copyrighted" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//Copyrighted/copyright"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DataAttribute" eSuperTypes="#//DocumentedClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a Data Attribute."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tDataAttribute"/>
       <details key="kind" value="empty"/>
@@ -741,10 +633,8 @@
         <details key="name" value="dchg"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//NormalizedString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Default value for the data attribute. May only be defined for data attributes with typeKind=&quot;BASIC&quot; or &quot;ENUMERATED&quot;."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//NormalizedString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="defaultValue"/>
@@ -757,10 +647,8 @@
         <details key="name" value="dupd"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fc" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Functional constraint of the data attribute."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fc" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="fc"/>
@@ -768,27 +656,20 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="isArray" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether the element is an array. By default, not an array."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="isArray"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxIndexAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the Attribute holding the maximal index of the array.&#xA;Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxIndexAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="maxIndexAttribute"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Allowed maximal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind=&quot;BASIC&quot; and corresponding to a number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="maxValue"/>
@@ -796,27 +677,20 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="minIndex" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//UnsignedInt"
         defaultValueLiteral="0" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Lowest index of the array.&#xA;Is relevant information if and only if isArray=true.&#xA;By default 0."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="minIndex"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="minValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Allowed minimal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind=&quot;BASIC&quot; and corresponding to a number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="minValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="minValue"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the data attribute."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
@@ -824,27 +698,20 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCond" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="M" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Presence condition of the element. By default 'M' (mandatory)."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCond"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition. Can be a sibling element or a group number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCondArgs"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition: a documentation identifier referring to some free text."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCondArgsID"/>
@@ -857,19 +724,15 @@
         <details key="name" value="qchg"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sizeAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Sibling data attribute name holding the size of the array.&#xA;Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sizeAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="sizeAttribute"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The type of the data attribute, e.g., the name of a basic type like INT32, the name of an enumeration of a constructed data attribute - depending on the sibling typeKind. If not provided, shall be defined by the &quot;parent&quot; element."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="type"/>
@@ -877,55 +740,42 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeKind" eType="#//AttributeTypeKind"
         defaultValueLiteral="BASIC" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The kind of the data attribute's type. By  default, &quot;BASIC&quot;."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="typeKind"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="cDC" ordered="false" eType="#//CDC"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//CDC/dataAttribute"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DataObject" eSuperTypes="#//DocumentedClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a Data Object of a logical node."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tDataObject"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="dsPresCond" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="M" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Presence condition of the element. By default 'M' (mandatory)."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="dsPresCond"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dsPresCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition. Can be a sibling element or a group number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dsPresCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="dsPresCondArgs"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dsPresCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition: a documentation identifier referring to some free text."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dsPresCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="dsPresCondArgsID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the data object."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
@@ -933,27 +783,20 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCond" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="M" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Presence condition of the element. By default 'M' (mandatory)."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCond"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition. Can be a sibling element or a group number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCondArgs"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition: a documentation identifier referring to some free text."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCondArgsID"/>
@@ -961,27 +804,20 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="transient" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether this data object is transient. By default, it is not."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="transient"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Type of the data object, i.e., the name of the CDC."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="type"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="underlyingType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Type to be used for type-open CDCs, e.g., enumeration to be used for enumeration-based CDCs (e.g., ENS, ENC, ENG)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="underlyingType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="underlyingType"/>
@@ -989,38 +825,31 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="underlyingTypeKind" eType="#//DefinedAttributeTypeKind"
         unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The typeKind to be used for all &quot;undefined&quot; attributes of the CDC of this DataObject."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="underlyingTypeKind"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="anyLNClass" ordered="false"
+        eType="#//AnyLNClass" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//AnyLNClass/dataObject"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DataSetMemberOf">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Indication of a given object can be a data set member of a given control block."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tDataSetMemberOf"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cb" lowerBound="1" eType="#//CBKind"
-        unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Control block kind."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cb" eType="#//CBKind" unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="cb"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="applicableServices" ordered="false"
+        eType="#//ApplicableServices" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ApplicableServices/dataSetMemberOf"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="DefinedAttributeTypeKind">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Type kind of a data attribute."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tDefinedAttributeTypeKind"/>
     </eAnnotations>
@@ -1047,9 +876,6 @@
     </eAnnotations>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Doc">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="A key-value pair for documentation. Attribute &quot;id&quot; is the key (the documentation string identifier) and the value of the element is the documentation string itself."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tDoc"/>
       <details key="kind" value="mixed"/>
@@ -1080,38 +906,31 @@
         <details key="group" value="#group:1"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Identifier of the documentation string."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="id"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nSDoc" ordered="false"
+        eType="#//NSDoc" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//NSDoc/doc"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DocumentedClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="A class with description."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tDocumentedClass"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="deprecated" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether this object is classified as deprecated or not. By default not deprecated."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="deprecated"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to a full description of this object."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="descID"/>
@@ -1119,9 +938,6 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="informative" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether this object is classified as informative or not. By default not informative."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="informative"/>
@@ -1129,129 +945,114 @@
     </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Enumeration" eSuperTypes="#//TitledClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of an enumeration."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tEnumeration"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="literal" lowerBound="1"
-        upperBound="-1" eType="#//Literal" containment="true" resolveProxies="false">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="literal" ordered="false"
+        upperBound="-1" eType="#//Literal" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//Literal/enumeration">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Literal"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="inheritedFrom" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the enumeration which is extended by the current enumeration."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="inheritedFrom" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="inheritedFrom"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the enumeration."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="enumerations" ordered="false"
+        eType="#//Enumerations" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//Enumerations/enumeration"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Enumerations">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of Enumerations introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tEnumerations"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="enumeration" upperBound="-1"
-        eType="#//Enumeration" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Definition of an enumeration."/>
-      </eAnnotations>
+        eType="#//Enumeration" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//Enumeration/enumerations">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Enumeration"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" ordered="false" eType="#//NS"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//NS/enumerations"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="FunctionalConstraint">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a Functional Constraint."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tFunctionalConstraint"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="applicableServices" eType="#//ApplicableServices"
-        containment="true" resolveProxies="false">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="applicableServices" ordered="false"
+        eType="#//ApplicableServices" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//ApplicableServices/functionalConstraint">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ApplicableServices"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="abbreviation" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Abbreviated name of the FC (e.g., ST, MX, etc.)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="abbreviation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="abbreviation"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to a full description of this object."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="descID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="titleID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to the title (alias) of this object."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="titleID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="titleID"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="functionalConstraints"
+        ordered="false" eType="#//FunctionalConstraints" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//FunctionalConstraints/functionalConstraint"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="FunctionalConstraints">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of Functional Constraints introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tFunctionalConstraints"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="functionalConstraint" lowerBound="1"
-        upperBound="-1" eType="#//FunctionalConstraint" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Definition of a Functional Constraint."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="functionalConstraint" ordered="false"
+        upperBound="-1" eType="#//FunctionalConstraint" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//FunctionalConstraint/functionalConstraints">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="FunctionalConstraint"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" ordered="false" eType="#//NS"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//NS/functionalConstraints"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNS" ordered="false"
+        eType="#//ServiceNS" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ServiceNS/functionalConstraints"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="License">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Describe the license definition."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tLicense"/>
       <details key="kind" value="mixed"/>
@@ -1265,28 +1066,23 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//LicenseKind"
         unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="kind of license"/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="kind"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//NormalizedString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="path to the license file"/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//NormalizedString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="uri"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="copyrightNotice" ordered="false"
+        eType="#//CopyrightNotice" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//CopyrightNotice/license"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="LicenseKind">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Kind of license"/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tLicenseKind"/>
     </eAnnotations>
@@ -1301,24 +1097,19 @@
     </eAnnotations>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Literal" eSuperTypes="#//DocumentedClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a literal of an enumeration."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tLiteral"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="literalVal" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Enumeration literal integer value."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="literalVal" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="literalVal"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="Name of the enumeration's literal."/>
       </eAnnotations>
@@ -1327,20 +1118,17 @@
         <details key="name" value="name"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="enumeration" ordered="false"
+        eType="#//Enumeration" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//Enumeration/literal"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="LNClass" eSuperTypes="#//AnyLNClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a concrete (i.e., not abstract) logical node and its contents. At most one of &quot;base&quot; and &quot;isExtension&quot; shall be defined."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tLNClass"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="canHaveLOG" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether a LOG can be allocated to this logical node. By default, false."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="canHaveLOG"/>
@@ -1348,59 +1136,49 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="isExtension" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether this logical node is an extension of another non-abstract logical node (with the same LN class name) defined in a namespace this one imports."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="isExtension"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The logical node class name."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="lNClasses" ordered="false"
+        eType="#//LNClasses" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//LNClasses/lNClass"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="LNClasses">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of LNClasses introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tLNClasses"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="abstractLNClass" upperBound="-1"
-        eType="#//AbstractLNClass" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Definition of an abstract logical node."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="abstractLNClass" ordered="false"
+        upperBound="-1" eType="#//AbstractLNClass" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//AbstractLNClass/lNClasses">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="AbstractLNClass"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="lNClass" upperBound="-1"
-        eType="#//LNClass" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Definition of a (non-abstract) logical node."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="lNClass" ordered="false"
+        upperBound="-1" eType="#//LNClass" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//LNClass/lNClasses">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="LNClass"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" ordered="false" eType="#//NS"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//NS/lNClasses"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Notice">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Textual notice"/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tNotice"/>
       <details key="kind" value="mixed"/>
@@ -1412,42 +1190,36 @@
         <details key="name" value=":mixed"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="copyrightNotice" ordered="false"
+        eType="#//CopyrightNotice" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//CopyrightNotice/notice"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="NS" eSuperTypes="#//Copyrighted #//NSDObjectWithVersionAndRelease">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tNS"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="changes" eType="#//Changes"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The version/revision/release this namespace is based on, including the TISSUEs implemented in this release."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="changes" ordered="false"
+        eType="#//Changes" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//Changes/nS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Changes"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="dependsOn" eType="#//DependsOnType"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The namespace identification this namespace depends on (and whose definitions are imported into this one)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="dependsOn" ordered="false"
+        eType="#//DependsOn" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//DependsOn/nS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="DependsOn"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="basicTypes" eType="#//BasicTypes"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of basic types added by this namespace. Is cumulative to those defined in namespaces this one DependsOn (may not redefine &quot;included&quot; ones). Note: shall only be used in practice by the 7-2 namespace."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="basicTypes" ordered="false"
+        eType="#//BasicTypes" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//BasicTypes/nS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="BasicTypes"/>
@@ -1455,43 +1227,35 @@
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="functionalConstraints"
-        eType="#//FunctionalConstraints" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of Functional Constraints added by this namespace. Is cumulative to those defined in namespaces this one DependsOn (may not redefine &quot;included&quot; ones)."/>
-      </eAnnotations>
+        ordered="false" eType="#//FunctionalConstraints" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//FunctionalConstraints/nS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="FunctionalConstraints"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="presenceConditions" eType="#//PresenceConditions"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of presence conditions added by this namespace. Is cumulative to those defined in namespaces this one DependsOn (may not redefine &quot;included&quot; ones.)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="presenceConditions" ordered="false"
+        eType="#//PresenceConditions" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//PresenceConditions/nS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="PresenceConditions"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="abbreviations" eType="#//Abbreviations"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of abbreviations added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine &quot;included&quot; ones.)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="abbreviations" ordered="false"
+        eType="#//Abbreviations" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//Abbreviations/nS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Abbreviations"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="enumerations" eType="#//Enumerations"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of Enumerations added by this namespace. Is cumulative to those defined in namespaces this one DependsOn (may not redefine &quot;included&quot; ones)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="enumerations" ordered="false"
+        eType="#//Enumerations" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//Enumerations/nS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Enumerations"/>
@@ -1499,51 +1263,40 @@
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="constructedAttributes"
-        eType="#//ConstructedAttributes" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of Constructed Attributes added by this namespace. Constructed Attributes are not allowed to be extended by another namespace. Note: shall only be used in practice by the 7-3"/>
-      </eAnnotations>
+        ordered="false" eType="#//ConstructedAttributes" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//ConstructedAttributes/nS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ConstructedAttributes"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="cDCs" eType="#//CDCs" containment="true"
-        resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of CDCs added by this namespace. CDCs are not allowed to be extended by another namespace. Note: shall only be used in practice by the 7-3"/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="cDCs" ordered="false" eType="#//CDCs"
+        unsettable="true" containment="true" resolveProxies="false" eOpposite="#//CDCs/nS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="CDCs"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="lNClasses" eType="#//LNClasses"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of LNClasses added by this namespace. Is cumulative to those defined in namespaces this one DependsOn (may not redefine &quot;included&quot; ones)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="lNClasses" ordered="false"
+        eType="#//LNClasses" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//LNClasses/nS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="LNClasses"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to a full description of this NS."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="descID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Identifier of the namespace, e.g., &quot;IEC 61850-7-4&quot;, &quot;(Tr)IEC 61850-90-4&quot;."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="id"/>
@@ -1551,9 +1304,6 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="publicationStage" eType="#//PubStage"
         defaultValueLiteral="IS" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The publication stage of the namespace, by default IS."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="publicationStage"/>
@@ -1561,27 +1311,20 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="revision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="A" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Revision of the namespace version, by default 'A'."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="revision"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlDate" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="UTC Date and time of the UML version from which this namespace definition file was generated. Shall be provided if umlVersion is present. Format: YYYY-MM-DDThh:mm:ssZ, where: YYYY indicates the year, MM indicates the month, DD indicates the day, T indicates the start of the required time section, hh indicates the hour, mm indicates the minute, ss indicates the second, and Z the UTC time stamp indication.&#xA;"/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlDate" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="umlDate"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlVersion" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Version of UML from which this namespace definition file was generated from."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlVersion" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="umlVersion"/>
@@ -1589,37 +1332,28 @@
     </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="NSDoc" eSuperTypes="#//Copyrighted #//NSDObjectWithVersionAndRelease">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="A non-empty list of tDoc elements."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tNSDoc"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="doc" lowerBound="1" upperBound="-1"
-        eType="#//Doc" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of documentation identifiers and corresponding documentation strings in the corresponding language."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="doc" ordered="false" upperBound="-1"
+        eType="#//Doc" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//Doc/nSDoc">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Doc"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Identifier of the namespace, e.g., &quot;IEC 61850-7-4&quot;, &quot;(Tr)IEC 61850-90-4&quot;."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="id"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lang" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Language">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Language of the documentation strings in the file."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lang" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Language"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="lang"/>
@@ -1627,9 +1361,6 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="publicationStage" eType="#//PubStage"
         defaultValueLiteral="IS" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The publication stage of the namespace, by default IS."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="publicationStage"/>
@@ -1637,27 +1368,20 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="revision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="A" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Revision of the namespace version, by default 'A'."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="revision"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlDate" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="UTC Date and time of the UML version from which this namespace definition file was generated. Shall be provided if umlVersion is present. Format: YYYY-MM-DDThh:mm:ssZ, where: YYYY indicates the year, MM indicates the month, DD indicates the day, T indicates the start of the required time section, hh indicates the hour, mm indicates the minute, ss indicates the second, and Z the UTC time stamp indication.&#xA;"/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlDate" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="umlDate"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlVersion" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Version of UML from which this namespace definition file was generated from."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlVersion" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="umlVersion"/>
@@ -1665,74 +1389,63 @@
     </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="PresenceCondition">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a presence condition."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tPresenceCondition"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="argument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The presence condition argument, if any."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="argument" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="argument"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to a full description of this object."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="descID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the presence condition, as used in IEC 61850 data models."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="titleID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to the title (alias) of this object."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="titleID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="titleID"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="presenceConditions" ordered="false"
+        eType="#//PresenceConditions" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//PresenceConditions/presenceCondition"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="PresenceConditions">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of presence conditions which are introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tPresenceConditions"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="presenceCondition" lowerBound="1"
-        upperBound="-1" eType="#//PresenceCondition" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Definition of a presence condition."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="presenceCondition" ordered="false"
+        upperBound="-1" eType="#//PresenceCondition" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//PresenceCondition/presenceConditions">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="PresenceCondition"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="nS" ordered="false" eType="#//NS"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//NS/presenceConditions"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNS" ordered="false"
+        eType="#//ServiceNS" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ServiceNS/presenceConditions"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="PubStage">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Publication stage of the namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tPubStage"/>
     </eAnnotations>
@@ -1789,67 +1502,56 @@
     </eAnnotations>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ServiceCDC">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a CDC extension for control services."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tServiceCDC"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceDataAttribute" lowerBound="1"
-        upperBound="-1" eType="#//ServiceDataAttribute" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Data attribute to be used as service parameter."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceDataAttribute" ordered="false"
+        upperBound="-1" eType="#//ServiceDataAttribute" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//ServiceDataAttribute/serviceCDC">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ServiceDataAttribute"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cdc" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the common data class the service extension is for."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="cdc" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="cdc"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variant" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Token">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Identification of the variant of the CDC (e.g., SPG_SP)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variant" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Token"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="variant"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceCDCs" ordered="false"
+        eType="#//ServiceCDCs" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ServiceCDCs/serviceCDC"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ServiceCDCs">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of Service CDCs introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tServiceCDCs"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceCDC" upperBound="-1"
-        eType="#//ServiceCDC" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="CDC extensions for control in this service namespace."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceCDC" ordered="false"
+        upperBound="-1" eType="#//ServiceCDC" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//ServiceCDC/serviceCDCs">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ServiceCDC"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNS" ordered="false"
+        eType="#//ServiceNS" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ServiceNS/serviceCDCs"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ServiceConstructedAttribute" eSuperTypes="#//ConstructedAttribute">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a constructed attribute type for services."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tServiceConstructedAttribute"/>
       <details key="kind" value="elementOnly"/>
@@ -1857,57 +1559,47 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeKindParameterized"
         eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether this ServiceConstructedAttribute has at least one child data attribute with typeKind &quot;undefined&quot;."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="typeKindParameterized"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceConstructedAttribute"
+        ordered="false" eType="#//ServiceConstructedAttributes" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//ServiceConstructedAttributes/serviceConstructedAttribute"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ServiceConstructedAttributes">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of Service Constructed Attributes introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tServiceConstructedAttributes"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="serviceConstructedAttribute"
-        upperBound="-1" eType="#//ServiceConstructedAttribute" containment="true"
-        resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Realization of Part 7-2 abstract types or constructed attributes needed for control services. Note: in SCL instance files, the ProtNs element shall be specified for these."/>
-      </eAnnotations>
+        ordered="false" upperBound="-1" eType="#//ServiceConstructedAttribute" unsettable="true"
+        containment="true" resolveProxies="false" eOpposite="#//ServiceConstructedAttribute/serviceConstructedAttribute">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ServiceConstructedAttribute"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNS" ordered="false"
+        eType="#//ServiceNS" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ServiceNS/serviceConstructedAttributes"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ServiceDataAttribute" eSuperTypes="#//DocumentedClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a service parameter as Data Attribute."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tServiceDataAttribute"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fc" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Functional constraint of the data attribute."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fc" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="fc"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the data attribute."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
@@ -1915,36 +1607,27 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCond" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="M" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Presence condition of the element. By default 'M' (mandatory)."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCond"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition. Can be a sibling element or a group number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCondArgs"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition: a documentation identifier referring to some free text."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCondArgsID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The type of the data attribute, e.g., the name of a basic type like INT32, the name of an enumeration of a constructed data attribute - depending on the sibling typeKind. If not provided, shall be defined by the &quot;parent&quot; element."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="type"/>
@@ -1952,18 +1635,13 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeKind" eType="#//AttributeTypeKind"
         defaultValueLiteral="BASIC" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The kind of the data attribute's type. By  default, &quot;BASIC&quot;."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="typeKind"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="underlyingType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Type to be used for type-open CDCs, e.g., enumeration to be used for enumeration-based CDCs (e.g., ENS, ENC, ENG)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="underlyingType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="underlyingType"/>
@@ -1971,28 +1649,23 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="underlyingTypeKind" eType="#//DefinedAttributeTypeKind"
         unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The typeKind to be used for all &quot;undefined&quot; attributes of the CDC of this DataObject."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="underlyingTypeKind"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceCDC" ordered="false"
+        eType="#//ServiceCDC" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ServiceCDC/serviceDataAttribute"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ServiceNS" eSuperTypes="#//Copyrighted #//NSDObjectWithVersionAndRelease">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a service namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tServiceNS"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="changes" eType="#//Changes"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The version/revision/release this namespace is based on, including the TISSUEs implemented in this release."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="changes" ordered="false"
+        eType="#//Changes" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//Changes/serviceNS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Changes"/>
@@ -2000,32 +1673,26 @@
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="functionalConstraints"
-        eType="#//FunctionalConstraints" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of Functional Constraints added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine &quot;included&quot; ones.)."/>
-      </eAnnotations>
+        ordered="false" eType="#//FunctionalConstraints" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//FunctionalConstraints/serviceNS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="FunctionalConstraints"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="presenceConditions" eType="#//PresenceConditions"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of presence conditions added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine &quot;included&quot; ones.)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="presenceConditions" ordered="false"
+        eType="#//PresenceConditions" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//PresenceConditions/serviceNS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="PresenceConditions"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="abbreviations" eType="#//Abbreviations"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of abbreviations added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine &quot;included&quot; ones.)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="abbreviations" ordered="false"
+        eType="#//Abbreviations" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//Abbreviations/serviceNS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="Abbreviations"/>
@@ -2033,10 +1700,8 @@
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="serviceTypeRealizations"
-        eType="#//ServiceTypeRealizations" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of service type realization added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine &quot;included&quot; ones.)."/>
-      </eAnnotations>
+        ordered="false" eType="#//ServiceTypeRealizations" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//ServiceTypeRealizations/serviceNS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ServiceTypeRealizations"/>
@@ -2044,40 +1709,32 @@
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="serviceConstructedAttributes"
-        eType="#//ServiceConstructedAttributes" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of service constructed attributes added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine &quot;included&quot; ones.)."/>
-      </eAnnotations>
+        ordered="false" eType="#//ServiceConstructedAttributes" unsettable="true"
+        containment="true" resolveProxies="false" eOpposite="#//ServiceConstructedAttributes/serviceNS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ServiceConstructedAttributes"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceCDCs" eType="#//ServiceCDCs"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="List of service CDCs added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine &quot;included&quot; ones.)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceCDCs" ordered="false"
+        eType="#//ServiceCDCs" unsettable="true" containment="true" resolveProxies="false"
+        eOpposite="#//ServiceCDCs/serviceNS">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ServiceCDCs"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to a full description of this NS."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="descID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="descID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Identifier of the namespace, e.g., &quot;IEC 61850-7-4&quot;, &quot;(Tr)IEC 61850-90-4&quot;."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="id"/>
@@ -2085,9 +1742,6 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="publicationStage" eType="#//PubStage"
         defaultValueLiteral="IS" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The publication stage of the namespace, by default IS."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="publicationStage"/>
@@ -2095,27 +1749,20 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="revision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="A" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Revision of the namespace version, by default 'A'."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="revision"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlDate" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="UTC Date and time of the UML version from which this namespace definition file was generated. Shall be provided if umlVersion is present. Format: YYYY-MM-DDThh:mm:ssZ, where: YYYY indicates the year, MM indicates the month, DD indicates the day, T indicates the start of the required time section, hh indicates the hour, mm indicates the minute, ss indicates the second, and Z the UTC time stamp indication.&#xA;"/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlDate" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="umlDate"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlVersion" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Version of UML from which this namespace definition file was generated from."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="umlVersion" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="umlVersion"/>
@@ -2123,28 +1770,21 @@
     </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ServiceNsUsage" eSuperTypes="#//NSDObjectWithVersionAndRelease">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Describes the list of (domain) NS for which a ServiceNS is applicable."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tServiceNsUsage"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="appliesTo" lowerBound="1"
-        upperBound="-1" eType="#//AppliesToType" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="References to namespaces this ServiceNS can be used with."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="appliesTo" ordered="false"
+        upperBound="-1" eType="#//AppliesToType" unsettable="true" containment="true"
+        resolveProxies="false" eOpposite="#//AppliesToType/serviceNsUsage">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="AppliesTo"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Identifier of the namespace, e.g., &quot;IEC 61850-7-4&quot;, &quot;(Tr)IEC 61850-90-4&quot;."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="id"/>
@@ -2152,9 +1792,6 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="publicationStage" eType="#//PubStage"
         defaultValueLiteral="IS" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The publication stage of the namespace, by default IS."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="publicationStage"/>
@@ -2162,137 +1799,49 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="revision" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="A" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Revision of the namespace version, by default 'A'."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="revision"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="applicableServiceNS" ordered="false"
+        eType="#//ApplicableServiceNS" transient="true" unsettable="true" eOpposite="#//ApplicableServiceNS/serviceNsUsage"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ServiceParameter" eSuperTypes="#//DocumentedClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of the service parameter for control services."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tServiceParameter"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//NormalizedString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Default value for the data attribute. May only be defined for data attributes with typeKind=&quot;BASIC&quot; or &quot;ENUMERATED&quot;."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//NormalizedString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="defaultValue"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Allowed maximal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind=&quot;BASIC&quot; and corresponding to a number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="maxValue"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="minValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Allowed minimal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind=&quot;BASIC&quot; and corresponding to a number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="minValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="minValue"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the data attribute."/>
-      </eAnnotations>
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="name"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The type of the data attribute, e.g., the name of a basic type like INT32, the name of an enumeration of a constructed data attribute - depending on the sibling typeKind. If not provided, shall be defined by the &quot;parent&quot; element."/>
-      </eAnnotations>
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="type"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeKind" eType="#//AttributeTypeKind"
-        defaultValueLiteral="BASIC" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The kind of the data attribute's type. By  default, &quot;BASIC&quot;."/>
-      </eAnnotations>
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="typeKind"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ServiceTypeRealization">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of the realization of an abstract type as constructed attribute in the service namespace."/>
-    </eAnnotations>
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="tServiceTypeRealization"/>
-      <details key="kind" value="empty"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="fc" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Functional constraint of the data attribute."/>
-      </eAnnotations>
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="fc"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the data attribute."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCond" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
-        defaultValueLiteral="M" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Presence condition of the element. By default 'M' (mandatory)."/>
-      </eAnnotations>
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="presCond"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition. Can be a sibling element or a group number."/>
-      </eAnnotations>
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="presCondArgs"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition: a documentation identifier referring to some free text."/>
-      </eAnnotations>
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="presCondArgsID"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The type of the data attribute, e.g., the name of a basic type like INT32, the name of an enumeration of a constructed data attribute - depending on the sibling typeKind. If not provided, shall be defined by the &quot;parent&quot; element."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="type"/>
@@ -2300,47 +1849,39 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeKind" eType="#//AttributeTypeKind"
         defaultValueLiteral="BASIC" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The kind of the data attribute's type. By  default, &quot;BASIC&quot;."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="typeKind"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="cDC" ordered="false" eType="#//CDC"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//CDC/serviceParameter"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ServiceTypeRealizations">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="List of Service Type Realizations introduced by a namespace."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tServiceTypeRealizations"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="serviceTypeRealization"
-        upperBound="-1" eType="#//ConstructedAttribute" containment="true" resolveProxies="false">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Realization of an abstract type as constructed attribute in the service namespace."/>
-      </eAnnotations>
+        ordered="false" upperBound="-1" eType="#//ConstructedAttribute" unsettable="true"
+        containment="true" resolveProxies="false" eOpposite="#//ConstructedAttribute/serviceTypeRealizations">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="element"/>
         <details key="name" value="ServiceTypeRealization"/>
         <details key="namespace" value="##targetNamespace"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="serviceNS" ordered="false"
+        eType="#//ServiceNS" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ServiceNS/serviceTypeRealizations"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="SubDataAttribute" eSuperTypes="#//DocumentedClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a Sub Data Attribute (within a constructed data attribute)."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tSubDataAttribute"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//NormalizedString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Default value for the data attribute. May only be defined for data attributes with typeKind=&quot;BASIC&quot; or &quot;ENUMERATED&quot;."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="defaultValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//NormalizedString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="defaultValue"/>
@@ -2348,27 +1889,20 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="isArray" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether the element is an array. By default, not an array."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="isArray"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxIndexAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the Attribute holding the maximal index of the array.&#xA;Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxIndexAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="maxIndexAttribute"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Allowed maximal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind=&quot;BASIC&quot; and corresponding to a number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="maxValue"/>
@@ -2376,27 +1910,20 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="minIndex" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//UnsignedInt"
         defaultValueLiteral="0" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Lowest index of the array.&#xA;Is relevant information if and only if isArray=true.&#xA;By default 0."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="minIndex"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="minValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Allowed minimal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind=&quot;BASIC&quot; and corresponding to a number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="minValue" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Decimal"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="minValue"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the data attribute."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
@@ -2404,45 +1931,34 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCond" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="M" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Presence condition of the element. By default 'M' (mandatory)."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCond"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition. Can be a sibling element or a group number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCondArgs"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition: a documentation identifier referring to some free text."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCondArgsID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sizeAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Sibling data attribute name holding the size of the array.&#xA;Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sizeAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="sizeAttribute"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The type of the data attribute, e.g., the name of a basic type like INT32, the name of an enumeration of a constructed data attribute - depending on the sibling typeKind. If not provided, shall be defined by the &quot;parent&quot; element."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="type"/>
@@ -2450,37 +1966,29 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeKind" eType="#//AttributeTypeKind"
         defaultValueLiteral="BASIC" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The kind of the data attribute's type. By  default, &quot;BASIC&quot;."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="typeKind"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="constructedAttribute" ordered="false"
+        eType="#//ConstructedAttribute" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//ConstructedAttribute/subDataAttribute"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="SubDataObject" eSuperTypes="#//DocumentedClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Definition of a Sub-Data Object."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tSubDataObject"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="isArray" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
         defaultValueLiteral="false" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Flag indicating whether the element is an array. By default, not an array."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="isArray"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxIndexAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the Attribute holding the maximal index of the array.&#xA;Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="maxIndexAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="maxIndexAttribute"/>
@@ -2488,18 +1996,13 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="minIndex" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//UnsignedInt"
         defaultValueLiteral="0" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Lowest index of the array.&#xA;Is relevant information if and only if isArray=true.&#xA;By default 0."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="minIndex"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Name of the Sub-Data Object."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="name"/>
@@ -2507,54 +2010,41 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCond" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
         defaultValueLiteral="M" unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Presence condition of the element. By default 'M' (mandatory)."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCond"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition. Can be a sibling element or a group number."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgs" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCondArgs"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Optional argument to the presence condition: a documentation identifier referring to some free text."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="presCondArgsID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="presCondArgsID"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sizeAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Sibling data attribute name holding the size of the array.&#xA;Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sizeAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="sizeAttribute"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Type of the SubDataObject, i.e., its CDC."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="type"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="underlyingType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Type to be used for type-open CDCs, e.g., enumeration to be used for enumeration-based CDCs (e.g., ENS, ENC, ENG)."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="underlyingType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="underlyingType"/>
@@ -2562,28 +2052,21 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="underlyingTypeKind" eType="#//DefinedAttributeTypeKind"
         unsettable="true">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="The typeKind to be used for all &quot;undefined&quot; attributes of the CDC of this DataObject."/>
-      </eAnnotations>
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="underlyingTypeKind"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="cDC" ordered="false" eType="#//CDC"
+        transient="true" unsettable="true" resolveProxies="false" eOpposite="#//CDC/subDataObject"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="TitledClass" eSuperTypes="#//DocumentedClass">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="A tDocumentedClass with title."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tTitledClass"/>
       <details key="kind" value="empty"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="titleID" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-        <details key="documentation" value="Documentation identifier referring to the title (alias) of this object."/>
-      </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="titleID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
+        unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
         <details key="name" value="titleID"/>
@@ -2591,9 +2074,6 @@
     </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="UndefinedAttributeTypeKind">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="Type kind for a data attribute which has its type &quot;undefined&quot;."/>
-    </eAnnotations>
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="name" value="tUndefinedAttributeTypeKind"/>
     </eAnnotations>
@@ -2618,8 +2098,7 @@
         <details key="name" value="release"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"
         unsettable="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
         <details key="kind" value="attribute"/>
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
index 2162aef..7699dd1 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
@@ -111,34 +111,40 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//AppliesToType/id"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//AppliesToType/publicationStage"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//AppliesToType/revision"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//AppliesToType/serviceNsUsage"/>
     </genClasses>
-    <genClasses ecoreClass="nsd.ecore#//DependsOnType">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DependsOnType/id"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DependsOnType/publicationStage"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DependsOnType/revision"/>
+    <genClasses ecoreClass="nsd.ecore#//DependsOn">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DependsOn/id"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DependsOn/publicationStage"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DependsOn/revision"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//DependsOn/nS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//DocumentRoot">
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DocumentRoot/mixed"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//DocumentRoot/xMLNSPrefixMap"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//DocumentRoot/xSISchemaLocation"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//DocumentRoot/applicableServiceNS"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//DocumentRoot/copyright"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//DocumentRoot/nS"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//DocumentRoot/nSDoc"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//DocumentRoot/serviceNS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ServiceType">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceType/name"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ServiceType/applicableServices"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//Abbreviation">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Abbreviation/descID"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Abbreviation/name"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Abbreviation/abbreviations"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//Abbreviations">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//Abbreviations/abbreviation"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Abbreviations/nS"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Abbreviations/serviceNS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//AbstractLNClass">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//AbstractLNClass/name"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//AbstractLNClass/lNClasses"/>
     </genClasses>
     <genClasses image="false" ecoreClass="nsd.ecore#//AnyLNClass">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//AnyLNClass/dataObject"/>
@@ -152,13 +158,16 @@
     <genClasses ecoreClass="nsd.ecore#//ApplicableServices">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ApplicableServices/service"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ApplicableServices/dataSetMemberOf"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ApplicableServices/functionalConstraint"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//BasicType">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//BasicType/descID"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//BasicType/name"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//BasicType/basicTypes"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//BasicTypes">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//BasicTypes/basicType"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//BasicTypes/nS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//CDC">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//CDC/subDataObject"/>
@@ -169,22 +178,29 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//CDC/statistics"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//CDC/typeKindParameterized"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//CDC/variant"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//CDC/cDCs"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//CDCs">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//CDCs/cDC"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//CDCs/nS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//Changes">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Changes/changesID"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Changes/date"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Changes/revision"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Changes/tissues"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Changes/nS"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Changes/serviceNS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ConstructedAttribute">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ConstructedAttribute/subDataAttribute"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ConstructedAttribute/name"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ConstructedAttribute/constructedAttributes"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ConstructedAttribute/serviceTypeRealizations"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ConstructedAttributes">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ConstructedAttributes/constructedAttribute"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ConstructedAttributes/nS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//Copyrighted">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//Copyrighted/copyright"/>
@@ -192,6 +208,7 @@
     <genClasses ecoreClass="nsd.ecore#//CopyrightNotice">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//CopyrightNotice/notice"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//CopyrightNotice/license"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//CopyrightNotice/copyrighted"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//DataAttribute">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataAttribute/dchg"/>
@@ -211,6 +228,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataAttribute/sizeAttribute"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataAttribute/type"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataAttribute/typeKind"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/cDC"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//DataObject">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataObject/dsPresCond"/>
@@ -224,15 +242,18 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataObject/type"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataObject/underlyingType"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataObject/underlyingTypeKind"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//DataObject/anyLNClass"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//DataSetMemberOf">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataSetMemberOf/cb"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//DataSetMemberOf/applicableServices"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//Doc">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute nsd.ecore#//Doc/mixed"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Doc/group"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Doc/any"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Doc/id"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Doc/nSDoc"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//DocumentedClass">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DocumentedClass/deprecated"/>
@@ -243,39 +264,49 @@
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//Enumeration/literal"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Enumeration/inheritedFrom"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Enumeration/name"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Enumeration/enumerations"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//Enumerations">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//Enumerations/enumeration"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Enumerations/nS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//FunctionalConstraint">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//FunctionalConstraint/applicableServices"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//FunctionalConstraint/abbreviation"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//FunctionalConstraint/descID"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//FunctionalConstraint/titleID"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//FunctionalConstraint/functionalConstraints"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//FunctionalConstraints">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//FunctionalConstraints/functionalConstraint"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//FunctionalConstraints/nS"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//FunctionalConstraints/serviceNS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//License">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute nsd.ecore#//License/mixed"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//License/kind"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//License/uri"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//License/copyrightNotice"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//Literal">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Literal/literalVal"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Literal/name"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Literal/enumeration"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//LNClass">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//LNClass/canHaveLOG"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//LNClass/isExtension"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//LNClass/name"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//LNClass/lNClasses"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//LNClasses">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//LNClasses/abstractLNClass"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//LNClasses/lNClass"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//LNClasses/nS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//Notice">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute nsd.ecore#//Notice/mixed"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Notice/copyrightNotice"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//NS">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//NS/changes"/>
@@ -309,23 +340,30 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//PresenceCondition/descID"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//PresenceCondition/name"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//PresenceCondition/titleID"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/presenceConditions"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//PresenceConditions">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceConditions/presenceCondition"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//PresenceConditions/nS"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//PresenceConditions/serviceNS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ServiceCDC">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ServiceCDC/serviceDataAttribute"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceCDC/cdc"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceCDC/variant"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ServiceCDC/serviceCDCs"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ServiceCDCs">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ServiceCDCs/serviceCDC"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ServiceCDCs/serviceNS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ServiceConstructedAttribute">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceConstructedAttribute/typeKindParameterized"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ServiceConstructedAttribute/serviceConstructedAttribute"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ServiceConstructedAttributes">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ServiceConstructedAttributes/serviceConstructedAttribute"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ServiceConstructedAttributes/serviceNS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ServiceDataAttribute">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceDataAttribute/fc"/>
@@ -337,6 +375,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceDataAttribute/typeKind"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceDataAttribute/underlyingType"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceDataAttribute/underlyingTypeKind"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ServiceDataAttribute/serviceCDC"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ServiceNS">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ServiceNS/changes"/>
@@ -358,6 +397,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceNsUsage/id"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceNsUsage/publicationStage"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceNsUsage/revision"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ServiceNsUsage/applicableServiceNS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ServiceParameter">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceParameter/defaultValue"/>
@@ -366,18 +406,11 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceParameter/name"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceParameter/type"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceParameter/typeKind"/>
-    </genClasses>
-    <genClasses ecoreClass="nsd.ecore#//ServiceTypeRealization">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceTypeRealization/fc"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceTypeRealization/name"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceTypeRealization/presCond"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceTypeRealization/presCondArgs"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceTypeRealization/presCondArgsID"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceTypeRealization/type"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ServiceTypeRealization/typeKind"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ServiceParameter/cDC"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ServiceTypeRealizations">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ServiceTypeRealizations/serviceTypeRealization"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ServiceTypeRealizations/serviceNS"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//SubDataAttribute">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataAttribute/defaultValue"/>
@@ -393,6 +426,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataAttribute/sizeAttribute"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataAttribute/type"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataAttribute/typeKind"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//SubDataAttribute/constructedAttribute"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//SubDataObject">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataObject/isArray"/>
@@ -406,6 +440,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataObject/type"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataObject/underlyingType"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataObject/underlyingTypeKind"/>
+      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//SubDataObject/cDC"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//TitledClass">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//TitledClass/titleID"/>
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ACSIServicesKind.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ACSIServicesKind.java
index 8858f48..12e088f 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ACSIServicesKind.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ACSIServicesKind.java
@@ -30,9 +30,6 @@ import org.eclipse.emf.common.util.Enumerator;
  * A representation of the literals of the enumeration '<em><b>ACSI Services Kind</b></em>',
  * and utility methods for working with them.
  * <!-- end-user-doc -->
- * <!-- begin-model-doc -->
- * Enumeration holding the names of all ACSI services, as defined in Part 7-2. Is conceptually identical to the 7-2 ServiceNameKind enumeration (except the Unknown).
- * <!-- end-model-doc -->
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getACSIServicesKind()
  * @model extendedMetaData="name='tACSIServicesKind'"
  * @generated
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviation.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviation.java
index cf30387..222e1a1 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviation.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviation.java
@@ -26,16 +26,13 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Abbreviation</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of an abbreviation.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getDescID <em>Desc ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getAbbreviations <em>Abbreviations</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbbreviation()
@@ -47,13 +44,13 @@ public interface Abbreviation extends EObject {
      * Returns the value of the '<em><b>Desc ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to a full description of this abbreviation.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #setDescID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbbreviation_DescID()
-     * @model extendedMetaData="kind='attribute' name='descID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='descID'"
      * @generated
      */
     String getDescID();
@@ -63,22 +60,46 @@ public interface Abbreviation extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #getDescID()
      * @generated
      */
     void setDescID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getDescID <em>Desc ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    void unsetDescID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getDescID <em>Desc ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Desc ID</em>' attribute is set.
+     * @see #unsetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    boolean isSetDescID();
+
     /**
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the abbreviation, as used in IEC 61850 data models.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbbreviation_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -89,9 +110,62 @@ public interface Abbreviation extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
+    /**
+     * Returns the value of the '<em><b>Abbreviations</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getAbbreviation <em>Abbreviation</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Abbreviations</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Abbreviations</em>' container reference.
+     * @see #setAbbreviations(Abbreviations)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbbreviation_Abbreviations()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getAbbreviation
+     * @model opposite="abbreviation" resolveProxies="false" unsettable="true" transient="false" ordered="false"
+     * @generated
+     */
+    Abbreviations getAbbreviations();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getAbbreviations <em>Abbreviations</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Abbreviations</em>' container reference.
+     * @see #getAbbreviations()
+     * @generated
+     */
+    void setAbbreviations( Abbreviations value );
+
 } // Abbreviation
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviations.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviations.java
index d01cbfe..f5546fd 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviations.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Abbreviations.java
@@ -28,15 +28,13 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Abbreviations</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of abbreviationss which are introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getAbbreviation <em>Abbreviation</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getNS <em>NS</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbbreviations()
@@ -47,17 +45,95 @@ public interface Abbreviations extends EObject {
     /**
      * Returns the value of the '<em><b>Abbreviation</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getAbbreviations <em>Abbreviations</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Definition of an abbreviation.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Abbreviation</em>' containment reference list.
+     * @see #isSetAbbreviation()
+     * @see #unsetAbbreviation()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbbreviations_Abbreviation()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getAbbreviations
+     * @model opposite="abbreviations" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Abbreviation' namespace='##targetNamespace'"
      * @generated
      */
     EList< Abbreviation > getAbbreviation();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getAbbreviation <em>Abbreviation</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetAbbreviation()
+     * @see #getAbbreviation()
+     * @generated
+     */
+    void unsetAbbreviation();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getAbbreviation <em>Abbreviation</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Abbreviation</em>' containment reference list is set.
+     * @see #unsetAbbreviation()
+     * @see #getAbbreviation()
+     * @generated
+     */
+    boolean isSetAbbreviation();
+
+    /**
+     * Returns the value of the '<em><b>NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getAbbreviations <em>Abbreviations</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS</em>' container reference.
+     * @see #setNS(NS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbbreviations_NS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getAbbreviations
+     * @model opposite="abbreviations" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NS getNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getNS <em>NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS</em>' container reference.
+     * @see #getNS()
+     * @generated
+     */
+    void setNS( NS value );
+
+    /**
+     * Returns the value of the '<em><b>Service NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getAbbreviations <em>Abbreviations</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service NS</em>' container reference.
+     * @see #setServiceNS(ServiceNS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbbreviations_ServiceNS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getAbbreviations
+     * @model opposite="abbreviations" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceNS getServiceNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getServiceNS <em>Service NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service NS</em>' container reference.
+     * @see #getServiceNS()
+     * @generated
+     */
+    void setServiceNS( ServiceNS value );
+
 } // Abbreviations
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AbstractLNClass.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AbstractLNClass.java
index 7cd2acc..21b99e6 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AbstractLNClass.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AbstractLNClass.java
@@ -24,15 +24,12 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  * A representation of the model object '<em><b>Abstract LN Class</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of an abstract logical node and its contents.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass#getLNClasses <em>LN Classes</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbstractLNClass()
@@ -44,13 +41,12 @@ public interface AbstractLNClass extends AnyLNClass {
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The name of the abstract logical node.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbstractLNClass_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -61,9 +57,62 @@ public interface AbstractLNClass extends AnyLNClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
+    /**
+     * Returns the value of the '<em><b>LN Classes</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getAbstractLNClass <em>Abstract LN Class</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>LN Classes</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>LN Classes</em>' container reference.
+     * @see #setLNClasses(LNClasses)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAbstractLNClass_LNClasses()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getAbstractLNClass
+     * @model opposite="abstractLNClass" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    LNClasses getLNClasses();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass#getLNClasses <em>LN Classes</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>LN Classes</em>' container reference.
+     * @see #getLNClasses()
+     * @generated
+     */
+    void setLNClasses( LNClasses value );
+
 } // AbstractLNClass
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AnyLNClass.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AnyLNClass.java
index b197973..a8ce94b 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AnyLNClass.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AnyLNClass.java
@@ -26,10 +26,6 @@ import org.eclipse.emf.common.util.EList;
  * A representation of the model object '<em><b>Any LN Class</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a logical node (abstract or not) and its contents.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -47,30 +43,52 @@ public interface AnyLNClass extends TitledClass {
     /**
      * Returns the value of the '<em><b>Data Object</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getAnyLNClass <em>Any LN Class</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Child Data Object of the logical node.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Data Object</em>' containment reference list.
+     * @see #isSetDataObject()
+     * @see #unsetDataObject()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAnyLNClass_DataObject()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getAnyLNClass
+     * @model opposite="anyLNClass" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='DataObject' namespace='##targetNamespace'"
      * @generated
      */
     EList< DataObject > getDataObject();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass#getDataObject <em>Data Object</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDataObject()
+     * @see #getDataObject()
+     * @generated
+     */
+    void unsetDataObject();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass#getDataObject <em>Data Object</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Data Object</em>' containment reference list is set.
+     * @see #unsetDataObject()
+     * @see #getDataObject()
+     * @generated
+     */
+    boolean isSetDataObject();
+
     /**
      * Returns the value of the '<em><b>Base</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the abstract LN class this one extends (directly).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Base</em>' attribute.
+     * @see #isSetBase()
+     * @see #unsetBase()
      * @see #setBase(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAnyLNClass_Base()
-     * @model extendedMetaData="kind='attribute' name='base'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='base'"
      * @generated
      */
     String getBase();
@@ -80,9 +98,34 @@ public interface AnyLNClass extends TitledClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Base</em>' attribute.
+     * @see #isSetBase()
+     * @see #unsetBase()
      * @see #getBase()
      * @generated
      */
     void setBase( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass#getBase <em>Base</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetBase()
+     * @see #getBase()
+     * @see #setBase(String)
+     * @generated
+     */
+    void unsetBase();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass#getBase <em>Base</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Base</em>' attribute is set.
+     * @see #unsetBase()
+     * @see #getBase()
+     * @see #setBase(String)
+     * @generated
+     */
+    boolean isSetBase();
+
 } // AnyLNClass
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServiceNS.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServiceNS.java
index ca79a2d..e5b55ae 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServiceNS.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServiceNS.java
@@ -28,10 +28,6 @@ import org.eclipse.emf.common.util.EList;
  * A representation of the model object '<em><b>Applicable Service NS</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Describes the allowed usages of ServiceNS-es.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -49,30 +45,51 @@ public interface ApplicableServiceNS extends Copyrighted {
     /**
      * Returns the value of the '<em><b>Service Ns Usage</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getApplicableServiceNS <em>Applicable Service NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Specification of a ServiceNS and all NS it can be used for.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Service Ns Usage</em>' containment reference list.
+     * @see #isSetServiceNsUsage()
+     * @see #unsetServiceNsUsage()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getApplicableServiceNS_ServiceNsUsage()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getApplicableServiceNS
+     * @model opposite="applicableServiceNS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ServiceNsUsage' namespace='##targetNamespace'"
      * @generated
      */
     EList< ServiceNsUsage > getServiceNsUsage();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServiceNS#getServiceNsUsage <em>Service Ns Usage</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetServiceNsUsage()
+     * @see #getServiceNsUsage()
+     * @generated
+     */
+    void unsetServiceNsUsage();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServiceNS#getServiceNsUsage <em>Service Ns Usage</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service Ns Usage</em>' containment reference list is set.
+     * @see #unsetServiceNsUsage()
+     * @see #getServiceNsUsage()
+     * @generated
+     */
+    boolean isSetServiceNsUsage();
+
     /**
      * Returns the value of the '<em><b>Date</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Date of definition of the file.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Date</em>' attribute.
+     * @see #isSetDate()
+     * @see #unsetDate()
      * @see #setDate(XMLGregorianCalendar)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getApplicableServiceNS_Date()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.DateTime" required="true"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.DateTime"
      *        extendedMetaData="kind='attribute' name='date'"
      * @generated
      */
@@ -83,24 +100,46 @@ public interface ApplicableServiceNS extends Copyrighted {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Date</em>' attribute.
+     * @see #isSetDate()
+     * @see #unsetDate()
      * @see #getDate()
      * @generated
      */
     void setDate( XMLGregorianCalendar value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServiceNS#getDate <em>Date</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDate()
+     * @see #getDate()
+     * @see #setDate(XMLGregorianCalendar)
+     * @generated
+     */
+    void unsetDate();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServiceNS#getDate <em>Date</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Date</em>' attribute is set.
+     * @see #unsetDate()
+     * @see #getDate()
+     * @see #setDate(XMLGregorianCalendar)
+     * @generated
+     */
+    boolean isSetDate();
+
     /**
      * Returns the value of the '<em><b>Version</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Version of the file.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Version</em>' attribute.
      * @see #isSetVersion()
      * @see #unsetVersion()
      * @see #setVersion(long)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getApplicableServiceNS_Version()
-     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.UnsignedInt" required="true"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.UnsignedInt"
      *        extendedMetaData="kind='attribute' name='version'"
      * @generated
      */
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServices.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServices.java
index 74a82c6..00775b9 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServices.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ApplicableServices.java
@@ -28,16 +28,13 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Applicable Services</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Applicable services for a given functional constraint.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getService <em>Service</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getDataSetMemberOf <em>Data Set Member Of</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getFunctionalConstraint <em>Functional Constraint</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getApplicableServices()
@@ -48,33 +45,105 @@ public interface ApplicableServices extends EObject {
     /**
      * Returns the value of the '<em><b>Service</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType#getApplicableServices <em>Applicable Services</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * If present, indicates that the service with given name applies to attributes with the specified FC (otherwise it may not be used).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Service</em>' containment reference list.
+     * @see #isSetService()
+     * @see #unsetService()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getApplicableServices_Service()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType#getApplicableServices
+     * @model opposite="applicableServices" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Service' namespace='##targetNamespace'"
      * @generated
      */
     EList< ServiceType > getService();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getService <em>Service</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetService()
+     * @see #getService()
+     * @generated
+     */
+    void unsetService();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getService <em>Service</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service</em>' containment reference list is set.
+     * @see #unsetService()
+     * @see #getService()
+     * @generated
+     */
+    boolean isSetService();
+
     /**
      * Returns the value of the '<em><b>Data Set Member Of</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf#getApplicableServices <em>Applicable Services</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * An attribute of this FC can be member of a dataset for a control block type indicated by attribute cb if and only if this element is present.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Data Set Member Of</em>' containment reference list.
+     * @see #isSetDataSetMemberOf()
+     * @see #unsetDataSetMemberOf()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getApplicableServices_DataSetMemberOf()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf#getApplicableServices
+     * @model opposite="applicableServices" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='DataSetMemberOf' namespace='##targetNamespace'"
      * @generated
      */
     EList< DataSetMemberOf > getDataSetMemberOf();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getDataSetMemberOf <em>Data Set Member Of</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDataSetMemberOf()
+     * @see #getDataSetMemberOf()
+     * @generated
+     */
+    void unsetDataSetMemberOf();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getDataSetMemberOf <em>Data Set Member Of</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Data Set Member Of</em>' containment reference list is set.
+     * @see #unsetDataSetMemberOf()
+     * @see #getDataSetMemberOf()
+     * @generated
+     */
+    boolean isSetDataSetMemberOf();
+
+    /**
+     * Returns the value of the '<em><b>Functional Constraint</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getApplicableServices <em>Applicable Services</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Functional Constraint</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Functional Constraint</em>' container reference.
+     * @see #setFunctionalConstraint(FunctionalConstraint)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getApplicableServices_FunctionalConstraint()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getApplicableServices
+     * @model opposite="applicableServices" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    FunctionalConstraint getFunctionalConstraint();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getFunctionalConstraint <em>Functional Constraint</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Functional Constraint</em>' container reference.
+     * @see #getFunctionalConstraint()
+     * @generated
+     */
+    void setFunctionalConstraint( FunctionalConstraint value );
+
 } // ApplicableServices
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AppliesToType.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AppliesToType.java
index 2b427bd..e01be26 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AppliesToType.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AppliesToType.java
@@ -31,6 +31,7 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getId <em>Id</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getPublicationStage <em>Publication Stage</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getRevision <em>Revision</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getServiceNsUsage <em>Service Ns Usage</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAppliesToType()
@@ -42,13 +43,12 @@ public interface AppliesToType extends NSDObjectWithVersionAndRelease {
      * Returns the value of the '<em><b>Id</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Identifier of the namespace, e.g., "IEC 61850-7-4", "(Tr)IEC 61850-90-4".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #setId(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAppliesToType_Id()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='id'"
      * @generated
      */
@@ -59,20 +59,42 @@ public interface AppliesToType extends NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #getId()
      * @generated
      */
     void setId( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getId <em>Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    void unsetId();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getId <em>Id</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Id</em>' attribute is set.
+     * @see #unsetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    boolean isSetId();
+
     /**
      * Returns the value of the '<em><b>Publication Stage</b></em>' attribute.
      * The default value is <code>"IS"</code>.
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The publication stage of the namespace, by default IS.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Publication Stage</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage
      * @see #isSetPublicationStage()
@@ -126,9 +148,6 @@ public interface AppliesToType extends NSDObjectWithVersionAndRelease {
      * The default value is <code>"A"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Revision of the namespace version, by default 'A'.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Revision</em>' attribute.
      * @see #isSetRevision()
      * @see #unsetRevision()
@@ -175,4 +194,32 @@ public interface AppliesToType extends NSDObjectWithVersionAndRelease {
      */
     boolean isSetRevision();
 
+    /**
+     * Returns the value of the '<em><b>Service Ns Usage</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getAppliesTo <em>Applies To</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service Ns Usage</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service Ns Usage</em>' container reference.
+     * @see #setServiceNsUsage(ServiceNsUsage)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAppliesToType_ServiceNsUsage()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getAppliesTo
+     * @model opposite="appliesTo" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceNsUsage getServiceNsUsage();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getServiceNsUsage <em>Service Ns Usage</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service Ns Usage</em>' container reference.
+     * @see #getServiceNsUsage()
+     * @generated
+     */
+    void setServiceNsUsage( ServiceNsUsage value );
+
 } // AppliesToType
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicType.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicType.java
index 6a8bdf8..3581c00 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicType.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicType.java
@@ -26,16 +26,13 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Basic Type</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a basic type for a data attribute.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getDescID <em>Desc ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getBasicTypes <em>Basic Types</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getBasicType()
@@ -47,13 +44,13 @@ public interface BasicType extends EObject {
      * Returns the value of the '<em><b>Desc ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to a full description of this object.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #setDescID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getBasicType_DescID()
-     * @model extendedMetaData="kind='attribute' name='descID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='descID'"
      * @generated
      */
     String getDescID();
@@ -63,22 +60,46 @@ public interface BasicType extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #getDescID()
      * @generated
      */
     void setDescID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getDescID <em>Desc ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    void unsetDescID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getDescID <em>Desc ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Desc ID</em>' attribute is set.
+     * @see #unsetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    boolean isSetDescID();
+
     /**
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the basic type (e.g., INT32), as used in SCL.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getBasicType_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -89,9 +110,62 @@ public interface BasicType extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
+    /**
+     * Returns the value of the '<em><b>Basic Types</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getBasicType <em>Basic Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Basic Types</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Basic Types</em>' container reference.
+     * @see #setBasicTypes(BasicTypes)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getBasicType_BasicTypes()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getBasicType
+     * @model opposite="basicType" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    BasicTypes getBasicTypes();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getBasicTypes <em>Basic Types</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Basic Types</em>' container reference.
+     * @see #getBasicTypes()
+     * @generated
+     */
+    void setBasicTypes( BasicTypes value );
+
 } // BasicType
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicTypes.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicTypes.java
index 3b57189..6cd284a 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicTypes.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/BasicTypes.java
@@ -28,15 +28,12 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Basic Types</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of basic types for data attributes introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getBasicType <em>Basic Type</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getBasicTypes()
@@ -47,6 +44,7 @@ public interface BasicTypes extends EObject {
     /**
      * Returns the value of the '<em><b>Basic Type</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getBasicTypes <em>Basic Types</em>}'.
      * <!-- begin-user-doc -->
      * <p>
      * If the meaning of the '<em>Basic Type</em>' containment reference list isn't clear,
@@ -54,11 +52,63 @@ public interface BasicTypes extends EObject {
      * </p>
      * <!-- end-user-doc -->
      * @return the value of the '<em>Basic Type</em>' containment reference list.
+     * @see #isSetBasicType()
+     * @see #unsetBasicType()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getBasicTypes_BasicType()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getBasicTypes
+     * @model opposite="basicTypes" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='BasicType' namespace='##targetNamespace'"
      * @generated
      */
     EList< BasicType > getBasicType();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getBasicType <em>Basic Type</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetBasicType()
+     * @see #getBasicType()
+     * @generated
+     */
+    void unsetBasicType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getBasicType <em>Basic Type</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Basic Type</em>' containment reference list is set.
+     * @see #unsetBasicType()
+     * @see #getBasicType()
+     * @generated
+     */
+    boolean isSetBasicType();
+
+    /**
+     * Returns the value of the '<em><b>NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getBasicTypes <em>Basic Types</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS</em>' container reference.
+     * @see #setNS(NS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getBasicTypes_NS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getBasicTypes
+     * @model opposite="basicTypes" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NS getNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getNS <em>NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS</em>' container reference.
+     * @see #getNS()
+     * @generated
+     */
+    void setNS( NS value );
+
 } // BasicTypes
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CBKind.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CBKind.java
index d9424ed..69842a3 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CBKind.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CBKind.java
@@ -30,9 +30,6 @@ import org.eclipse.emf.common.util.Enumerator;
  * A representation of the literals of the enumeration '<em><b>CB Kind</b></em>',
  * and utility methods for working with them.
  * <!-- end-user-doc -->
- * <!-- begin-model-doc -->
- * Enumeration of control block kinds.
- * <!-- end-model-doc -->
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCBKind()
  * @model extendedMetaData="name='tCBKind'"
  * @generated
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java
index fc3d8d7..a7b2eb8 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java
@@ -26,10 +26,6 @@ import org.eclipse.emf.common.util.EList;
  * A representation of the model object '<em><b>CDC</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a Common Data Class (CDC). It is always non-abstract.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -42,6 +38,7 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#isStatistics <em>Statistics</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#isTypeKindParameterized <em>Type Kind Parameterized</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getVariant <em>Variant</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getCDCs <em>CD Cs</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC()
@@ -52,6 +49,7 @@ public interface CDC extends TitledClass {
     /**
      * Returns the value of the '<em><b>Sub Data Object</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getCDC <em>CDC</em>}'.
      * <!-- begin-user-doc -->
      * <p>
      * If the meaning of the '<em>Sub Data Object</em>' containment reference list isn't clear,
@@ -59,16 +57,41 @@ public interface CDC extends TitledClass {
      * </p>
      * <!-- end-user-doc -->
      * @return the value of the '<em>Sub Data Object</em>' containment reference list.
+     * @see #isSetSubDataObject()
+     * @see #unsetSubDataObject()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC_SubDataObject()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getCDC
+     * @model opposite="cDC" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='SubDataObject' namespace='##targetNamespace'"
      * @generated
      */
     EList< SubDataObject > getSubDataObject();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getSubDataObject <em>Sub Data Object</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetSubDataObject()
+     * @see #getSubDataObject()
+     * @generated
+     */
+    void unsetSubDataObject();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getSubDataObject <em>Sub Data Object</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Sub Data Object</em>' containment reference list is set.
+     * @see #unsetSubDataObject()
+     * @see #getSubDataObject()
+     * @generated
+     */
+    boolean isSetSubDataObject();
+
     /**
      * Returns the value of the '<em><b>Data Attribute</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getCDC <em>CDC</em>}'.
      * <!-- begin-user-doc -->
      * <p>
      * If the meaning of the '<em>Data Attribute</em>' containment reference list isn't clear,
@@ -76,15 +99,40 @@ public interface CDC extends TitledClass {
      * </p>
      * <!-- end-user-doc -->
      * @return the value of the '<em>Data Attribute</em>' containment reference list.
+     * @see #isSetDataAttribute()
+     * @see #unsetDataAttribute()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC_DataAttribute()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getCDC
+     * @model opposite="cDC" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='DataAttribute' namespace='##targetNamespace'"
      * @generated
      */
     EList< DataAttribute > getDataAttribute();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getDataAttribute <em>Data Attribute</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDataAttribute()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    void unsetDataAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getDataAttribute <em>Data Attribute</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Data Attribute</em>' containment reference list is set.
+     * @see #unsetDataAttribute()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    boolean isSetDataAttribute();
+
     /**
      * Returns the value of the '<em><b>Service Parameter</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getCDC <em>CDC</em>}'.
      * <!-- begin-user-doc -->
      * <p>
      * If the meaning of the '<em>Service Parameter</em>' containment reference isn't clear,
@@ -92,9 +140,12 @@ public interface CDC extends TitledClass {
      * </p>
      * <!-- end-user-doc -->
      * @return the value of the '<em>Service Parameter</em>' containment reference.
+     * @see #isSetServiceParameter()
+     * @see #unsetServiceParameter()
      * @see #setServiceParameter(ServiceParameter)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC_ServiceParameter()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getCDC
+     * @model opposite="cDC" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ServiceParameter' namespace='##targetNamespace'"
      * @generated
      */
@@ -105,19 +156,41 @@ public interface CDC extends TitledClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Service Parameter</em>' containment reference.
+     * @see #isSetServiceParameter()
+     * @see #unsetServiceParameter()
      * @see #getServiceParameter()
      * @generated
      */
     void setServiceParameter( ServiceParameter value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getServiceParameter <em>Service Parameter</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetServiceParameter()
+     * @see #getServiceParameter()
+     * @see #setServiceParameter(ServiceParameter)
+     * @generated
+     */
+    void unsetServiceParameter();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getServiceParameter <em>Service Parameter</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service Parameter</em>' containment reference is set.
+     * @see #unsetServiceParameter()
+     * @see #getServiceParameter()
+     * @see #setServiceParameter(ServiceParameter)
+     * @generated
+     */
+    boolean isSetServiceParameter();
+
     /**
      * Returns the value of the '<em><b>Enum Parameterized</b></em>' attribute.
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether this CDC has at least one child data attribute of typeKind ENUMERATION but its exact enumeration type is left open.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Enum Parameterized</em>' attribute.
      * @see #isSetEnumParameterized()
      * @see #unsetEnumParameterized()
@@ -168,13 +241,12 @@ public interface CDC extends TitledClass {
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the common data class.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -185,19 +257,41 @@ public interface CDC extends TitledClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
     /**
      * Returns the value of the '<em><b>Statistics</b></em>' attribute.
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether DataObject of this CDC can be used for statistics.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Statistics</em>' attribute.
      * @see #isSetStatistics()
      * @see #unsetStatistics()
@@ -249,10 +343,6 @@ public interface CDC extends TitledClass {
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether this CDC has at least one child data attribute with typeKind "undefined".
-     * Cannot be set to true at the same time as sibling attribute enumParameterized.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type Kind Parameterized</em>' attribute.
      * @see #isSetTypeKindParameterized()
      * @see #unsetTypeKindParameterized()
@@ -303,13 +393,12 @@ public interface CDC extends TitledClass {
      * Returns the value of the '<em><b>Variant</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Identification of the variant of the CDC (e.g., SPG_SP).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Variant</em>' attribute.
+     * @see #isSetVariant()
+     * @see #unsetVariant()
      * @see #setVariant(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC_Variant()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.Token"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Token"
      *        extendedMetaData="kind='attribute' name='variant'"
      * @generated
      */
@@ -320,9 +409,62 @@ public interface CDC extends TitledClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Variant</em>' attribute.
+     * @see #isSetVariant()
+     * @see #unsetVariant()
      * @see #getVariant()
      * @generated
      */
     void setVariant( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getVariant <em>Variant</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetVariant()
+     * @see #getVariant()
+     * @see #setVariant(String)
+     * @generated
+     */
+    void unsetVariant();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getVariant <em>Variant</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Variant</em>' attribute is set.
+     * @see #unsetVariant()
+     * @see #getVariant()
+     * @see #setVariant(String)
+     * @generated
+     */
+    boolean isSetVariant();
+
+    /**
+     * Returns the value of the '<em><b>CD Cs</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getCDC <em>CDC</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>CD Cs</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>CD Cs</em>' container reference.
+     * @see #setCDCs(CDCs)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC_CDCs()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getCDC
+     * @model opposite="cDC" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    CDCs getCDCs();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getCDCs <em>CD Cs</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>CD Cs</em>' container reference.
+     * @see #getCDCs()
+     * @generated
+     */
+    void setCDCs( CDCs value );
+
 } // CDC
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDCs.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDCs.java
index a87bae6..3c7cb9e 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDCs.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDCs.java
@@ -28,15 +28,12 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>CD Cs</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of CDCs introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getCDC <em>CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDCs()
@@ -47,17 +44,67 @@ public interface CDCs extends EObject {
     /**
      * Returns the value of the '<em><b>CDC</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getCDCs <em>CD Cs</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Definition of a common data class.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>CDC</em>' containment reference list.
+     * @see #isSetCDC()
+     * @see #unsetCDC()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDCs_CDC()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getCDCs
+     * @model opposite="cDCs" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='CDC' namespace='##targetNamespace'"
      * @generated
      */
     EList< CDC > getCDC();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getCDC <em>CDC</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetCDC()
+     * @see #getCDC()
+     * @generated
+     */
+    void unsetCDC();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getCDC <em>CDC</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>CDC</em>' containment reference list is set.
+     * @see #unsetCDC()
+     * @see #getCDC()
+     * @generated
+     */
+    boolean isSetCDC();
+
+    /**
+     * Returns the value of the '<em><b>NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getCDCs <em>CD Cs</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS</em>' container reference.
+     * @see #setNS(NS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDCs_NS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getCDCs
+     * @model opposite="cDCs" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NS getNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getNS <em>NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS</em>' container reference.
+     * @see #getNS()
+     * @generated
+     */
+    void setNS( NS value );
+
 } // CDCs
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Changes.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Changes.java
index 1b11ca3..a5dfcd5 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Changes.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Changes.java
@@ -26,10 +26,6 @@ import javax.xml.datatype.XMLGregorianCalendar;
  * A representation of the model object '<em><b>Changes</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Namespace history, e.g., which version it is based on and which TISSUES it includes since then.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -38,6 +34,8 @@ import javax.xml.datatype.XMLGregorianCalendar;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getDate <em>Date</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getRevision <em>Revision</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getTissues <em>Tissues</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getNS <em>NS</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getChanges()
@@ -49,13 +47,13 @@ public interface Changes extends NSDObjectWithVersionAndRelease {
      * Returns the value of the '<em><b>Changes ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to a textual description of changes (not TISSUE list). Shall only be used for private namespaces.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Changes ID</em>' attribute.
+     * @see #isSetChangesID()
+     * @see #unsetChangesID()
      * @see #setChangesID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getChanges_ChangesID()
-     * @model extendedMetaData="kind='attribute' name='changesID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='changesID'"
      * @generated
      */
     String getChangesID();
@@ -65,22 +63,46 @@ public interface Changes extends NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Changes ID</em>' attribute.
+     * @see #isSetChangesID()
+     * @see #unsetChangesID()
      * @see #getChangesID()
      * @generated
      */
     void setChangesID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getChangesID <em>Changes ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetChangesID()
+     * @see #getChangesID()
+     * @see #setChangesID(String)
+     * @generated
+     */
+    void unsetChangesID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getChangesID <em>Changes ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Changes ID</em>' attribute is set.
+     * @see #unsetChangesID()
+     * @see #getChangesID()
+     * @see #setChangesID(String)
+     * @generated
+     */
+    boolean isSetChangesID();
+
     /**
      * Returns the value of the '<em><b>Date</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The date since the Tissues have been logged.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Date</em>' attribute.
+     * @see #isSetDate()
+     * @see #unsetDate()
      * @see #setDate(XMLGregorianCalendar)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getChanges_Date()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.Date"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Date"
      *        extendedMetaData="kind='attribute' name='date'"
      * @generated
      */
@@ -91,19 +113,41 @@ public interface Changes extends NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Date</em>' attribute.
+     * @see #isSetDate()
+     * @see #unsetDate()
      * @see #getDate()
      * @generated
      */
     void setDate( XMLGregorianCalendar value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getDate <em>Date</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDate()
+     * @see #getDate()
+     * @see #setDate(XMLGregorianCalendar)
+     * @generated
+     */
+    void unsetDate();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getDate <em>Date</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Date</em>' attribute is set.
+     * @see #unsetDate()
+     * @see #getDate()
+     * @see #setDate(XMLGregorianCalendar)
+     * @generated
+     */
+    boolean isSetDate();
+
     /**
      * Returns the value of the '<em><b>Revision</b></em>' attribute.
      * The default value is <code>"A"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Revision of the namespace this NSD file is based on, per default 'A'.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Revision</em>' attribute.
      * @see #isSetRevision()
      * @see #unsetRevision()
@@ -154,13 +198,13 @@ public interface Changes extends NSDObjectWithVersionAndRelease {
      * Returns the value of the '<em><b>Tissues</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Comma-separated list of TISSUE numbers that were implemented since the previous namespace version/revision/release.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Tissues</em>' attribute.
+     * @see #isSetTissues()
+     * @see #unsetTissues()
      * @see #setTissues(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getChanges_Tissues()
-     * @model extendedMetaData="kind='attribute' name='tissues'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='tissues'"
      * @generated
      */
     String getTissues();
@@ -170,9 +214,90 @@ public interface Changes extends NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Tissues</em>' attribute.
+     * @see #isSetTissues()
+     * @see #unsetTissues()
      * @see #getTissues()
      * @generated
      */
     void setTissues( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getTissues <em>Tissues</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetTissues()
+     * @see #getTissues()
+     * @see #setTissues(String)
+     * @generated
+     */
+    void unsetTissues();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getTissues <em>Tissues</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Tissues</em>' attribute is set.
+     * @see #unsetTissues()
+     * @see #getTissues()
+     * @see #setTissues(String)
+     * @generated
+     */
+    boolean isSetTissues();
+
+    /**
+     * Returns the value of the '<em><b>NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getChanges <em>Changes</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS</em>' container reference.
+     * @see #setNS(NS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getChanges_NS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getChanges
+     * @model opposite="changes" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NS getNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getNS <em>NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS</em>' container reference.
+     * @see #getNS()
+     * @generated
+     */
+    void setNS( NS value );
+
+    /**
+     * Returns the value of the '<em><b>Service NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getChanges <em>Changes</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service NS</em>' container reference.
+     * @see #setServiceNS(ServiceNS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getChanges_ServiceNS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getChanges
+     * @model opposite="changes" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceNS getServiceNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getServiceNS <em>Service NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service NS</em>' container reference.
+     * @see #getServiceNS()
+     * @generated
+     */
+    void setServiceNS( ServiceNS value );
+
 } // Changes
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttribute.java
index ccf9dea..2837566 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttribute.java
@@ -26,16 +26,14 @@ import org.eclipse.emf.common.util.EList;
  * A representation of the model object '<em><b>Constructed Attribute</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a constructed (structured) data attribute.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getSubDataAttribute <em>Sub Data Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getConstructedAttributes <em>Constructed Attributes</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getServiceTypeRealizations <em>Service Type Realizations</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttribute()
@@ -46,6 +44,7 @@ public interface ConstructedAttribute extends TitledClass {
     /**
      * Returns the value of the '<em><b>Sub Data Attribute</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getConstructedAttribute <em>Constructed Attribute</em>}'.
      * <!-- begin-user-doc -->
      * <p>
      * If the meaning of the '<em>Sub Data Attribute</em>' containment reference list isn't clear,
@@ -53,24 +52,47 @@ public interface ConstructedAttribute extends TitledClass {
      * </p>
      * <!-- end-user-doc -->
      * @return the value of the '<em>Sub Data Attribute</em>' containment reference list.
+     * @see #isSetSubDataAttribute()
+     * @see #unsetSubDataAttribute()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttribute_SubDataAttribute()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getConstructedAttribute
+     * @model opposite="constructedAttribute" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='SubDataAttribute' namespace='##targetNamespace'"
      * @generated
      */
     EList< SubDataAttribute > getSubDataAttribute();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getSubDataAttribute <em>Sub Data Attribute</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetSubDataAttribute()
+     * @see #getSubDataAttribute()
+     * @generated
+     */
+    void unsetSubDataAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getSubDataAttribute <em>Sub Data Attribute</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Sub Data Attribute</em>' containment reference list is set.
+     * @see #unsetSubDataAttribute()
+     * @see #getSubDataAttribute()
+     * @generated
+     */
+    boolean isSetSubDataAttribute();
+
     /**
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the constructed (structured) data attribute.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttribute_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -81,9 +103,90 @@ public interface ConstructedAttribute extends TitledClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
+    /**
+     * Returns the value of the '<em><b>Constructed Attributes</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getConstructedAttribute <em>Constructed Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Constructed Attributes</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Constructed Attributes</em>' container reference.
+     * @see #setConstructedAttributes(ConstructedAttributes)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttribute_ConstructedAttributes()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getConstructedAttribute
+     * @model opposite="constructedAttribute" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ConstructedAttributes getConstructedAttributes();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getConstructedAttributes <em>Constructed Attributes</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Constructed Attributes</em>' container reference.
+     * @see #getConstructedAttributes()
+     * @generated
+     */
+    void setConstructedAttributes( ConstructedAttributes value );
+
+    /**
+     * Returns the value of the '<em><b>Service Type Realizations</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceTypeRealization <em>Service Type Realization</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service Type Realizations</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service Type Realizations</em>' container reference.
+     * @see #setServiceTypeRealizations(ServiceTypeRealizations)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttribute_ServiceTypeRealizations()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceTypeRealization
+     * @model opposite="serviceTypeRealization" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceTypeRealizations getServiceTypeRealizations();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getServiceTypeRealizations <em>Service Type Realizations</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service Type Realizations</em>' container reference.
+     * @see #getServiceTypeRealizations()
+     * @generated
+     */
+    void setServiceTypeRealizations( ServiceTypeRealizations value );
+
 } // ConstructedAttribute
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttributes.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttributes.java
index 2370fbe..a614310 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttributes.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ConstructedAttributes.java
@@ -28,15 +28,12 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Constructed Attributes</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of Constructed Attributes introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getConstructedAttribute <em>Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttributes()
@@ -47,17 +44,67 @@ public interface ConstructedAttributes extends EObject {
     /**
      * Returns the value of the '<em><b>Constructed Attribute</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getConstructedAttributes <em>Constructed Attributes</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Definition of a constructed (structured) data attribute.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Constructed Attribute</em>' containment reference list.
+     * @see #isSetConstructedAttribute()
+     * @see #unsetConstructedAttribute()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttributes_ConstructedAttribute()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getConstructedAttributes
+     * @model opposite="constructedAttributes" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ConstructedAttribute' namespace='##targetNamespace'"
      * @generated
      */
     EList< ConstructedAttribute > getConstructedAttribute();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getConstructedAttribute <em>Constructed Attribute</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetConstructedAttribute()
+     * @see #getConstructedAttribute()
+     * @generated
+     */
+    void unsetConstructedAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getConstructedAttribute <em>Constructed Attribute</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Constructed Attribute</em>' containment reference list is set.
+     * @see #unsetConstructedAttribute()
+     * @see #getConstructedAttribute()
+     * @generated
+     */
+    boolean isSetConstructedAttribute();
+
+    /**
+     * Returns the value of the '<em><b>NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getConstructedAttributes <em>Constructed Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS</em>' container reference.
+     * @see #setNS(NS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttributes_NS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getConstructedAttributes
+     * @model opposite="constructedAttributes" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NS getNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getNS <em>NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS</em>' container reference.
+     * @see #getNS()
+     * @generated
+     */
+    void setNS( NS value );
+
 } // ConstructedAttributes
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CopyrightNotice.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CopyrightNotice.java
index 83a8224..32de3bc 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CopyrightNotice.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CopyrightNotice.java
@@ -26,16 +26,13 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Copyright Notice</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Copyright notice definition.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getNotice <em>Notice</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getLicense <em>License</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getCopyrighted <em>Copyrighted</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCopyrightNotice()
@@ -45,15 +42,16 @@ import org.eclipse.emf.ecore.EObject;
 public interface CopyrightNotice extends EObject {
     /**
      * Returns the value of the '<em><b>Notice</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Notice#getCopyrightNotice <em>Copyright Notice</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The textual copyright notice.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Notice</em>' containment reference.
+     * @see #isSetNotice()
+     * @see #unsetNotice()
      * @see #setNotice(Notice)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCopyrightNotice_Notice()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Notice#getCopyrightNotice
+     * @model opposite="copyrightNotice" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Notice' namespace='##targetNamespace'"
      * @generated
      */
@@ -64,22 +62,48 @@ public interface CopyrightNotice extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Notice</em>' containment reference.
+     * @see #isSetNotice()
+     * @see #unsetNotice()
      * @see #getNotice()
      * @generated
      */
     void setNotice( Notice value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getNotice <em>Notice</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetNotice()
+     * @see #getNotice()
+     * @see #setNotice(Notice)
+     * @generated
+     */
+    void unsetNotice();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getNotice <em>Notice</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Notice</em>' containment reference is set.
+     * @see #unsetNotice()
+     * @see #getNotice()
+     * @see #setNotice(Notice)
+     * @generated
+     */
+    boolean isSetNotice();
+
     /**
      * Returns the value of the '<em><b>License</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getCopyrightNotice <em>Copyright Notice</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The license definition.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>License</em>' containment reference.
+     * @see #isSetLicense()
+     * @see #unsetLicense()
      * @see #setLicense(License)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCopyrightNotice_License()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getCopyrightNotice
+     * @model opposite="copyrightNotice" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='License' namespace='##targetNamespace'"
      * @generated
      */
@@ -90,9 +114,62 @@ public interface CopyrightNotice extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>License</em>' containment reference.
+     * @see #isSetLicense()
+     * @see #unsetLicense()
      * @see #getLicense()
      * @generated
      */
     void setLicense( License value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getLicense <em>License</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetLicense()
+     * @see #getLicense()
+     * @see #setLicense(License)
+     * @generated
+     */
+    void unsetLicense();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getLicense <em>License</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>License</em>' containment reference is set.
+     * @see #unsetLicense()
+     * @see #getLicense()
+     * @see #setLicense(License)
+     * @generated
+     */
+    boolean isSetLicense();
+
+    /**
+     * Returns the value of the '<em><b>Copyrighted</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Copyrighted#getCopyright <em>Copyright</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Copyrighted</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Copyrighted</em>' container reference.
+     * @see #setCopyrighted(Copyrighted)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCopyrightNotice_Copyrighted()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Copyrighted#getCopyright
+     * @model opposite="copyright" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    Copyrighted getCopyrighted();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getCopyrighted <em>Copyrighted</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Copyrighted</em>' container reference.
+     * @see #getCopyrighted()
+     * @generated
+     */
+    void setCopyrighted( Copyrighted value );
+
 } // CopyrightNotice
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Copyrighted.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Copyrighted.java
index 3f0d20f..3882b42 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Copyrighted.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Copyrighted.java
@@ -26,10 +26,6 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Copyrighted</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Add description for a copyrighted XML.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -44,15 +40,16 @@ import org.eclipse.emf.ecore.EObject;
 public interface Copyrighted extends EObject {
     /**
      * Returns the value of the '<em><b>Copyright</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getCopyrighted <em>Copyrighted</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The copyright notice attached to the XML
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Copyright</em>' containment reference.
+     * @see #isSetCopyright()
+     * @see #unsetCopyright()
      * @see #setCopyright(CopyrightNotice)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCopyrighted_Copyright()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getCopyrighted
+     * @model opposite="copyrighted" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Copyright' namespace='##targetNamespace'"
      * @generated
      */
@@ -63,9 +60,34 @@ public interface Copyrighted extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Copyright</em>' containment reference.
+     * @see #isSetCopyright()
+     * @see #unsetCopyright()
      * @see #getCopyright()
      * @generated
      */
     void setCopyright( CopyrightNotice value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Copyrighted#getCopyright <em>Copyright</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetCopyright()
+     * @see #getCopyright()
+     * @see #setCopyright(CopyrightNotice)
+     * @generated
+     */
+    void unsetCopyright();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Copyrighted#getCopyright <em>Copyright</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Copyright</em>' containment reference is set.
+     * @see #unsetCopyright()
+     * @see #getCopyright()
+     * @see #setCopyright(CopyrightNotice)
+     * @generated
+     */
+    boolean isSetCopyright();
+
 } // Copyrighted
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java
index 2899eab..de130d3 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java
@@ -28,10 +28,6 @@ import org.eclipse.emf.common.util.Enumerator;
  * A representation of the model object '<em><b>Data Attribute</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a Data Attribute.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -53,6 +49,7 @@ import org.eclipse.emf.common.util.Enumerator;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getSizeAttribute <em>Size Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getTypeKind <em>Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getCDC <em>CDC</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute()
@@ -119,13 +116,12 @@ public interface DataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Default Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Default value for the data attribute. May only be defined for data attributes with typeKind="BASIC" or "ENUMERATED".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Default Value</em>' attribute.
+     * @see #isSetDefaultValue()
+     * @see #unsetDefaultValue()
      * @see #setDefaultValue(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_DefaultValue()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.NormalizedString"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.NormalizedString"
      *        extendedMetaData="kind='attribute' name='defaultValue'"
      * @generated
      */
@@ -136,11 +132,36 @@ public interface DataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Default Value</em>' attribute.
+     * @see #isSetDefaultValue()
+     * @see #unsetDefaultValue()
      * @see #getDefaultValue()
      * @generated
      */
     void setDefaultValue( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getDefaultValue <em>Default Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDefaultValue()
+     * @see #getDefaultValue()
+     * @see #setDefaultValue(String)
+     * @generated
+     */
+    void unsetDefaultValue();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getDefaultValue <em>Default Value</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Default Value</em>' attribute is set.
+     * @see #unsetDefaultValue()
+     * @see #getDefaultValue()
+     * @see #setDefaultValue(String)
+     * @generated
+     */
+    boolean isSetDefaultValue();
+
     /**
      * Returns the value of the '<em><b>Dupd</b></em>' attribute.
      * The default value is <code>"false"</code>.
@@ -200,13 +221,12 @@ public interface DataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Fc</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Functional constraint of the data attribute.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Fc</em>' attribute.
+     * @see #isSetFc()
+     * @see #unsetFc()
      * @see #setFc(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_Fc()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='fc'"
      * @generated
      */
@@ -217,19 +237,41 @@ public interface DataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Fc</em>' attribute.
+     * @see #isSetFc()
+     * @see #unsetFc()
      * @see #getFc()
      * @generated
      */
     void setFc( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getFc <em>Fc</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetFc()
+     * @see #getFc()
+     * @see #setFc(String)
+     * @generated
+     */
+    void unsetFc();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getFc <em>Fc</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Fc</em>' attribute is set.
+     * @see #unsetFc()
+     * @see #getFc()
+     * @see #setFc(String)
+     * @generated
+     */
+    boolean isSetFc();
+
     /**
      * Returns the value of the '<em><b>Is Array</b></em>' attribute.
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether the element is an array. By default, not an array.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Is Array</em>' attribute.
      * @see #isSetIsArray()
      * @see #unsetIsArray()
@@ -280,14 +322,13 @@ public interface DataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Max Index Attribute</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the Attribute holding the maximal index of the array.
-     * Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Max Index Attribute</em>' attribute.
+     * @see #isSetMaxIndexAttribute()
+     * @see #unsetMaxIndexAttribute()
      * @see #setMaxIndexAttribute(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_MaxIndexAttribute()
-     * @model extendedMetaData="kind='attribute' name='maxIndexAttribute'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='maxIndexAttribute'"
      * @generated
      */
     String getMaxIndexAttribute();
@@ -297,22 +338,46 @@ public interface DataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Max Index Attribute</em>' attribute.
+     * @see #isSetMaxIndexAttribute()
+     * @see #unsetMaxIndexAttribute()
      * @see #getMaxIndexAttribute()
      * @generated
      */
     void setMaxIndexAttribute( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getMaxIndexAttribute <em>Max Index Attribute</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetMaxIndexAttribute()
+     * @see #getMaxIndexAttribute()
+     * @see #setMaxIndexAttribute(String)
+     * @generated
+     */
+    void unsetMaxIndexAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getMaxIndexAttribute <em>Max Index Attribute</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Max Index Attribute</em>' attribute is set.
+     * @see #unsetMaxIndexAttribute()
+     * @see #getMaxIndexAttribute()
+     * @see #setMaxIndexAttribute(String)
+     * @generated
+     */
+    boolean isSetMaxIndexAttribute();
+
     /**
      * Returns the value of the '<em><b>Max Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Allowed maximal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind="BASIC" and corresponding to a number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Max Value</em>' attribute.
+     * @see #isSetMaxValue()
+     * @see #unsetMaxValue()
      * @see #setMaxValue(BigDecimal)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_MaxValue()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.Decimal"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Decimal"
      *        extendedMetaData="kind='attribute' name='maxValue'"
      * @generated
      */
@@ -323,21 +388,41 @@ public interface DataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Max Value</em>' attribute.
+     * @see #isSetMaxValue()
+     * @see #unsetMaxValue()
      * @see #getMaxValue()
      * @generated
      */
     void setMaxValue( BigDecimal value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getMaxValue <em>Max Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetMaxValue()
+     * @see #getMaxValue()
+     * @see #setMaxValue(BigDecimal)
+     * @generated
+     */
+    void unsetMaxValue();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getMaxValue <em>Max Value</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Max Value</em>' attribute is set.
+     * @see #unsetMaxValue()
+     * @see #getMaxValue()
+     * @see #setMaxValue(BigDecimal)
+     * @generated
+     */
+    boolean isSetMaxValue();
+
     /**
      * Returns the value of the '<em><b>Min Index</b></em>' attribute.
      * The default value is <code>"0"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Lowest index of the array.
-     * Is relevant information if and only if isArray=true.
-     * By default 0.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Min Index</em>' attribute.
      * @see #isSetMinIndex()
      * @see #unsetMinIndex()
@@ -388,13 +473,12 @@ public interface DataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Min Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Allowed minimal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind="BASIC" and corresponding to a number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Min Value</em>' attribute.
+     * @see #isSetMinValue()
+     * @see #unsetMinValue()
      * @see #setMinValue(BigDecimal)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_MinValue()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.Decimal"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Decimal"
      *        extendedMetaData="kind='attribute' name='minValue'"
      * @generated
      */
@@ -405,22 +489,46 @@ public interface DataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Min Value</em>' attribute.
+     * @see #isSetMinValue()
+     * @see #unsetMinValue()
      * @see #getMinValue()
      * @generated
      */
     void setMinValue( BigDecimal value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getMinValue <em>Min Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetMinValue()
+     * @see #getMinValue()
+     * @see #setMinValue(BigDecimal)
+     * @generated
+     */
+    void unsetMinValue();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getMinValue <em>Min Value</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Min Value</em>' attribute is set.
+     * @see #unsetMinValue()
+     * @see #getMinValue()
+     * @see #setMinValue(BigDecimal)
+     * @generated
+     */
+    boolean isSetMinValue();
+
     /**
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the data attribute.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -431,19 +539,41 @@ public interface DataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
     /**
      * Returns the value of the '<em><b>Pres Cond</b></em>' attribute.
      * The default value is <code>"M"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Presence condition of the element. By default 'M' (mandatory).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond</em>' attribute.
      * @see #isSetPresCond()
      * @see #unsetPresCond()
@@ -494,13 +624,13 @@ public interface DataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Pres Cond Args</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition. Can be a sibling element or a group number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond Args</em>' attribute.
+     * @see #isSetPresCondArgs()
+     * @see #unsetPresCondArgs()
      * @see #setPresCondArgs(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_PresCondArgs()
-     * @model extendedMetaData="kind='attribute' name='presCondArgs'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='presCondArgs'"
      * @generated
      */
     String getPresCondArgs();
@@ -510,22 +640,47 @@ public interface DataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Pres Cond Args</em>' attribute.
+     * @see #isSetPresCondArgs()
+     * @see #unsetPresCondArgs()
      * @see #getPresCondArgs()
      * @generated
      */
     void setPresCondArgs( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getPresCondArgs <em>Pres Cond Args</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresCondArgs()
+     * @see #getPresCondArgs()
+     * @see #setPresCondArgs(String)
+     * @generated
+     */
+    void unsetPresCondArgs();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getPresCondArgs <em>Pres Cond Args</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Pres Cond Args</em>' attribute is set.
+     * @see #unsetPresCondArgs()
+     * @see #getPresCondArgs()
+     * @see #setPresCondArgs(String)
+     * @generated
+     */
+    boolean isSetPresCondArgs();
+
     /**
      * Returns the value of the '<em><b>Pres Cond Args ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition: a documentation identifier referring to some free text.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond Args ID</em>' attribute.
+     * @see #isSetPresCondArgsID()
+     * @see #unsetPresCondArgsID()
      * @see #setPresCondArgsID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_PresCondArgsID()
-     * @model extendedMetaData="kind='attribute' name='presCondArgsID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='presCondArgsID'"
      * @generated
      */
     String getPresCondArgsID();
@@ -535,11 +690,36 @@ public interface DataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Pres Cond Args ID</em>' attribute.
+     * @see #isSetPresCondArgsID()
+     * @see #unsetPresCondArgsID()
      * @see #getPresCondArgsID()
      * @generated
      */
     void setPresCondArgsID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresCondArgsID()
+     * @see #getPresCondArgsID()
+     * @see #setPresCondArgsID(String)
+     * @generated
+     */
+    void unsetPresCondArgsID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Pres Cond Args ID</em>' attribute is set.
+     * @see #unsetPresCondArgsID()
+     * @see #getPresCondArgsID()
+     * @see #setPresCondArgsID(String)
+     * @generated
+     */
+    boolean isSetPresCondArgsID();
+
     /**
      * Returns the value of the '<em><b>Qchg</b></em>' attribute.
      * The default value is <code>"false"</code>.
@@ -599,14 +779,13 @@ public interface DataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Size Attribute</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Sibling data attribute name holding the size of the array.
-     * Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Size Attribute</em>' attribute.
+     * @see #isSetSizeAttribute()
+     * @see #unsetSizeAttribute()
      * @see #setSizeAttribute(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_SizeAttribute()
-     * @model extendedMetaData="kind='attribute' name='sizeAttribute'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='sizeAttribute'"
      * @generated
      */
     String getSizeAttribute();
@@ -616,22 +795,47 @@ public interface DataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Size Attribute</em>' attribute.
+     * @see #isSetSizeAttribute()
+     * @see #unsetSizeAttribute()
      * @see #getSizeAttribute()
      * @generated
      */
     void setSizeAttribute( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getSizeAttribute <em>Size Attribute</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetSizeAttribute()
+     * @see #getSizeAttribute()
+     * @see #setSizeAttribute(String)
+     * @generated
+     */
+    void unsetSizeAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getSizeAttribute <em>Size Attribute</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Size Attribute</em>' attribute is set.
+     * @see #unsetSizeAttribute()
+     * @see #getSizeAttribute()
+     * @see #setSizeAttribute(String)
+     * @generated
+     */
+    boolean isSetSizeAttribute();
+
     /**
      * Returns the value of the '<em><b>Type</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The type of the data attribute, e.g., the name of a basic type like INT32, the name of an enumeration of a constructed data attribute - depending on the sibling typeKind. If not provided, shall be defined by the "parent" element.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #setType(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_Type()
-     * @model extendedMetaData="kind='attribute' name='type'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='type'"
      * @generated
      */
     String getType();
@@ -641,19 +845,41 @@ public interface DataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #getType()
      * @generated
      */
     void setType( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getType <em>Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    void unsetType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getType <em>Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Type</em>' attribute is set.
+     * @see #unsetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    boolean isSetType();
+
     /**
      * Returns the value of the '<em><b>Type Kind</b></em>' attribute.
      * The default value is <code>"BASIC"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The kind of the data attribute's type. By  default, "BASIC".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type Kind</em>' attribute.
      * @see #isSetTypeKind()
      * @see #unsetTypeKind()
@@ -700,4 +926,32 @@ public interface DataAttribute extends DocumentedClass {
      */
     boolean isSetTypeKind();
 
+    /**
+     * Returns the value of the '<em><b>CDC</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getDataAttribute <em>Data Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>CDC</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>CDC</em>' container reference.
+     * @see #setCDC(CDC)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_CDC()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getDataAttribute
+     * @model opposite="dataAttribute" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    CDC getCDC();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getCDC <em>CDC</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>CDC</em>' container reference.
+     * @see #getCDC()
+     * @generated
+     */
+    void setCDC( CDC value );
+
 } // DataAttribute
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java
index 2a723fe..aead811 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java
@@ -24,10 +24,6 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  * A representation of the model object '<em><b>Data Object</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a Data Object of a logical node.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -43,6 +39,7 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getUnderlyingType <em>Underlying Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getUnderlyingTypeKind <em>Underlying Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getAnyLNClass <em>Any LN Class</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject()
@@ -55,9 +52,6 @@ public interface DataObject extends DocumentedClass {
      * The default value is <code>"M"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Presence condition of the element. By default 'M' (mandatory).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Ds Pres Cond</em>' attribute.
      * @see #isSetDsPresCond()
      * @see #unsetDsPresCond()
@@ -108,13 +102,13 @@ public interface DataObject extends DocumentedClass {
      * Returns the value of the '<em><b>Ds Pres Cond Args</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition. Can be a sibling element or a group number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Ds Pres Cond Args</em>' attribute.
+     * @see #isSetDsPresCondArgs()
+     * @see #unsetDsPresCondArgs()
      * @see #setDsPresCondArgs(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_DsPresCondArgs()
-     * @model extendedMetaData="kind='attribute' name='dsPresCondArgs'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='dsPresCondArgs'"
      * @generated
      */
     String getDsPresCondArgs();
@@ -124,22 +118,47 @@ public interface DataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Ds Pres Cond Args</em>' attribute.
+     * @see #isSetDsPresCondArgs()
+     * @see #unsetDsPresCondArgs()
      * @see #getDsPresCondArgs()
      * @generated
      */
     void setDsPresCondArgs( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getDsPresCondArgs <em>Ds Pres Cond Args</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDsPresCondArgs()
+     * @see #getDsPresCondArgs()
+     * @see #setDsPresCondArgs(String)
+     * @generated
+     */
+    void unsetDsPresCondArgs();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getDsPresCondArgs <em>Ds Pres Cond Args</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Ds Pres Cond Args</em>' attribute is set.
+     * @see #unsetDsPresCondArgs()
+     * @see #getDsPresCondArgs()
+     * @see #setDsPresCondArgs(String)
+     * @generated
+     */
+    boolean isSetDsPresCondArgs();
+
     /**
      * Returns the value of the '<em><b>Ds Pres Cond Args ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition: a documentation identifier referring to some free text.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Ds Pres Cond Args ID</em>' attribute.
+     * @see #isSetDsPresCondArgsID()
+     * @see #unsetDsPresCondArgsID()
      * @see #setDsPresCondArgsID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_DsPresCondArgsID()
-     * @model extendedMetaData="kind='attribute' name='dsPresCondArgsID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='dsPresCondArgsID'"
      * @generated
      */
     String getDsPresCondArgsID();
@@ -149,22 +168,46 @@ public interface DataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Ds Pres Cond Args ID</em>' attribute.
+     * @see #isSetDsPresCondArgsID()
+     * @see #unsetDsPresCondArgsID()
      * @see #getDsPresCondArgsID()
      * @generated
      */
     void setDsPresCondArgsID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getDsPresCondArgsID <em>Ds Pres Cond Args ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDsPresCondArgsID()
+     * @see #getDsPresCondArgsID()
+     * @see #setDsPresCondArgsID(String)
+     * @generated
+     */
+    void unsetDsPresCondArgsID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getDsPresCondArgsID <em>Ds Pres Cond Args ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Ds Pres Cond Args ID</em>' attribute is set.
+     * @see #unsetDsPresCondArgsID()
+     * @see #getDsPresCondArgsID()
+     * @see #setDsPresCondArgsID(String)
+     * @generated
+     */
+    boolean isSetDsPresCondArgsID();
+
     /**
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the data object.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -175,19 +218,41 @@ public interface DataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
     /**
      * Returns the value of the '<em><b>Pres Cond</b></em>' attribute.
      * The default value is <code>"M"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Presence condition of the element. By default 'M' (mandatory).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond</em>' attribute.
      * @see #isSetPresCond()
      * @see #unsetPresCond()
@@ -238,13 +303,13 @@ public interface DataObject extends DocumentedClass {
      * Returns the value of the '<em><b>Pres Cond Args</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition. Can be a sibling element or a group number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond Args</em>' attribute.
+     * @see #isSetPresCondArgs()
+     * @see #unsetPresCondArgs()
      * @see #setPresCondArgs(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_PresCondArgs()
-     * @model extendedMetaData="kind='attribute' name='presCondArgs'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='presCondArgs'"
      * @generated
      */
     String getPresCondArgs();
@@ -254,22 +319,47 @@ public interface DataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Pres Cond Args</em>' attribute.
+     * @see #isSetPresCondArgs()
+     * @see #unsetPresCondArgs()
      * @see #getPresCondArgs()
      * @generated
      */
     void setPresCondArgs( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getPresCondArgs <em>Pres Cond Args</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresCondArgs()
+     * @see #getPresCondArgs()
+     * @see #setPresCondArgs(String)
+     * @generated
+     */
+    void unsetPresCondArgs();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getPresCondArgs <em>Pres Cond Args</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Pres Cond Args</em>' attribute is set.
+     * @see #unsetPresCondArgs()
+     * @see #getPresCondArgs()
+     * @see #setPresCondArgs(String)
+     * @generated
+     */
+    boolean isSetPresCondArgs();
+
     /**
      * Returns the value of the '<em><b>Pres Cond Args ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition: a documentation identifier referring to some free text.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond Args ID</em>' attribute.
+     * @see #isSetPresCondArgsID()
+     * @see #unsetPresCondArgsID()
      * @see #setPresCondArgsID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_PresCondArgsID()
-     * @model extendedMetaData="kind='attribute' name='presCondArgsID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='presCondArgsID'"
      * @generated
      */
     String getPresCondArgsID();
@@ -279,19 +369,41 @@ public interface DataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Pres Cond Args ID</em>' attribute.
+     * @see #isSetPresCondArgsID()
+     * @see #unsetPresCondArgsID()
      * @see #getPresCondArgsID()
      * @generated
      */
     void setPresCondArgsID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresCondArgsID()
+     * @see #getPresCondArgsID()
+     * @see #setPresCondArgsID(String)
+     * @generated
+     */
+    void unsetPresCondArgsID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Pres Cond Args ID</em>' attribute is set.
+     * @see #unsetPresCondArgsID()
+     * @see #getPresCondArgsID()
+     * @see #setPresCondArgsID(String)
+     * @generated
+     */
+    boolean isSetPresCondArgsID();
+
     /**
      * Returns the value of the '<em><b>Transient</b></em>' attribute.
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether this data object is transient. By default, it is not.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Transient</em>' attribute.
      * @see #isSetTransient()
      * @see #unsetTransient()
@@ -342,13 +454,12 @@ public interface DataObject extends DocumentedClass {
      * Returns the value of the '<em><b>Type</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Type of the data object, i.e., the name of the CDC.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #setType(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_Type()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='type'"
      * @generated
      */
@@ -359,22 +470,47 @@ public interface DataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #getType()
      * @generated
      */
     void setType( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getType <em>Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    void unsetType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getType <em>Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Type</em>' attribute is set.
+     * @see #unsetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    boolean isSetType();
+
     /**
      * Returns the value of the '<em><b>Underlying Type</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Type to be used for type-open CDCs, e.g., enumeration to be used for enumeration-based CDCs (e.g., ENS, ENC, ENG).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Underlying Type</em>' attribute.
+     * @see #isSetUnderlyingType()
+     * @see #unsetUnderlyingType()
      * @see #setUnderlyingType(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_UnderlyingType()
-     * @model extendedMetaData="kind='attribute' name='underlyingType'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='underlyingType'"
      * @generated
      */
     String getUnderlyingType();
@@ -384,19 +520,41 @@ public interface DataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Underlying Type</em>' attribute.
+     * @see #isSetUnderlyingType()
+     * @see #unsetUnderlyingType()
      * @see #getUnderlyingType()
      * @generated
      */
     void setUnderlyingType( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getUnderlyingType <em>Underlying Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetUnderlyingType()
+     * @see #getUnderlyingType()
+     * @see #setUnderlyingType(String)
+     * @generated
+     */
+    void unsetUnderlyingType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getUnderlyingType <em>Underlying Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Underlying Type</em>' attribute is set.
+     * @see #unsetUnderlyingType()
+     * @see #getUnderlyingType()
+     * @see #setUnderlyingType(String)
+     * @generated
+     */
+    boolean isSetUnderlyingType();
+
     /**
      * Returns the value of the '<em><b>Underlying Type Kind</b></em>' attribute.
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The typeKind to be used for all "undefined" attributes of the CDC of this DataObject.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Underlying Type Kind</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind
      * @see #isSetUnderlyingTypeKind()
@@ -445,4 +603,32 @@ public interface DataObject extends DocumentedClass {
      */
     boolean isSetUnderlyingTypeKind();
 
+    /**
+     * Returns the value of the '<em><b>Any LN Class</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass#getDataObject <em>Data Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Any LN Class</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Any LN Class</em>' container reference.
+     * @see #setAnyLNClass(AnyLNClass)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_AnyLNClass()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass#getDataObject
+     * @model opposite="dataObject" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    AnyLNClass getAnyLNClass();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getAnyLNClass <em>Any LN Class</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Any LN Class</em>' container reference.
+     * @see #getAnyLNClass()
+     * @generated
+     */
+    void setAnyLNClass( AnyLNClass value );
+
 } // DataObject
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataSetMemberOf.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataSetMemberOf.java
index 6a4d3d1..89d0bb1 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataSetMemberOf.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataSetMemberOf.java
@@ -26,15 +26,12 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Data Set Member Of</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Indication of a given object can be a data set member of a given control block.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf#getCb <em>Cb</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf#getApplicableServices <em>Applicable Services</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataSetMemberOf()
@@ -47,16 +44,13 @@ public interface DataSetMemberOf extends EObject {
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CBKind}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Control block kind.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Cb</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CBKind
      * @see #isSetCb()
      * @see #unsetCb()
      * @see #setCb(CBKind)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataSetMemberOf_Cb()
-     * @model unsettable="true" required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='cb'"
      * @generated
      */
@@ -98,4 +92,32 @@ public interface DataSetMemberOf extends EObject {
      */
     boolean isSetCb();
 
+    /**
+     * Returns the value of the '<em><b>Applicable Services</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getDataSetMemberOf <em>Data Set Member Of</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Applicable Services</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Applicable Services</em>' container reference.
+     * @see #setApplicableServices(ApplicableServices)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataSetMemberOf_ApplicableServices()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getDataSetMemberOf
+     * @model opposite="dataSetMemberOf" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ApplicableServices getApplicableServices();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf#getApplicableServices <em>Applicable Services</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Applicable Services</em>' container reference.
+     * @see #getApplicableServices()
+     * @generated
+     */
+    void setApplicableServices( ApplicableServices value );
+
 } // DataSetMemberOf
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DefinedAttributeTypeKind.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DefinedAttributeTypeKind.java
index b89c354..fc2e4cf 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DefinedAttributeTypeKind.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DefinedAttributeTypeKind.java
@@ -30,9 +30,6 @@ import org.eclipse.emf.common.util.Enumerator;
  * A representation of the literals of the enumeration '<em><b>Defined Attribute Type Kind</b></em>',
  * and utility methods for working with them.
  * <!-- end-user-doc -->
- * <!-- begin-model-doc -->
- * Type kind of a data attribute.
- * <!-- end-model-doc -->
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDefinedAttributeTypeKind()
  * @model extendedMetaData="name='tDefinedAttributeTypeKind'"
  * @generated
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DependsOnType.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DependsOn.java
similarity index 59%
rename from fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DependsOnType.java
rename to fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DependsOn.java
index 89150a4..51861f4 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DependsOnType.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DependsOn.java
@@ -21,64 +21,94 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
 
 /**
  * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Depends On Type</b></em>'.
+ * A representation of the model object '<em><b>Depends On</b></em>'.
  * <!-- end-user-doc -->
  *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getId <em>Id</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getPublicationStage <em>Publication Stage</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getRevision <em>Revision</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getId <em>Id</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getPublicationStage <em>Publication Stage</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getRevision <em>Revision</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getNS <em>NS</em>}</li>
  * </ul>
  *
- * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDependsOnType()
+ * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDependsOn()
  * @model extendedMetaData="name='DependsOn_._type' kind='empty'"
  * @generated
  */
-public interface DependsOnType extends NSDObjectWithVersionAndRelease {
+public interface DependsOn extends NSDObjectWithVersionAndRelease {
     /**
      * Returns the value of the '<em><b>Id</b></em>' attribute.
      * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Id</em>' attribute isn't clear,
+     * there really should be more of a description here...
+     * </p>
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Identifier of the namespace, e.g., "IEC 61850-7-4", "(Tr)IEC 61850-90-4".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #setId(String)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDependsOnType_Id()
-     * @model required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDependsOn_Id()
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='id'"
      * @generated
      */
     String getId();
 
     /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getId <em>Id</em>}' attribute.
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getId <em>Id</em>}' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #getId()
      * @generated
      */
     void setId( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getId <em>Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    void unsetId();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getId <em>Id</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Id</em>' attribute is set.
+     * @see #unsetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    boolean isSetId();
+
     /**
      * Returns the value of the '<em><b>Publication Stage</b></em>' attribute.
      * The default value is <code>"IS"</code>.
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage}.
      * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Publication Stage</em>' attribute isn't clear,
+     * there really should be more of a description here...
+     * </p>
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The publication stage of the namespace, by default IS.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Publication Stage</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage
      * @see #isSetPublicationStage()
      * @see #unsetPublicationStage()
      * @see #setPublicationStage(PubStage)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDependsOnType_PublicationStage()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDependsOn_PublicationStage()
      * @model default="IS" unsettable="true"
      *        extendedMetaData="kind='attribute' name='publicationStage'"
      * @generated
@@ -86,7 +116,7 @@ public interface DependsOnType extends NSDObjectWithVersionAndRelease {
     PubStage getPublicationStage();
 
     /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getPublicationStage <em>Publication Stage</em>}' attribute.
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getPublicationStage <em>Publication Stage</em>}' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Publication Stage</em>' attribute.
@@ -99,7 +129,7 @@ public interface DependsOnType extends NSDObjectWithVersionAndRelease {
     void setPublicationStage( PubStage value );
 
     /**
-     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getPublicationStage <em>Publication Stage</em>}' attribute.
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getPublicationStage <em>Publication Stage</em>}' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @see #isSetPublicationStage()
@@ -110,7 +140,7 @@ public interface DependsOnType extends NSDObjectWithVersionAndRelease {
     void unsetPublicationStage();
 
     /**
-     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getPublicationStage <em>Publication Stage</em>}' attribute is set.
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getPublicationStage <em>Publication Stage</em>}' attribute is set.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @return whether the value of the '<em>Publication Stage</em>' attribute is set.
@@ -125,15 +155,16 @@ public interface DependsOnType extends NSDObjectWithVersionAndRelease {
      * Returns the value of the '<em><b>Revision</b></em>' attribute.
      * The default value is <code>"A"</code>.
      * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Revision</em>' attribute isn't clear,
+     * there really should be more of a description here...
+     * </p>
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Revision of the namespace version, by default 'A'.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Revision</em>' attribute.
      * @see #isSetRevision()
      * @see #unsetRevision()
      * @see #setRevision(String)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDependsOnType_Revision()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDependsOn_Revision()
      * @model default="A" unsettable="true"
      *        extendedMetaData="kind='attribute' name='revision'"
      * @generated
@@ -141,7 +172,7 @@ public interface DependsOnType extends NSDObjectWithVersionAndRelease {
     String getRevision();
 
     /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getRevision <em>Revision</em>}' attribute.
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getRevision <em>Revision</em>}' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Revision</em>' attribute.
@@ -153,7 +184,7 @@ public interface DependsOnType extends NSDObjectWithVersionAndRelease {
     void setRevision( String value );
 
     /**
-     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getRevision <em>Revision</em>}' attribute.
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getRevision <em>Revision</em>}' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @see #isSetRevision()
@@ -164,7 +195,7 @@ public interface DependsOnType extends NSDObjectWithVersionAndRelease {
     void unsetRevision();
 
     /**
-     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getRevision <em>Revision</em>}' attribute is set.
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getRevision <em>Revision</em>}' attribute is set.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @return whether the value of the '<em>Revision</em>' attribute is set.
@@ -175,4 +206,32 @@ public interface DependsOnType extends NSDObjectWithVersionAndRelease {
      */
     boolean isSetRevision();
 
-} // DependsOnType
+    /**
+     * Returns the value of the '<em><b>NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getDependsOn <em>Depends On</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS</em>' container reference.
+     * @see #setNS(NS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDependsOn_NS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getDependsOn
+     * @model opposite="dependsOn" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NS getNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getNS <em>NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS</em>' container reference.
+     * @see #getNS()
+     * @generated
+     */
+    void setNS( NS value );
+
+} // DependsOn
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Doc.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Doc.java
index fdfbb21..64205bb 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Doc.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Doc.java
@@ -28,10 +28,6 @@ import org.eclipse.emf.ecore.util.FeatureMap;
  * A representation of the model object '<em><b>Doc</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * A key-value pair for documentation. Attribute "id" is the key (the documentation string identifier) and the value of the element is the documentation string itself.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -40,6 +36,7 @@ import org.eclipse.emf.ecore.util.FeatureMap;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getGroup <em>Group</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getAny <em>Any</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getId <em>Id</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getNSDoc <em>NS Doc</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDoc()
@@ -102,13 +99,12 @@ public interface Doc extends EObject {
      * Returns the value of the '<em><b>Id</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Identifier of the documentation string.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #setId(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDoc_Id()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='id'"
      * @generated
      */
@@ -119,9 +115,62 @@ public interface Doc extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #getId()
      * @generated
      */
     void setId( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getId <em>Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    void unsetId();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getId <em>Id</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Id</em>' attribute is set.
+     * @see #unsetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    boolean isSetId();
+
+    /**
+     * Returns the value of the '<em><b>NS Doc</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getDoc <em>Doc</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS Doc</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS Doc</em>' container reference.
+     * @see #setNSDoc(NSDoc)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDoc_NSDoc()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getDoc
+     * @model opposite="doc" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NSDoc getNSDoc();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getNSDoc <em>NS Doc</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS Doc</em>' container reference.
+     * @see #getNSDoc()
+     * @generated
+     */
+    void setNSDoc( NSDoc value );
+
 } // Doc
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DocumentRoot.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DocumentRoot.java
index 82c0ad7..e7adb9b 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DocumentRoot.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DocumentRoot.java
@@ -38,7 +38,6 @@ import org.eclipse.emf.ecore.util.FeatureMap;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getXMLNSPrefixMap <em>XMLNS Prefix Map</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getXSISchemaLocation <em>XSI Schema Location</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getApplicableServiceNS <em>Applicable Service NS</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getCopyright <em>Copyright</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getNS <em>NS</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getNSDoc <em>NS Doc</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getServiceNS <em>Service NS</em>}</li>
@@ -106,13 +105,12 @@ public interface DocumentRoot extends EObject {
      * Returns the value of the '<em><b>Applicable Service NS</b></em>' containment reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Root element of a file holding the allowed usages of ServiceNS-es.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Applicable Service NS</em>' containment reference.
+     * @see #isSetApplicableServiceNS()
+     * @see #unsetApplicableServiceNS()
      * @see #setApplicableServiceNS(ApplicableServiceNS)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDocumentRoot_ApplicableServiceNS()
-     * @model containment="true" upper="-2" transient="true" volatile="true" derived="true"
+     * @model containment="true" unsettable="true" transient="true" volatile="true" derived="true"
      *        extendedMetaData="kind='element' name='ApplicableServiceNS' namespace='##targetNamespace'"
      * @generated
      */
@@ -123,48 +121,46 @@ public interface DocumentRoot extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Applicable Service NS</em>' containment reference.
+     * @see #isSetApplicableServiceNS()
+     * @see #unsetApplicableServiceNS()
      * @see #getApplicableServiceNS()
      * @generated
      */
     void setApplicableServiceNS( ApplicableServiceNS value );
 
     /**
-     * Returns the value of the '<em><b>Copyright</b></em>' containment reference.
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getApplicableServiceNS <em>Applicable Service NS</em>}' containment reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The copyright notice attached to the XML
-     * <!-- end-model-doc -->
-     * @return the value of the '<em>Copyright</em>' containment reference.
-     * @see #setCopyright(CopyrightNotice)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDocumentRoot_Copyright()
-     * @model containment="true" upper="-2" transient="true" volatile="true" derived="true"
-     *        extendedMetaData="kind='element' name='Copyright' namespace='##targetNamespace'"
+     * @see #isSetApplicableServiceNS()
+     * @see #getApplicableServiceNS()
+     * @see #setApplicableServiceNS(ApplicableServiceNS)
      * @generated
      */
-    CopyrightNotice getCopyright();
+    void unsetApplicableServiceNS();
 
     /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getCopyright <em>Copyright</em>}' containment reference.
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getApplicableServiceNS <em>Applicable Service NS</em>}' containment reference is set.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Copyright</em>' containment reference.
-     * @see #getCopyright()
+     * @return whether the value of the '<em>Applicable Service NS</em>' containment reference is set.
+     * @see #unsetApplicableServiceNS()
+     * @see #getApplicableServiceNS()
+     * @see #setApplicableServiceNS(ApplicableServiceNS)
      * @generated
      */
-    void setCopyright( CopyrightNotice value );
+    boolean isSetApplicableServiceNS();
 
     /**
      * Returns the value of the '<em><b>NS</b></em>' containment reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Root element of a namespace definition (NSD) file.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>NS</em>' containment reference.
+     * @see #isSetNS()
+     * @see #unsetNS()
      * @see #setNS(NS)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDocumentRoot_NS()
-     * @model containment="true" upper="-2" transient="true" volatile="true" derived="true"
+     * @model containment="true" unsettable="true" transient="true" volatile="true" derived="true"
      *        extendedMetaData="kind='element' name='NS' namespace='##targetNamespace'"
      * @generated
      */
@@ -175,22 +171,46 @@ public interface DocumentRoot extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>NS</em>' containment reference.
+     * @see #isSetNS()
+     * @see #unsetNS()
      * @see #getNS()
      * @generated
      */
     void setNS( NS value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getNS <em>NS</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetNS()
+     * @see #getNS()
+     * @see #setNS(NS)
+     * @generated
+     */
+    void unsetNS();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getNS <em>NS</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>NS</em>' containment reference is set.
+     * @see #unsetNS()
+     * @see #getNS()
+     * @see #setNS(NS)
+     * @generated
+     */
+    boolean isSetNS();
+
     /**
      * Returns the value of the '<em><b>NS Doc</b></em>' containment reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Root element of a file holding the documentation strings of an NSD file (NSDOC).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>NS Doc</em>' containment reference.
+     * @see #isSetNSDoc()
+     * @see #unsetNSDoc()
      * @see #setNSDoc(NSDoc)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDocumentRoot_NSDoc()
-     * @model containment="true" upper="-2" transient="true" volatile="true" derived="true"
+     * @model containment="true" unsettable="true" transient="true" volatile="true" derived="true"
      *        extendedMetaData="kind='element' name='NSDoc' namespace='##targetNamespace'"
      * @generated
      */
@@ -201,22 +221,46 @@ public interface DocumentRoot extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>NS Doc</em>' containment reference.
+     * @see #isSetNSDoc()
+     * @see #unsetNSDoc()
      * @see #getNSDoc()
      * @generated
      */
     void setNSDoc( NSDoc value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getNSDoc <em>NS Doc</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetNSDoc()
+     * @see #getNSDoc()
+     * @see #setNSDoc(NSDoc)
+     * @generated
+     */
+    void unsetNSDoc();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getNSDoc <em>NS Doc</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>NS Doc</em>' containment reference is set.
+     * @see #unsetNSDoc()
+     * @see #getNSDoc()
+     * @see #setNSDoc(NSDoc)
+     * @generated
+     */
+    boolean isSetNSDoc();
+
     /**
      * Returns the value of the '<em><b>Service NS</b></em>' containment reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Root element of a service namespace definition (SNSD) file.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Service NS</em>' containment reference.
+     * @see #isSetServiceNS()
+     * @see #unsetServiceNS()
      * @see #setServiceNS(ServiceNS)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDocumentRoot_ServiceNS()
-     * @model containment="true" upper="-2" transient="true" volatile="true" derived="true"
+     * @model containment="true" unsettable="true" transient="true" volatile="true" derived="true"
      *        extendedMetaData="kind='element' name='ServiceNS' namespace='##targetNamespace'"
      * @generated
      */
@@ -227,9 +271,34 @@ public interface DocumentRoot extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Service NS</em>' containment reference.
+     * @see #isSetServiceNS()
+     * @see #unsetServiceNS()
      * @see #getServiceNS()
      * @generated
      */
     void setServiceNS( ServiceNS value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getServiceNS <em>Service NS</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetServiceNS()
+     * @see #getServiceNS()
+     * @see #setServiceNS(ServiceNS)
+     * @generated
+     */
+    void unsetServiceNS();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getServiceNS <em>Service NS</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service NS</em>' containment reference is set.
+     * @see #unsetServiceNS()
+     * @see #getServiceNS()
+     * @see #setServiceNS(ServiceNS)
+     * @generated
+     */
+    boolean isSetServiceNS();
+
 } // DocumentRoot
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DocumentedClass.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DocumentedClass.java
index 0c73756..f983c97 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DocumentedClass.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DocumentedClass.java
@@ -26,10 +26,6 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Documented Class</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * A class with description.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -49,9 +45,6 @@ public interface DocumentedClass extends EObject {
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether this object is classified as deprecated or not. By default not deprecated.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Deprecated</em>' attribute.
      * @see #isSetDeprecated()
      * @see #unsetDeprecated()
@@ -102,13 +95,13 @@ public interface DocumentedClass extends EObject {
      * Returns the value of the '<em><b>Desc ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to a full description of this object.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #setDescID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDocumentedClass_DescID()
-     * @model extendedMetaData="kind='attribute' name='descID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='descID'"
      * @generated
      */
     String getDescID();
@@ -118,19 +111,41 @@ public interface DocumentedClass extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #getDescID()
      * @generated
      */
     void setDescID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentedClass#getDescID <em>Desc ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    void unsetDescID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentedClass#getDescID <em>Desc ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Desc ID</em>' attribute is set.
+     * @see #unsetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    boolean isSetDescID();
+
     /**
      * Returns the value of the '<em><b>Informative</b></em>' attribute.
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether this object is classified as informative or not. By default not informative.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Informative</em>' attribute.
      * @see #isSetInformative()
      * @see #unsetInformative()
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java
index cad7d78..19afbf4 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java
@@ -26,10 +26,6 @@ import org.eclipse.emf.common.util.EList;
  * A representation of the model object '<em><b>Enumeration</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of an enumeration.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -37,6 +33,7 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getLiteral <em>Literal</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getInheritedFrom <em>Inherited From</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getEnumerations <em>Enumerations</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration()
@@ -47,6 +44,7 @@ public interface Enumeration extends TitledClass {
     /**
      * Returns the value of the '<em><b>Literal</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal#getEnumeration <em>Enumeration</em>}'.
      * <!-- begin-user-doc -->
      * <p>
      * If the meaning of the '<em>Literal</em>' containment reference list isn't clear,
@@ -54,24 +52,48 @@ public interface Enumeration extends TitledClass {
      * </p>
      * <!-- end-user-doc -->
      * @return the value of the '<em>Literal</em>' containment reference list.
+     * @see #isSetLiteral()
+     * @see #unsetLiteral()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration_Literal()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal#getEnumeration
+     * @model opposite="enumeration" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Literal' namespace='##targetNamespace'"
      * @generated
      */
     EList< Literal > getLiteral();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getLiteral <em>Literal</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetLiteral()
+     * @see #getLiteral()
+     * @generated
+     */
+    void unsetLiteral();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getLiteral <em>Literal</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Literal</em>' containment reference list is set.
+     * @see #unsetLiteral()
+     * @see #getLiteral()
+     * @generated
+     */
+    boolean isSetLiteral();
+
     /**
      * Returns the value of the '<em><b>Inherited From</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the enumeration which is extended by the current enumeration.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Inherited From</em>' attribute.
+     * @see #isSetInheritedFrom()
+     * @see #unsetInheritedFrom()
      * @see #setInheritedFrom(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration_InheritedFrom()
-     * @model extendedMetaData="kind='attribute' name='inheritedFrom'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='inheritedFrom'"
      * @generated
      */
     String getInheritedFrom();
@@ -81,22 +103,46 @@ public interface Enumeration extends TitledClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Inherited From</em>' attribute.
+     * @see #isSetInheritedFrom()
+     * @see #unsetInheritedFrom()
      * @see #getInheritedFrom()
      * @generated
      */
     void setInheritedFrom( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getInheritedFrom <em>Inherited From</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetInheritedFrom()
+     * @see #getInheritedFrom()
+     * @see #setInheritedFrom(String)
+     * @generated
+     */
+    void unsetInheritedFrom();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getInheritedFrom <em>Inherited From</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Inherited From</em>' attribute is set.
+     * @see #unsetInheritedFrom()
+     * @see #getInheritedFrom()
+     * @see #setInheritedFrom(String)
+     * @generated
+     */
+    boolean isSetInheritedFrom();
+
     /**
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the enumeration.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -107,9 +153,62 @@ public interface Enumeration extends TitledClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
+    /**
+     * Returns the value of the '<em><b>Enumerations</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getEnumeration <em>Enumeration</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Enumerations</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Enumerations</em>' container reference.
+     * @see #setEnumerations(Enumerations)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration_Enumerations()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getEnumeration
+     * @model opposite="enumeration" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    Enumerations getEnumerations();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getEnumerations <em>Enumerations</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Enumerations</em>' container reference.
+     * @see #getEnumerations()
+     * @generated
+     */
+    void setEnumerations( Enumerations value );
+
 } // Enumeration
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumerations.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumerations.java
index deb022c..e1619e8 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumerations.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumerations.java
@@ -28,15 +28,12 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Enumerations</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of Enumerations introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getEnumeration <em>Enumeration</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumerations()
@@ -47,17 +44,67 @@ public interface Enumerations extends EObject {
     /**
      * Returns the value of the '<em><b>Enumeration</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getEnumerations <em>Enumerations</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Definition of an enumeration.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Enumeration</em>' containment reference list.
+     * @see #isSetEnumeration()
+     * @see #unsetEnumeration()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumerations_Enumeration()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getEnumerations
+     * @model opposite="enumerations" containment="true" unsettable="true"
      *        extendedMetaData="kind='element' name='Enumeration' namespace='##targetNamespace'"
      * @generated
      */
     EList< Enumeration > getEnumeration();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getEnumeration <em>Enumeration</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetEnumeration()
+     * @see #getEnumeration()
+     * @generated
+     */
+    void unsetEnumeration();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getEnumeration <em>Enumeration</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Enumeration</em>' containment reference list is set.
+     * @see #unsetEnumeration()
+     * @see #getEnumeration()
+     * @generated
+     */
+    boolean isSetEnumeration();
+
+    /**
+     * Returns the value of the '<em><b>NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getEnumerations <em>Enumerations</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS</em>' container reference.
+     * @see #setNS(NS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumerations_NS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getEnumerations
+     * @model opposite="enumerations" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NS getNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getNS <em>NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS</em>' container reference.
+     * @see #getNS()
+     * @generated
+     */
+    void setNS( NS value );
+
 } // Enumerations
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java
index 86de5c9..f040384 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java
@@ -26,10 +26,6 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Functional Constraint</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a Functional Constraint.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -38,6 +34,7 @@ import org.eclipse.emf.ecore.EObject;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getAbbreviation <em>Abbreviation</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getDescID <em>Desc ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getTitleID <em>Title ID</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getFunctionalConstraints <em>Functional Constraints</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraint()
@@ -47,6 +44,7 @@ import org.eclipse.emf.ecore.EObject;
 public interface FunctionalConstraint extends EObject {
     /**
      * Returns the value of the '<em><b>Applicable Services</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getFunctionalConstraint <em>Functional Constraint</em>}'.
      * <!-- begin-user-doc -->
      * <p>
      * If the meaning of the '<em>Applicable Services</em>' containment reference isn't clear,
@@ -54,9 +52,12 @@ public interface FunctionalConstraint extends EObject {
      * </p>
      * <!-- end-user-doc -->
      * @return the value of the '<em>Applicable Services</em>' containment reference.
+     * @see #isSetApplicableServices()
+     * @see #unsetApplicableServices()
      * @see #setApplicableServices(ApplicableServices)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraint_ApplicableServices()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getFunctionalConstraint
+     * @model opposite="functionalConstraint" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ApplicableServices' namespace='##targetNamespace'"
      * @generated
      */
@@ -67,22 +68,46 @@ public interface FunctionalConstraint extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Applicable Services</em>' containment reference.
+     * @see #isSetApplicableServices()
+     * @see #unsetApplicableServices()
      * @see #getApplicableServices()
      * @generated
      */
     void setApplicableServices( ApplicableServices value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getApplicableServices <em>Applicable Services</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetApplicableServices()
+     * @see #getApplicableServices()
+     * @see #setApplicableServices(ApplicableServices)
+     * @generated
+     */
+    void unsetApplicableServices();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getApplicableServices <em>Applicable Services</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Applicable Services</em>' containment reference is set.
+     * @see #unsetApplicableServices()
+     * @see #getApplicableServices()
+     * @see #setApplicableServices(ApplicableServices)
+     * @generated
+     */
+    boolean isSetApplicableServices();
+
     /**
      * Returns the value of the '<em><b>Abbreviation</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Abbreviated name of the FC (e.g., ST, MX, etc.).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Abbreviation</em>' attribute.
+     * @see #isSetAbbreviation()
+     * @see #unsetAbbreviation()
      * @see #setAbbreviation(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraint_Abbreviation()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='abbreviation'"
      * @generated
      */
@@ -93,22 +118,47 @@ public interface FunctionalConstraint extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Abbreviation</em>' attribute.
+     * @see #isSetAbbreviation()
+     * @see #unsetAbbreviation()
      * @see #getAbbreviation()
      * @generated
      */
     void setAbbreviation( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getAbbreviation <em>Abbreviation</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetAbbreviation()
+     * @see #getAbbreviation()
+     * @see #setAbbreviation(String)
+     * @generated
+     */
+    void unsetAbbreviation();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getAbbreviation <em>Abbreviation</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Abbreviation</em>' attribute is set.
+     * @see #unsetAbbreviation()
+     * @see #getAbbreviation()
+     * @see #setAbbreviation(String)
+     * @generated
+     */
+    boolean isSetAbbreviation();
+
     /**
      * Returns the value of the '<em><b>Desc ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to a full description of this object.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #setDescID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraint_DescID()
-     * @model extendedMetaData="kind='attribute' name='descID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='descID'"
      * @generated
      */
     String getDescID();
@@ -118,22 +168,47 @@ public interface FunctionalConstraint extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #getDescID()
      * @generated
      */
     void setDescID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getDescID <em>Desc ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    void unsetDescID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getDescID <em>Desc ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Desc ID</em>' attribute is set.
+     * @see #unsetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    boolean isSetDescID();
+
     /**
      * Returns the value of the '<em><b>Title ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to the title (alias) of this object.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Title ID</em>' attribute.
+     * @see #isSetTitleID()
+     * @see #unsetTitleID()
      * @see #setTitleID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraint_TitleID()
-     * @model extendedMetaData="kind='attribute' name='titleID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='titleID'"
      * @generated
      */
     String getTitleID();
@@ -143,9 +218,62 @@ public interface FunctionalConstraint extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Title ID</em>' attribute.
+     * @see #isSetTitleID()
+     * @see #unsetTitleID()
      * @see #getTitleID()
      * @generated
      */
     void setTitleID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getTitleID <em>Title ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetTitleID()
+     * @see #getTitleID()
+     * @see #setTitleID(String)
+     * @generated
+     */
+    void unsetTitleID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getTitleID <em>Title ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Title ID</em>' attribute is set.
+     * @see #unsetTitleID()
+     * @see #getTitleID()
+     * @see #setTitleID(String)
+     * @generated
+     */
+    boolean isSetTitleID();
+
+    /**
+     * Returns the value of the '<em><b>Functional Constraints</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getFunctionalConstraint <em>Functional Constraint</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Functional Constraints</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Functional Constraints</em>' container reference.
+     * @see #setFunctionalConstraints(FunctionalConstraints)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraint_FunctionalConstraints()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getFunctionalConstraint
+     * @model opposite="functionalConstraint" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    FunctionalConstraints getFunctionalConstraints();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getFunctionalConstraints <em>Functional Constraints</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Functional Constraints</em>' container reference.
+     * @see #getFunctionalConstraints()
+     * @generated
+     */
+    void setFunctionalConstraints( FunctionalConstraints value );
+
 } // FunctionalConstraint
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraints.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraints.java
index 3adf965..b3a1202 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraints.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraints.java
@@ -28,15 +28,13 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Functional Constraints</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of Functional Constraints introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getFunctionalConstraint <em>Functional Constraint</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getNS <em>NS</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraints()
@@ -47,17 +45,95 @@ public interface FunctionalConstraints extends EObject {
     /**
      * Returns the value of the '<em><b>Functional Constraint</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getFunctionalConstraints <em>Functional Constraints</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Definition of a Functional Constraint.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Functional Constraint</em>' containment reference list.
+     * @see #isSetFunctionalConstraint()
+     * @see #unsetFunctionalConstraint()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraints_FunctionalConstraint()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getFunctionalConstraints
+     * @model opposite="functionalConstraints" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='FunctionalConstraint' namespace='##targetNamespace'"
      * @generated
      */
     EList< FunctionalConstraint > getFunctionalConstraint();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getFunctionalConstraint <em>Functional Constraint</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetFunctionalConstraint()
+     * @see #getFunctionalConstraint()
+     * @generated
+     */
+    void unsetFunctionalConstraint();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getFunctionalConstraint <em>Functional Constraint</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Functional Constraint</em>' containment reference list is set.
+     * @see #unsetFunctionalConstraint()
+     * @see #getFunctionalConstraint()
+     * @generated
+     */
+    boolean isSetFunctionalConstraint();
+
+    /**
+     * Returns the value of the '<em><b>NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getFunctionalConstraints <em>Functional Constraints</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS</em>' container reference.
+     * @see #setNS(NS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraints_NS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getFunctionalConstraints
+     * @model opposite="functionalConstraints" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NS getNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getNS <em>NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS</em>' container reference.
+     * @see #getNS()
+     * @generated
+     */
+    void setNS( NS value );
+
+    /**
+     * Returns the value of the '<em><b>Service NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getFunctionalConstraints <em>Functional Constraints</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service NS</em>' container reference.
+     * @see #setServiceNS(ServiceNS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraints_ServiceNS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getFunctionalConstraints
+     * @model opposite="functionalConstraints" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceNS getServiceNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getServiceNS <em>Service NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service NS</em>' container reference.
+     * @see #getServiceNS()
+     * @generated
+     */
+    void setServiceNS( ServiceNS value );
+
 } // FunctionalConstraints
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClass.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClass.java
index 844e537..dce0063 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClass.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClass.java
@@ -24,10 +24,6 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  * A representation of the model object '<em><b>LN Class</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a concrete (i.e., not abstract) logical node and its contents. At most one of "base" and "isExtension" shall be defined.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -35,6 +31,7 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#isCanHaveLOG <em>Can Have LOG</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#isIsExtension <em>Is Extension</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#getLNClasses <em>LN Classes</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLNClass()
@@ -47,9 +44,6 @@ public interface LNClass extends AnyLNClass {
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether a LOG can be allocated to this logical node. By default, false.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Can Have LOG</em>' attribute.
      * @see #isSetCanHaveLOG()
      * @see #unsetCanHaveLOG()
@@ -101,9 +95,6 @@ public interface LNClass extends AnyLNClass {
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether this logical node is an extension of another non-abstract logical node (with the same LN class name) defined in a namespace this one imports.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Is Extension</em>' attribute.
      * @see #isSetIsExtension()
      * @see #unsetIsExtension()
@@ -154,13 +145,12 @@ public interface LNClass extends AnyLNClass {
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The logical node class name.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLNClass_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -171,9 +161,62 @@ public interface LNClass extends AnyLNClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
+    /**
+     * Returns the value of the '<em><b>LN Classes</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getLNClass <em>LN Class</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>LN Classes</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>LN Classes</em>' container reference.
+     * @see #setLNClasses(LNClasses)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLNClass_LNClasses()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getLNClass
+     * @model opposite="lNClass" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    LNClasses getLNClasses();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#getLNClasses <em>LN Classes</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>LN Classes</em>' container reference.
+     * @see #getLNClasses()
+     * @generated
+     */
+    void setLNClasses( LNClasses value );
+
 } // LNClass
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClasses.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClasses.java
index f3aaaff..82f8134 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClasses.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LNClasses.java
@@ -28,16 +28,13 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>LN Classes</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of LNClasses introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getAbstractLNClass <em>Abstract LN Class</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getLNClass <em>LN Class</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLNClasses()
@@ -48,33 +45,105 @@ public interface LNClasses extends EObject {
     /**
      * Returns the value of the '<em><b>Abstract LN Class</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass#getLNClasses <em>LN Classes</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Definition of an abstract logical node.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Abstract LN Class</em>' containment reference list.
+     * @see #isSetAbstractLNClass()
+     * @see #unsetAbstractLNClass()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLNClasses_AbstractLNClass()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass#getLNClasses
+     * @model opposite="lNClasses" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='AbstractLNClass' namespace='##targetNamespace'"
      * @generated
      */
     EList< AbstractLNClass > getAbstractLNClass();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getAbstractLNClass <em>Abstract LN Class</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetAbstractLNClass()
+     * @see #getAbstractLNClass()
+     * @generated
+     */
+    void unsetAbstractLNClass();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getAbstractLNClass <em>Abstract LN Class</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Abstract LN Class</em>' containment reference list is set.
+     * @see #unsetAbstractLNClass()
+     * @see #getAbstractLNClass()
+     * @generated
+     */
+    boolean isSetAbstractLNClass();
+
     /**
      * Returns the value of the '<em><b>LN Class</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#getLNClasses <em>LN Classes</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Definition of a (non-abstract) logical node.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>LN Class</em>' containment reference list.
+     * @see #isSetLNClass()
+     * @see #unsetLNClass()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLNClasses_LNClass()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#getLNClasses
+     * @model opposite="lNClasses" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='LNClass' namespace='##targetNamespace'"
      * @generated
      */
     EList< LNClass > getLNClass();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getLNClass <em>LN Class</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetLNClass()
+     * @see #getLNClass()
+     * @generated
+     */
+    void unsetLNClass();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getLNClass <em>LN Class</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>LN Class</em>' containment reference list is set.
+     * @see #unsetLNClass()
+     * @see #getLNClass()
+     * @generated
+     */
+    boolean isSetLNClass();
+
+    /**
+     * Returns the value of the '<em><b>NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getLNClasses <em>LN Classes</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS</em>' container reference.
+     * @see #setNS(NS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLNClasses_NS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getLNClasses
+     * @model opposite="lNClasses" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NS getNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getNS <em>NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS</em>' container reference.
+     * @see #getNS()
+     * @generated
+     */
+    void setNS( NS value );
+
 } // LNClasses
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/License.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/License.java
index 7482468..de69b91 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/License.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/License.java
@@ -28,10 +28,6 @@ import org.eclipse.emf.ecore.util.FeatureMap;
  * A representation of the model object '<em><b>License</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Describe the license definition.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -39,6 +35,7 @@ import org.eclipse.emf.ecore.util.FeatureMap;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getMixed <em>Mixed</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getKind <em>Kind</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getUri <em>Uri</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getCopyrightNotice <em>Copyright Notice</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLicense()
@@ -68,9 +65,6 @@ public interface License extends EObject {
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LicenseKind}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * kind of license
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Kind</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.LicenseKind
      * @see #isSetKind()
@@ -123,13 +117,12 @@ public interface License extends EObject {
      * Returns the value of the '<em><b>Uri</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * path to the license file
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Uri</em>' attribute.
+     * @see #isSetUri()
+     * @see #unsetUri()
      * @see #setUri(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLicense_Uri()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.NormalizedString"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.NormalizedString"
      *        extendedMetaData="kind='attribute' name='uri'"
      * @generated
      */
@@ -140,9 +133,62 @@ public interface License extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Uri</em>' attribute.
+     * @see #isSetUri()
+     * @see #unsetUri()
      * @see #getUri()
      * @generated
      */
     void setUri( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getUri <em>Uri</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetUri()
+     * @see #getUri()
+     * @see #setUri(String)
+     * @generated
+     */
+    void unsetUri();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getUri <em>Uri</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Uri</em>' attribute is set.
+     * @see #unsetUri()
+     * @see #getUri()
+     * @see #setUri(String)
+     * @generated
+     */
+    boolean isSetUri();
+
+    /**
+     * Returns the value of the '<em><b>Copyright Notice</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getLicense <em>License</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Copyright Notice</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Copyright Notice</em>' container reference.
+     * @see #setCopyrightNotice(CopyrightNotice)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLicense_CopyrightNotice()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getLicense
+     * @model opposite="license" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    CopyrightNotice getCopyrightNotice();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getCopyrightNotice <em>Copyright Notice</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Copyright Notice</em>' container reference.
+     * @see #getCopyrightNotice()
+     * @generated
+     */
+    void setCopyrightNotice( CopyrightNotice value );
+
 } // License
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LicenseKind.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LicenseKind.java
index 16d07bd..e9b3232 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LicenseKind.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/LicenseKind.java
@@ -30,9 +30,6 @@ import org.eclipse.emf.common.util.Enumerator;
  * A representation of the literals of the enumeration '<em><b>License Kind</b></em>',
  * and utility methods for working with them.
  * <!-- end-user-doc -->
- * <!-- begin-model-doc -->
- * Kind of license
- * <!-- end-model-doc -->
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLicenseKind()
  * @model extendedMetaData="name='tLicenseKind'"
  * @generated
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Literal.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Literal.java
index a30b679..fc7c5d3 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Literal.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Literal.java
@@ -24,16 +24,13 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  * A representation of the model object '<em><b>Literal</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a literal of an enumeration.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal#getLiteralVal <em>Literal Val</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal#getEnumeration <em>Enumeration</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLiteral()
@@ -45,15 +42,12 @@ public interface Literal extends DocumentedClass {
      * Returns the value of the '<em><b>Literal Val</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Enumeration literal integer value.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Literal Val</em>' attribute.
      * @see #isSetLiteralVal()
      * @see #unsetLiteralVal()
      * @see #setLiteralVal(int)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLiteral_LiteralVal()
-     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int" required="true"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Int"
      *        extendedMetaData="kind='attribute' name='literalVal'"
      * @generated
      */
@@ -102,9 +96,11 @@ public interface Literal extends DocumentedClass {
      * Name of the enumeration's literal.
      * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLiteral_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -115,9 +111,62 @@ public interface Literal extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
+    /**
+     * Returns the value of the '<em><b>Enumeration</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getLiteral <em>Literal</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Enumeration</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Enumeration</em>' container reference.
+     * @see #setEnumeration(Enumeration)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getLiteral_Enumeration()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getLiteral
+     * @model opposite="literal" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    Enumeration getEnumeration();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal#getEnumeration <em>Enumeration</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Enumeration</em>' container reference.
+     * @see #getEnumeration()
+     * @generated
+     */
+    void setEnumeration( Enumeration value );
+
 } // Literal
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NS.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NS.java
index be4da42..cb60f3d 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NS.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NS.java
@@ -26,10 +26,6 @@ import javax.xml.datatype.XMLGregorianCalendar;
  * A representation of the model object '<em><b>NS</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -59,15 +55,16 @@ import javax.xml.datatype.XMLGregorianCalendar;
 public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
     /**
      * Returns the value of the '<em><b>Changes</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The version/revision/release this namespace is based on, including the TISSUEs implemented in this release.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Changes</em>' containment reference.
+     * @see #isSetChanges()
+     * @see #unsetChanges()
      * @see #setChanges(Changes)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_Changes()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getNS
+     * @model opposite="nS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Changes' namespace='##targetNamespace'"
      * @generated
      */
@@ -78,48 +75,100 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Changes</em>' containment reference.
+     * @see #isSetChanges()
+     * @see #unsetChanges()
      * @see #getChanges()
      * @generated
      */
     void setChanges( Changes value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getChanges <em>Changes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetChanges()
+     * @see #getChanges()
+     * @see #setChanges(Changes)
+     * @generated
+     */
+    void unsetChanges();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getChanges <em>Changes</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Changes</em>' containment reference is set.
+     * @see #unsetChanges()
+     * @see #getChanges()
+     * @see #setChanges(Changes)
+     * @generated
+     */
+    boolean isSetChanges();
+
     /**
      * Returns the value of the '<em><b>Depends On</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The namespace identification this namespace depends on (and whose definitions are imported into this one).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Depends On</em>' containment reference.
-     * @see #setDependsOn(DependsOnType)
+     * @see #isSetDependsOn()
+     * @see #unsetDependsOn()
+     * @see #setDependsOn(DependsOn)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_DependsOn()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getNS
+     * @model opposite="nS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='DependsOn' namespace='##targetNamespace'"
      * @generated
      */
-    DependsOnType getDependsOn();
+    DependsOn getDependsOn();
 
     /**
      * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getDependsOn <em>Depends On</em>}' containment reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Depends On</em>' containment reference.
+     * @see #isSetDependsOn()
+     * @see #unsetDependsOn()
+     * @see #getDependsOn()
+     * @generated
+     */
+    void setDependsOn( DependsOn value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getDependsOn <em>Depends On</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDependsOn()
+     * @see #getDependsOn()
+     * @see #setDependsOn(DependsOn)
+     * @generated
+     */
+    void unsetDependsOn();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getDependsOn <em>Depends On</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Depends On</em>' containment reference is set.
+     * @see #unsetDependsOn()
      * @see #getDependsOn()
+     * @see #setDependsOn(DependsOn)
      * @generated
      */
-    void setDependsOn( DependsOnType value );
+    boolean isSetDependsOn();
 
     /**
      * Returns the value of the '<em><b>Basic Types</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of basic types added by this namespace. Is cumulative to those defined in namespaces this one DependsOn (may not redefine "included" ones). Note: shall only be used in practice by the 7-2 namespace.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Basic Types</em>' containment reference.
+     * @see #isSetBasicTypes()
+     * @see #unsetBasicTypes()
      * @see #setBasicTypes(BasicTypes)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_BasicTypes()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getNS
+     * @model opposite="nS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='BasicTypes' namespace='##targetNamespace'"
      * @generated
      */
@@ -130,22 +179,48 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Basic Types</em>' containment reference.
+     * @see #isSetBasicTypes()
+     * @see #unsetBasicTypes()
      * @see #getBasicTypes()
      * @generated
      */
     void setBasicTypes( BasicTypes value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getBasicTypes <em>Basic Types</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetBasicTypes()
+     * @see #getBasicTypes()
+     * @see #setBasicTypes(BasicTypes)
+     * @generated
+     */
+    void unsetBasicTypes();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getBasicTypes <em>Basic Types</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Basic Types</em>' containment reference is set.
+     * @see #unsetBasicTypes()
+     * @see #getBasicTypes()
+     * @see #setBasicTypes(BasicTypes)
+     * @generated
+     */
+    boolean isSetBasicTypes();
+
     /**
      * Returns the value of the '<em><b>Functional Constraints</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of Functional Constraints added by this namespace. Is cumulative to those defined in namespaces this one DependsOn (may not redefine "included" ones).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Functional Constraints</em>' containment reference.
+     * @see #isSetFunctionalConstraints()
+     * @see #unsetFunctionalConstraints()
      * @see #setFunctionalConstraints(FunctionalConstraints)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_FunctionalConstraints()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getNS
+     * @model opposite="nS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='FunctionalConstraints' namespace='##targetNamespace'"
      * @generated
      */
@@ -156,22 +231,48 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Functional Constraints</em>' containment reference.
+     * @see #isSetFunctionalConstraints()
+     * @see #unsetFunctionalConstraints()
      * @see #getFunctionalConstraints()
      * @generated
      */
     void setFunctionalConstraints( FunctionalConstraints value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getFunctionalConstraints <em>Functional Constraints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetFunctionalConstraints()
+     * @see #getFunctionalConstraints()
+     * @see #setFunctionalConstraints(FunctionalConstraints)
+     * @generated
+     */
+    void unsetFunctionalConstraints();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getFunctionalConstraints <em>Functional Constraints</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Functional Constraints</em>' containment reference is set.
+     * @see #unsetFunctionalConstraints()
+     * @see #getFunctionalConstraints()
+     * @see #setFunctionalConstraints(FunctionalConstraints)
+     * @generated
+     */
+    boolean isSetFunctionalConstraints();
+
     /**
      * Returns the value of the '<em><b>Presence Conditions</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of presence conditions added by this namespace. Is cumulative to those defined in namespaces this one DependsOn (may not redefine "included" ones.).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Presence Conditions</em>' containment reference.
+     * @see #isSetPresenceConditions()
+     * @see #unsetPresenceConditions()
      * @see #setPresenceConditions(PresenceConditions)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_PresenceConditions()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getNS
+     * @model opposite="nS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='PresenceConditions' namespace='##targetNamespace'"
      * @generated
      */
@@ -182,22 +283,48 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Presence Conditions</em>' containment reference.
+     * @see #isSetPresenceConditions()
+     * @see #unsetPresenceConditions()
      * @see #getPresenceConditions()
      * @generated
      */
     void setPresenceConditions( PresenceConditions value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getPresenceConditions <em>Presence Conditions</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresenceConditions()
+     * @see #getPresenceConditions()
+     * @see #setPresenceConditions(PresenceConditions)
+     * @generated
+     */
+    void unsetPresenceConditions();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getPresenceConditions <em>Presence Conditions</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Presence Conditions</em>' containment reference is set.
+     * @see #unsetPresenceConditions()
+     * @see #getPresenceConditions()
+     * @see #setPresenceConditions(PresenceConditions)
+     * @generated
+     */
+    boolean isSetPresenceConditions();
+
     /**
      * Returns the value of the '<em><b>Abbreviations</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of abbreviations added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine "included" ones.).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Abbreviations</em>' containment reference.
+     * @see #isSetAbbreviations()
+     * @see #unsetAbbreviations()
      * @see #setAbbreviations(Abbreviations)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_Abbreviations()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getNS
+     * @model opposite="nS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Abbreviations' namespace='##targetNamespace'"
      * @generated
      */
@@ -208,22 +335,48 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Abbreviations</em>' containment reference.
+     * @see #isSetAbbreviations()
+     * @see #unsetAbbreviations()
      * @see #getAbbreviations()
      * @generated
      */
     void setAbbreviations( Abbreviations value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getAbbreviations <em>Abbreviations</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetAbbreviations()
+     * @see #getAbbreviations()
+     * @see #setAbbreviations(Abbreviations)
+     * @generated
+     */
+    void unsetAbbreviations();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getAbbreviations <em>Abbreviations</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Abbreviations</em>' containment reference is set.
+     * @see #unsetAbbreviations()
+     * @see #getAbbreviations()
+     * @see #setAbbreviations(Abbreviations)
+     * @generated
+     */
+    boolean isSetAbbreviations();
+
     /**
      * Returns the value of the '<em><b>Enumerations</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of Enumerations added by this namespace. Is cumulative to those defined in namespaces this one DependsOn (may not redefine "included" ones).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Enumerations</em>' containment reference.
+     * @see #isSetEnumerations()
+     * @see #unsetEnumerations()
      * @see #setEnumerations(Enumerations)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_Enumerations()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getNS
+     * @model opposite="nS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Enumerations' namespace='##targetNamespace'"
      * @generated
      */
@@ -234,22 +387,48 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Enumerations</em>' containment reference.
+     * @see #isSetEnumerations()
+     * @see #unsetEnumerations()
      * @see #getEnumerations()
      * @generated
      */
     void setEnumerations( Enumerations value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getEnumerations <em>Enumerations</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetEnumerations()
+     * @see #getEnumerations()
+     * @see #setEnumerations(Enumerations)
+     * @generated
+     */
+    void unsetEnumerations();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getEnumerations <em>Enumerations</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Enumerations</em>' containment reference is set.
+     * @see #unsetEnumerations()
+     * @see #getEnumerations()
+     * @see #setEnumerations(Enumerations)
+     * @generated
+     */
+    boolean isSetEnumerations();
+
     /**
      * Returns the value of the '<em><b>Constructed Attributes</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of Constructed Attributes added by this namespace. Constructed Attributes are not allowed to be extended by another namespace. Note: shall only be used in practice by the 7-3
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Constructed Attributes</em>' containment reference.
+     * @see #isSetConstructedAttributes()
+     * @see #unsetConstructedAttributes()
      * @see #setConstructedAttributes(ConstructedAttributes)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_ConstructedAttributes()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getNS
+     * @model opposite="nS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ConstructedAttributes' namespace='##targetNamespace'"
      * @generated
      */
@@ -260,22 +439,48 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Constructed Attributes</em>' containment reference.
+     * @see #isSetConstructedAttributes()
+     * @see #unsetConstructedAttributes()
      * @see #getConstructedAttributes()
      * @generated
      */
     void setConstructedAttributes( ConstructedAttributes value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getConstructedAttributes <em>Constructed Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetConstructedAttributes()
+     * @see #getConstructedAttributes()
+     * @see #setConstructedAttributes(ConstructedAttributes)
+     * @generated
+     */
+    void unsetConstructedAttributes();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getConstructedAttributes <em>Constructed Attributes</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Constructed Attributes</em>' containment reference is set.
+     * @see #unsetConstructedAttributes()
+     * @see #getConstructedAttributes()
+     * @see #setConstructedAttributes(ConstructedAttributes)
+     * @generated
+     */
+    boolean isSetConstructedAttributes();
+
     /**
      * Returns the value of the '<em><b>CD Cs</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of CDCs added by this namespace. CDCs are not allowed to be extended by another namespace. Note: shall only be used in practice by the 7-3
-     * <!-- end-model-doc -->
      * @return the value of the '<em>CD Cs</em>' containment reference.
+     * @see #isSetCDCs()
+     * @see #unsetCDCs()
      * @see #setCDCs(CDCs)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_CDCs()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getNS
+     * @model opposite="nS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='CDCs' namespace='##targetNamespace'"
      * @generated
      */
@@ -286,22 +491,48 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>CD Cs</em>' containment reference.
+     * @see #isSetCDCs()
+     * @see #unsetCDCs()
      * @see #getCDCs()
      * @generated
      */
     void setCDCs( CDCs value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getCDCs <em>CD Cs</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetCDCs()
+     * @see #getCDCs()
+     * @see #setCDCs(CDCs)
+     * @generated
+     */
+    void unsetCDCs();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getCDCs <em>CD Cs</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>CD Cs</em>' containment reference is set.
+     * @see #unsetCDCs()
+     * @see #getCDCs()
+     * @see #setCDCs(CDCs)
+     * @generated
+     */
+    boolean isSetCDCs();
+
     /**
      * Returns the value of the '<em><b>LN Classes</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of LNClasses added by this namespace. Is cumulative to those defined in namespaces this one DependsOn (may not redefine "included" ones).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>LN Classes</em>' containment reference.
+     * @see #isSetLNClasses()
+     * @see #unsetLNClasses()
      * @see #setLNClasses(LNClasses)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_LNClasses()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getNS
+     * @model opposite="nS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='LNClasses' namespace='##targetNamespace'"
      * @generated
      */
@@ -312,22 +543,47 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>LN Classes</em>' containment reference.
+     * @see #isSetLNClasses()
+     * @see #unsetLNClasses()
      * @see #getLNClasses()
      * @generated
      */
     void setLNClasses( LNClasses value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getLNClasses <em>LN Classes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetLNClasses()
+     * @see #getLNClasses()
+     * @see #setLNClasses(LNClasses)
+     * @generated
+     */
+    void unsetLNClasses();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getLNClasses <em>LN Classes</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>LN Classes</em>' containment reference is set.
+     * @see #unsetLNClasses()
+     * @see #getLNClasses()
+     * @see #setLNClasses(LNClasses)
+     * @generated
+     */
+    boolean isSetLNClasses();
+
     /**
      * Returns the value of the '<em><b>Desc ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to a full description of this NS.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #setDescID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_DescID()
-     * @model extendedMetaData="kind='attribute' name='descID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='descID'"
      * @generated
      */
     String getDescID();
@@ -337,22 +593,46 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #getDescID()
      * @generated
      */
     void setDescID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getDescID <em>Desc ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    void unsetDescID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getDescID <em>Desc ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Desc ID</em>' attribute is set.
+     * @see #unsetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    boolean isSetDescID();
+
     /**
      * Returns the value of the '<em><b>Id</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Identifier of the namespace, e.g., "IEC 61850-7-4", "(Tr)IEC 61850-90-4".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #setId(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_Id()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='id'"
      * @generated
      */
@@ -363,20 +643,42 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #getId()
      * @generated
      */
     void setId( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getId <em>Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    void unsetId();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getId <em>Id</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Id</em>' attribute is set.
+     * @see #unsetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    boolean isSetId();
+
     /**
      * Returns the value of the '<em><b>Publication Stage</b></em>' attribute.
      * The default value is <code>"IS"</code>.
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The publication stage of the namespace, by default IS.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Publication Stage</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage
      * @see #isSetPublicationStage()
@@ -430,9 +732,6 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * The default value is <code>"A"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Revision of the namespace version, by default 'A'.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Revision</em>' attribute.
      * @see #isSetRevision()
      * @see #unsetRevision()
@@ -483,14 +782,12 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * Returns the value of the '<em><b>Uml Date</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * UTC Date and time of the UML version from which this namespace definition file was generated. Shall be provided if umlVersion is present. Format: YYYY-MM-DDThh:mm:ssZ, where: YYYY indicates the year, MM indicates the month, DD indicates the day, T indicates the start of the required time section, hh indicates the hour, mm indicates the minute, ss indicates the second, and Z the UTC time stamp indication.
-     * 
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Uml Date</em>' attribute.
+     * @see #isSetUmlDate()
+     * @see #unsetUmlDate()
      * @see #setUmlDate(XMLGregorianCalendar)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_UmlDate()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.DateTime"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.DateTime"
      *        extendedMetaData="kind='attribute' name='umlDate'"
      * @generated
      */
@@ -501,22 +798,47 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Uml Date</em>' attribute.
+     * @see #isSetUmlDate()
+     * @see #unsetUmlDate()
      * @see #getUmlDate()
      * @generated
      */
     void setUmlDate( XMLGregorianCalendar value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getUmlDate <em>Uml Date</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetUmlDate()
+     * @see #getUmlDate()
+     * @see #setUmlDate(XMLGregorianCalendar)
+     * @generated
+     */
+    void unsetUmlDate();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getUmlDate <em>Uml Date</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Uml Date</em>' attribute is set.
+     * @see #unsetUmlDate()
+     * @see #getUmlDate()
+     * @see #setUmlDate(XMLGregorianCalendar)
+     * @generated
+     */
+    boolean isSetUmlDate();
+
     /**
      * Returns the value of the '<em><b>Uml Version</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Version of UML from which this namespace definition file was generated from.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Uml Version</em>' attribute.
+     * @see #isSetUmlVersion()
+     * @see #unsetUmlVersion()
      * @see #setUmlVersion(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNS_UmlVersion()
-     * @model extendedMetaData="kind='attribute' name='umlVersion'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='umlVersion'"
      * @generated
      */
     String getUmlVersion();
@@ -526,9 +848,34 @@ public interface NS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Uml Version</em>' attribute.
+     * @see #isSetUmlVersion()
+     * @see #unsetUmlVersion()
      * @see #getUmlVersion()
      * @generated
      */
     void setUmlVersion( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getUmlVersion <em>Uml Version</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetUmlVersion()
+     * @see #getUmlVersion()
+     * @see #setUmlVersion(String)
+     * @generated
+     */
+    void unsetUmlVersion();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getUmlVersion <em>Uml Version</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Uml Version</em>' attribute is set.
+     * @see #unsetUmlVersion()
+     * @see #getUmlVersion()
+     * @see #setUmlVersion(String)
+     * @generated
+     */
+    boolean isSetUmlVersion();
+
 } // NS
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDObjectWithVersionAndRelease.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDObjectWithVersionAndRelease.java
index 187b313..b6580a7 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDObjectWithVersionAndRelease.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDObjectWithVersionAndRelease.java
@@ -107,7 +107,7 @@ public interface NSDObjectWithVersionAndRelease extends EObject {
      * @see #unsetVersion()
      * @see #setVersion(Integer)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNSDObjectWithVersionAndRelease_Version()
-     * @model unsettable="true" required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='version'"
      * @generated
      */
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDoc.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDoc.java
index 5dc111e..5c2de50 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDoc.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NSDoc.java
@@ -28,10 +28,6 @@ import org.eclipse.emf.common.util.EList;
  * A representation of the model object '<em><b>NS Doc</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * A non-empty list of tDoc elements.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -53,30 +49,51 @@ public interface NSDoc extends Copyrighted, NSDObjectWithVersionAndRelease {
     /**
      * Returns the value of the '<em><b>Doc</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getNSDoc <em>NS Doc</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of documentation identifiers and corresponding documentation strings in the corresponding language.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Doc</em>' containment reference list.
+     * @see #isSetDoc()
+     * @see #unsetDoc()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNSDoc_Doc()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getNSDoc
+     * @model opposite="nSDoc" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Doc' namespace='##targetNamespace'"
      * @generated
      */
     EList< Doc > getDoc();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getDoc <em>Doc</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDoc()
+     * @see #getDoc()
+     * @generated
+     */
+    void unsetDoc();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getDoc <em>Doc</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Doc</em>' containment reference list is set.
+     * @see #unsetDoc()
+     * @see #getDoc()
+     * @generated
+     */
+    boolean isSetDoc();
+
     /**
      * Returns the value of the '<em><b>Id</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Identifier of the namespace, e.g., "IEC 61850-7-4", "(Tr)IEC 61850-90-4".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #setId(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNSDoc_Id()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='id'"
      * @generated
      */
@@ -87,22 +104,46 @@ public interface NSDoc extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #getId()
      * @generated
      */
     void setId( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getId <em>Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    void unsetId();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getId <em>Id</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Id</em>' attribute is set.
+     * @see #unsetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    boolean isSetId();
+
     /**
      * Returns the value of the '<em><b>Lang</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Language of the documentation strings in the file.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Lang</em>' attribute.
+     * @see #isSetLang()
+     * @see #unsetLang()
      * @see #setLang(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNSDoc_Lang()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.Language" required="true"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Language"
      *        extendedMetaData="kind='attribute' name='lang'"
      * @generated
      */
@@ -113,20 +154,42 @@ public interface NSDoc extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Lang</em>' attribute.
+     * @see #isSetLang()
+     * @see #unsetLang()
      * @see #getLang()
      * @generated
      */
     void setLang( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getLang <em>Lang</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetLang()
+     * @see #getLang()
+     * @see #setLang(String)
+     * @generated
+     */
+    void unsetLang();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getLang <em>Lang</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Lang</em>' attribute is set.
+     * @see #unsetLang()
+     * @see #getLang()
+     * @see #setLang(String)
+     * @generated
+     */
+    boolean isSetLang();
+
     /**
      * Returns the value of the '<em><b>Publication Stage</b></em>' attribute.
      * The default value is <code>"IS"</code>.
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The publication stage of the namespace, by default IS.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Publication Stage</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage
      * @see #isSetPublicationStage()
@@ -180,9 +243,6 @@ public interface NSDoc extends Copyrighted, NSDObjectWithVersionAndRelease {
      * The default value is <code>"A"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Revision of the namespace version, by default 'A'.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Revision</em>' attribute.
      * @see #isSetRevision()
      * @see #unsetRevision()
@@ -233,14 +293,12 @@ public interface NSDoc extends Copyrighted, NSDObjectWithVersionAndRelease {
      * Returns the value of the '<em><b>Uml Date</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * UTC Date and time of the UML version from which this namespace definition file was generated. Shall be provided if umlVersion is present. Format: YYYY-MM-DDThh:mm:ssZ, where: YYYY indicates the year, MM indicates the month, DD indicates the day, T indicates the start of the required time section, hh indicates the hour, mm indicates the minute, ss indicates the second, and Z the UTC time stamp indication.
-     * 
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Uml Date</em>' attribute.
+     * @see #isSetUmlDate()
+     * @see #unsetUmlDate()
      * @see #setUmlDate(XMLGregorianCalendar)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNSDoc_UmlDate()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.DateTime"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.DateTime"
      *        extendedMetaData="kind='attribute' name='umlDate'"
      * @generated
      */
@@ -251,22 +309,47 @@ public interface NSDoc extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Uml Date</em>' attribute.
+     * @see #isSetUmlDate()
+     * @see #unsetUmlDate()
      * @see #getUmlDate()
      * @generated
      */
     void setUmlDate( XMLGregorianCalendar value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getUmlDate <em>Uml Date</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetUmlDate()
+     * @see #getUmlDate()
+     * @see #setUmlDate(XMLGregorianCalendar)
+     * @generated
+     */
+    void unsetUmlDate();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getUmlDate <em>Uml Date</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Uml Date</em>' attribute is set.
+     * @see #unsetUmlDate()
+     * @see #getUmlDate()
+     * @see #setUmlDate(XMLGregorianCalendar)
+     * @generated
+     */
+    boolean isSetUmlDate();
+
     /**
      * Returns the value of the '<em><b>Uml Version</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Version of UML from which this namespace definition file was generated from.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Uml Version</em>' attribute.
+     * @see #isSetUmlVersion()
+     * @see #unsetUmlVersion()
      * @see #setUmlVersion(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNSDoc_UmlVersion()
-     * @model extendedMetaData="kind='attribute' name='umlVersion'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='umlVersion'"
      * @generated
      */
     String getUmlVersion();
@@ -276,9 +359,34 @@ public interface NSDoc extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Uml Version</em>' attribute.
+     * @see #isSetUmlVersion()
+     * @see #unsetUmlVersion()
      * @see #getUmlVersion()
      * @generated
      */
     void setUmlVersion( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getUmlVersion <em>Uml Version</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetUmlVersion()
+     * @see #getUmlVersion()
+     * @see #setUmlVersion(String)
+     * @generated
+     */
+    void unsetUmlVersion();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc#getUmlVersion <em>Uml Version</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Uml Version</em>' attribute is set.
+     * @see #unsetUmlVersion()
+     * @see #getUmlVersion()
+     * @see #setUmlVersion(String)
+     * @generated
+     */
+    boolean isSetUmlVersion();
+
 } // NSDoc
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Notice.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Notice.java
index 5aa2e36..83f2a17 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Notice.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Notice.java
@@ -28,15 +28,12 @@ import org.eclipse.emf.ecore.util.FeatureMap;
  * A representation of the model object '<em><b>Notice</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Textual notice
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Notice#getMixed <em>Mixed</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Notice#getCopyrightNotice <em>Copyright Notice</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNotice()
@@ -61,4 +58,32 @@ public interface Notice extends EObject {
      */
     FeatureMap getMixed();
 
+    /**
+     * Returns the value of the '<em><b>Copyright Notice</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getNotice <em>Notice</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Copyright Notice</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Copyright Notice</em>' container reference.
+     * @see #setCopyrightNotice(CopyrightNotice)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNotice_CopyrightNotice()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getNotice
+     * @model opposite="notice" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    CopyrightNotice getCopyrightNotice();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Notice#getCopyrightNotice <em>Copyright Notice</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Copyright Notice</em>' container reference.
+     * @see #getCopyrightNotice()
+     * @generated
+     */
+    void setCopyrightNotice( CopyrightNotice value );
+
 } // Notice
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdFactory.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdFactory.java
index abd1236..a7e0a84 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdFactory.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdFactory.java
@@ -48,13 +48,13 @@ public interface NsdFactory extends EFactory {
     AppliesToType createAppliesToType();
 
     /**
-     * Returns a new object of class '<em>Depends On Type</em>'.
+     * Returns a new object of class '<em>Depends On</em>'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return a new object of class '<em>Depends On Type</em>'.
+     * @return a new object of class '<em>Depends On</em>'.
      * @generated
      */
-    DependsOnType createDependsOnType();
+    DependsOn createDependsOn();
 
     /**
      * Returns a new object of class '<em>Document Root</em>'.
@@ -434,15 +434,6 @@ public interface NsdFactory extends EFactory {
      */
     ServiceParameter createServiceParameter();
 
-    /**
-     * Returns a new object of class '<em>Service Type Realization</em>'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return a new object of class '<em>Service Type Realization</em>'.
-     * @generated
-     */
-    ServiceTypeRealization createServiceTypeRealization();
-
     /**
      * Returns a new object of class '<em>Service Type Realizations</em>'.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdPackage.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdPackage.java
index 6897358..3c6c8d2 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdPackage.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdPackage.java
@@ -86,7 +86,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getNSDObjectWithVersionAndRelease()
      * @generated
      */
-    int NSD_OBJECT_WITH_VERSION_AND_RELEASE = 50;
+    int NSD_OBJECT_WITH_VERSION_AND_RELEASE = 49;
 
     /**
      * The feature id for the '<em><b>Release</b></em>' attribute.
@@ -179,6 +179,15 @@ public interface NsdPackage extends EPackage {
      */
     int APPLIES_TO_TYPE__REVISION = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 2;
 
+    /**
+     * The feature id for the '<em><b>Service Ns Usage</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int APPLIES_TO_TYPE__SERVICE_NS_USAGE = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 3;
+
     /**
      * The number of structural features of the '<em>Applies To Type</em>' class.
      * <!-- begin-user-doc -->
@@ -186,7 +195,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int APPLIES_TO_TYPE_FEATURE_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 3;
+    int APPLIES_TO_TYPE_FEATURE_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 4;
 
     /**
      * The number of operations of the '<em>Applies To Type</em>' class.
@@ -198,14 +207,14 @@ public interface NsdPackage extends EPackage {
     int APPLIES_TO_TYPE_OPERATION_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_OPERATION_COUNT + 0;
 
     /**
-     * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnTypeImpl <em>Depends On Type</em>}' class.
+     * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnImpl <em>Depends On</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnTypeImpl
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getDependsOnType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnImpl
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getDependsOn()
      * @generated
      */
-    int DEPENDS_ON_TYPE = 1;
+    int DEPENDS_ON = 1;
 
     /**
      * The feature id for the '<em><b>Release</b></em>' attribute.
@@ -214,7 +223,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DEPENDS_ON_TYPE__RELEASE = NSD_OBJECT_WITH_VERSION_AND_RELEASE__RELEASE;
+    int DEPENDS_ON__RELEASE = NSD_OBJECT_WITH_VERSION_AND_RELEASE__RELEASE;
 
     /**
      * The feature id for the '<em><b>Version</b></em>' attribute.
@@ -223,7 +232,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DEPENDS_ON_TYPE__VERSION = NSD_OBJECT_WITH_VERSION_AND_RELEASE__VERSION;
+    int DEPENDS_ON__VERSION = NSD_OBJECT_WITH_VERSION_AND_RELEASE__VERSION;
 
     /**
      * The feature id for the '<em><b>Id</b></em>' attribute.
@@ -232,7 +241,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DEPENDS_ON_TYPE__ID = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 0;
+    int DEPENDS_ON__ID = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 0;
 
     /**
      * The feature id for the '<em><b>Publication Stage</b></em>' attribute.
@@ -241,7 +250,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DEPENDS_ON_TYPE__PUBLICATION_STAGE = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 1;
+    int DEPENDS_ON__PUBLICATION_STAGE = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 1;
 
     /**
      * The feature id for the '<em><b>Revision</b></em>' attribute.
@@ -250,25 +259,34 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DEPENDS_ON_TYPE__REVISION = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 2;
+    int DEPENDS_ON__REVISION = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 2;
+
+    /**
+     * The feature id for the '<em><b>NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DEPENDS_ON__NS = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 3;
 
     /**
-     * The number of structural features of the '<em>Depends On Type</em>' class.
+     * The number of structural features of the '<em>Depends On</em>' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DEPENDS_ON_TYPE_FEATURE_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 3;
+    int DEPENDS_ON_FEATURE_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 4;
 
     /**
-     * The number of operations of the '<em>Depends On Type</em>' class.
+     * The number of operations of the '<em>Depends On</em>' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DEPENDS_ON_TYPE_OPERATION_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_OPERATION_COUNT + 0;
+    int DEPENDS_ON_OPERATION_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_OPERATION_COUNT + 0;
 
     /**
      * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocumentRootImpl <em>Document Root</em>}' class.
@@ -316,15 +334,6 @@ public interface NsdPackage extends EPackage {
      */
     int DOCUMENT_ROOT__APPLICABLE_SERVICE_NS = 3;
 
-    /**
-     * The feature id for the '<em><b>Copyright</b></em>' containment reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int DOCUMENT_ROOT__COPYRIGHT = 4;
-
     /**
      * The feature id for the '<em><b>NS</b></em>' containment reference.
      * <!-- begin-user-doc -->
@@ -332,7 +341,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DOCUMENT_ROOT__NS = 5;
+    int DOCUMENT_ROOT__NS = 4;
 
     /**
      * The feature id for the '<em><b>NS Doc</b></em>' containment reference.
@@ -341,7 +350,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DOCUMENT_ROOT__NS_DOC = 6;
+    int DOCUMENT_ROOT__NS_DOC = 5;
 
     /**
      * The feature id for the '<em><b>Service NS</b></em>' containment reference.
@@ -350,7 +359,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DOCUMENT_ROOT__SERVICE_NS = 7;
+    int DOCUMENT_ROOT__SERVICE_NS = 6;
 
     /**
      * The number of structural features of the '<em>Document Root</em>' class.
@@ -359,7 +368,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DOCUMENT_ROOT_FEATURE_COUNT = 8;
+    int DOCUMENT_ROOT_FEATURE_COUNT = 7;
 
     /**
      * The number of operations of the '<em>Document Root</em>' class.
@@ -389,6 +398,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_TYPE__NAME = 0;
 
+    /**
+     * The feature id for the '<em><b>Applicable Services</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_TYPE__APPLICABLE_SERVICES = 1;
+
     /**
      * The number of structural features of the '<em>Service Type</em>' class.
      * <!-- begin-user-doc -->
@@ -396,7 +414,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_TYPE_FEATURE_COUNT = 1;
+    int SERVICE_TYPE_FEATURE_COUNT = 2;
 
     /**
      * The number of operations of the '<em>Service Type</em>' class.
@@ -435,6 +453,15 @@ public interface NsdPackage extends EPackage {
      */
     int ABBREVIATION__NAME = 1;
 
+    /**
+     * The feature id for the '<em><b>Abbreviations</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ABBREVIATION__ABBREVIATIONS = 2;
+
     /**
      * The number of structural features of the '<em>Abbreviation</em>' class.
      * <!-- begin-user-doc -->
@@ -442,7 +469,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int ABBREVIATION_FEATURE_COUNT = 2;
+    int ABBREVIATION_FEATURE_COUNT = 3;
 
     /**
      * The number of operations of the '<em>Abbreviation</em>' class.
@@ -472,6 +499,24 @@ public interface NsdPackage extends EPackage {
      */
     int ABBREVIATIONS__ABBREVIATION = 0;
 
+    /**
+     * The feature id for the '<em><b>NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ABBREVIATIONS__NS = 1;
+
+    /**
+     * The feature id for the '<em><b>Service NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ABBREVIATIONS__SERVICE_NS = 2;
+
     /**
      * The number of structural features of the '<em>Abbreviations</em>' class.
      * <!-- begin-user-doc -->
@@ -479,7 +524,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int ABBREVIATIONS_FEATURE_COUNT = 1;
+    int ABBREVIATIONS_FEATURE_COUNT = 3;
 
     /**
      * The number of operations of the '<em>Abbreviations</em>' class.
@@ -553,7 +598,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getTitledClass()
      * @generated
      */
-    int TITLED_CLASS = 49;
+    int TITLED_CLASS = 48;
 
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
@@ -764,6 +809,15 @@ public interface NsdPackage extends EPackage {
      */
     int ABSTRACT_LN_CLASS__NAME = ANY_LN_CLASS_FEATURE_COUNT + 0;
 
+    /**
+     * The feature id for the '<em><b>LN Classes</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ABSTRACT_LN_CLASS__LN_CLASSES = ANY_LN_CLASS_FEATURE_COUNT + 1;
+
     /**
      * The number of structural features of the '<em>Abstract LN Class</em>' class.
      * <!-- begin-user-doc -->
@@ -771,7 +825,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int ABSTRACT_LN_CLASS_FEATURE_COUNT = ANY_LN_CLASS_FEATURE_COUNT + 1;
+    int ABSTRACT_LN_CLASS_FEATURE_COUNT = ANY_LN_CLASS_FEATURE_COUNT + 2;
 
     /**
      * The number of operations of the '<em>Abstract LN Class</em>' class.
@@ -911,6 +965,15 @@ public interface NsdPackage extends EPackage {
      */
     int APPLICABLE_SERVICES__DATA_SET_MEMBER_OF = 1;
 
+    /**
+     * The feature id for the '<em><b>Functional Constraint</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT = 2;
+
     /**
      * The number of structural features of the '<em>Applicable Services</em>' class.
      * <!-- begin-user-doc -->
@@ -918,7 +981,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int APPLICABLE_SERVICES_FEATURE_COUNT = 2;
+    int APPLICABLE_SERVICES_FEATURE_COUNT = 3;
 
     /**
      * The number of operations of the '<em>Applicable Services</em>' class.
@@ -957,6 +1020,15 @@ public interface NsdPackage extends EPackage {
      */
     int BASIC_TYPE__NAME = 1;
 
+    /**
+     * The feature id for the '<em><b>Basic Types</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int BASIC_TYPE__BASIC_TYPES = 2;
+
     /**
      * The number of structural features of the '<em>Basic Type</em>' class.
      * <!-- begin-user-doc -->
@@ -964,7 +1036,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int BASIC_TYPE_FEATURE_COUNT = 2;
+    int BASIC_TYPE_FEATURE_COUNT = 3;
 
     /**
      * The number of operations of the '<em>Basic Type</em>' class.
@@ -994,6 +1066,15 @@ public interface NsdPackage extends EPackage {
      */
     int BASIC_TYPES__BASIC_TYPE = 0;
 
+    /**
+     * The feature id for the '<em><b>NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int BASIC_TYPES__NS = 1;
+
     /**
      * The number of structural features of the '<em>Basic Types</em>' class.
      * <!-- begin-user-doc -->
@@ -1001,7 +1082,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int BASIC_TYPES_FEATURE_COUNT = 1;
+    int BASIC_TYPES_FEATURE_COUNT = 2;
 
     /**
      * The number of operations of the '<em>Basic Types</em>' class.
@@ -1130,6 +1211,15 @@ public interface NsdPackage extends EPackage {
      */
     int CDC__VARIANT = TITLED_CLASS_FEATURE_COUNT + 7;
 
+    /**
+     * The feature id for the '<em><b>CD Cs</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CDC__CD_CS = TITLED_CLASS_FEATURE_COUNT + 8;
+
     /**
      * The number of structural features of the '<em>CDC</em>' class.
      * <!-- begin-user-doc -->
@@ -1137,7 +1227,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int CDC_FEATURE_COUNT = TITLED_CLASS_FEATURE_COUNT + 8;
+    int CDC_FEATURE_COUNT = TITLED_CLASS_FEATURE_COUNT + 9;
 
     /**
      * The number of operations of the '<em>CDC</em>' class.
@@ -1167,6 +1257,15 @@ public interface NsdPackage extends EPackage {
      */
     int CD_CS__CDC = 0;
 
+    /**
+     * The feature id for the '<em><b>NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CD_CS__NS = 1;
+
     /**
      * The number of structural features of the '<em>CD Cs</em>' class.
      * <!-- begin-user-doc -->
@@ -1174,7 +1273,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int CD_CS_FEATURE_COUNT = 1;
+    int CD_CS_FEATURE_COUNT = 2;
 
     /**
      * The number of operations of the '<em>CD Cs</em>' class.
@@ -1249,6 +1348,24 @@ public interface NsdPackage extends EPackage {
      */
     int CHANGES__TISSUES = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 3;
 
+    /**
+     * The feature id for the '<em><b>NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CHANGES__NS = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 4;
+
+    /**
+     * The feature id for the '<em><b>Service NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CHANGES__SERVICE_NS = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 5;
+
     /**
      * The number of structural features of the '<em>Changes</em>' class.
      * <!-- begin-user-doc -->
@@ -1256,7 +1373,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int CHANGES_FEATURE_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 4;
+    int CHANGES_FEATURE_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 6;
 
     /**
      * The number of operations of the '<em>Changes</em>' class.
@@ -1331,6 +1448,24 @@ public interface NsdPackage extends EPackage {
      */
     int CONSTRUCTED_ATTRIBUTE__NAME = TITLED_CLASS_FEATURE_COUNT + 1;
 
+    /**
+     * The feature id for the '<em><b>Constructed Attributes</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES = TITLED_CLASS_FEATURE_COUNT + 2;
+
+    /**
+     * The feature id for the '<em><b>Service Type Realizations</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS = TITLED_CLASS_FEATURE_COUNT + 3;
+
     /**
      * The number of structural features of the '<em>Constructed Attribute</em>' class.
      * <!-- begin-user-doc -->
@@ -1338,7 +1473,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int CONSTRUCTED_ATTRIBUTE_FEATURE_COUNT = TITLED_CLASS_FEATURE_COUNT + 2;
+    int CONSTRUCTED_ATTRIBUTE_FEATURE_COUNT = TITLED_CLASS_FEATURE_COUNT + 4;
 
     /**
      * The number of operations of the '<em>Constructed Attribute</em>' class.
@@ -1368,6 +1503,15 @@ public interface NsdPackage extends EPackage {
      */
     int CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE = 0;
 
+    /**
+     * The feature id for the '<em><b>NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CONSTRUCTED_ATTRIBUTES__NS = 1;
+
     /**
      * The number of structural features of the '<em>Constructed Attributes</em>' class.
      * <!-- begin-user-doc -->
@@ -1375,7 +1519,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int CONSTRUCTED_ATTRIBUTES_FEATURE_COUNT = 1;
+    int CONSTRUCTED_ATTRIBUTES_FEATURE_COUNT = 2;
 
     /**
      * The number of operations of the '<em>Constructed Attributes</em>' class.
@@ -1414,6 +1558,15 @@ public interface NsdPackage extends EPackage {
      */
     int COPYRIGHT_NOTICE__LICENSE = 1;
 
+    /**
+     * The feature id for the '<em><b>Copyrighted</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int COPYRIGHT_NOTICE__COPYRIGHTED = 2;
+
     /**
      * The number of structural features of the '<em>Copyright Notice</em>' class.
      * <!-- begin-user-doc -->
@@ -1421,7 +1574,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int COPYRIGHT_NOTICE_FEATURE_COUNT = 2;
+    int COPYRIGHT_NOTICE_FEATURE_COUNT = 3;
 
     /**
      * The number of operations of the '<em>Copyright Notice</em>' class.
@@ -1622,6 +1775,15 @@ public interface NsdPackage extends EPackage {
      */
     int DATA_ATTRIBUTE__TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 16;
 
+    /**
+     * The feature id for the '<em><b>CDC</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ATTRIBUTE__CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 17;
+
     /**
      * The number of structural features of the '<em>Data Attribute</em>' class.
      * <!-- begin-user-doc -->
@@ -1629,7 +1791,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 17;
+    int DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 18;
 
     /**
      * The number of operations of the '<em>Data Attribute</em>' class.
@@ -1776,6 +1938,15 @@ public interface NsdPackage extends EPackage {
      */
     int DATA_OBJECT__UNDERLYING_TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 10;
 
+    /**
+     * The feature id for the '<em><b>Any LN Class</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_OBJECT__ANY_LN_CLASS = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
+
     /**
      * The number of structural features of the '<em>Data Object</em>' class.
      * <!-- begin-user-doc -->
@@ -1783,7 +1954,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DATA_OBJECT_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
+    int DATA_OBJECT_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
 
     /**
      * The number of operations of the '<em>Data Object</em>' class.
@@ -1813,6 +1984,15 @@ public interface NsdPackage extends EPackage {
      */
     int DATA_SET_MEMBER_OF__CB = 0;
 
+    /**
+     * The feature id for the '<em><b>Applicable Services</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_MEMBER_OF__APPLICABLE_SERVICES = 1;
+
     /**
      * The number of structural features of the '<em>Data Set Member Of</em>' class.
      * <!-- begin-user-doc -->
@@ -1820,7 +2000,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DATA_SET_MEMBER_OF_FEATURE_COUNT = 1;
+    int DATA_SET_MEMBER_OF_FEATURE_COUNT = 2;
 
     /**
      * The number of operations of the '<em>Data Set Member Of</em>' class.
@@ -1877,6 +2057,15 @@ public interface NsdPackage extends EPackage {
      */
     int DOC__ID = 3;
 
+    /**
+     * The feature id for the '<em><b>NS Doc</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DOC__NS_DOC = 4;
+
     /**
      * The number of structural features of the '<em>Doc</em>' class.
      * <!-- begin-user-doc -->
@@ -1884,7 +2073,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DOC_FEATURE_COUNT = 4;
+    int DOC_FEATURE_COUNT = 5;
 
     /**
      * The number of operations of the '<em>Doc</em>' class.
@@ -1968,6 +2157,15 @@ public interface NsdPackage extends EPackage {
      */
     int ENUMERATION__NAME = TITLED_CLASS_FEATURE_COUNT + 2;
 
+    /**
+     * The feature id for the '<em><b>Enumerations</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ENUMERATION__ENUMERATIONS = TITLED_CLASS_FEATURE_COUNT + 3;
+
     /**
      * The number of structural features of the '<em>Enumeration</em>' class.
      * <!-- begin-user-doc -->
@@ -1975,7 +2173,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int ENUMERATION_FEATURE_COUNT = TITLED_CLASS_FEATURE_COUNT + 3;
+    int ENUMERATION_FEATURE_COUNT = TITLED_CLASS_FEATURE_COUNT + 4;
 
     /**
      * The number of operations of the '<em>Enumeration</em>' class.
@@ -2005,6 +2203,15 @@ public interface NsdPackage extends EPackage {
      */
     int ENUMERATIONS__ENUMERATION = 0;
 
+    /**
+     * The feature id for the '<em><b>NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ENUMERATIONS__NS = 1;
+
     /**
      * The number of structural features of the '<em>Enumerations</em>' class.
      * <!-- begin-user-doc -->
@@ -2012,7 +2219,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int ENUMERATIONS_FEATURE_COUNT = 1;
+    int ENUMERATIONS_FEATURE_COUNT = 2;
 
     /**
      * The number of operations of the '<em>Enumerations</em>' class.
@@ -2069,6 +2276,15 @@ public interface NsdPackage extends EPackage {
      */
     int FUNCTIONAL_CONSTRAINT__TITLE_ID = 3;
 
+    /**
+     * The feature id for the '<em><b>Functional Constraints</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS = 4;
+
     /**
      * The number of structural features of the '<em>Functional Constraint</em>' class.
      * <!-- begin-user-doc -->
@@ -2076,7 +2292,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int FUNCTIONAL_CONSTRAINT_FEATURE_COUNT = 4;
+    int FUNCTIONAL_CONSTRAINT_FEATURE_COUNT = 5;
 
     /**
      * The number of operations of the '<em>Functional Constraint</em>' class.
@@ -2106,6 +2322,24 @@ public interface NsdPackage extends EPackage {
      */
     int FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT = 0;
 
+    /**
+     * The feature id for the '<em><b>NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FUNCTIONAL_CONSTRAINTS__NS = 1;
+
+    /**
+     * The feature id for the '<em><b>Service NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FUNCTIONAL_CONSTRAINTS__SERVICE_NS = 2;
+
     /**
      * The number of structural features of the '<em>Functional Constraints</em>' class.
      * <!-- begin-user-doc -->
@@ -2113,7 +2347,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int FUNCTIONAL_CONSTRAINTS_FEATURE_COUNT = 1;
+    int FUNCTIONAL_CONSTRAINTS_FEATURE_COUNT = 3;
 
     /**
      * The number of operations of the '<em>Functional Constraints</em>' class.
@@ -2161,6 +2395,15 @@ public interface NsdPackage extends EPackage {
      */
     int LICENSE__URI = 2;
 
+    /**
+     * The feature id for the '<em><b>Copyright Notice</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LICENSE__COPYRIGHT_NOTICE = 3;
+
     /**
      * The number of structural features of the '<em>License</em>' class.
      * <!-- begin-user-doc -->
@@ -2168,7 +2411,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int LICENSE_FEATURE_COUNT = 3;
+    int LICENSE_FEATURE_COUNT = 4;
 
     /**
      * The number of operations of the '<em>License</em>' class.
@@ -2234,6 +2477,15 @@ public interface NsdPackage extends EPackage {
      */
     int LITERAL__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 1;
 
+    /**
+     * The feature id for the '<em><b>Enumeration</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LITERAL__ENUMERATION = DOCUMENTED_CLASS_FEATURE_COUNT + 2;
+
     /**
      * The number of structural features of the '<em>Literal</em>' class.
      * <!-- begin-user-doc -->
@@ -2241,7 +2493,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int LITERAL_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 2;
+    int LITERAL_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 3;
 
     /**
      * The number of operations of the '<em>Literal</em>' class.
@@ -2343,6 +2595,15 @@ public interface NsdPackage extends EPackage {
      */
     int LN_CLASS__NAME = ANY_LN_CLASS_FEATURE_COUNT + 2;
 
+    /**
+     * The feature id for the '<em><b>LN Classes</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LN_CLASS__LN_CLASSES = ANY_LN_CLASS_FEATURE_COUNT + 3;
+
     /**
      * The number of structural features of the '<em>LN Class</em>' class.
      * <!-- begin-user-doc -->
@@ -2350,7 +2611,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int LN_CLASS_FEATURE_COUNT = ANY_LN_CLASS_FEATURE_COUNT + 3;
+    int LN_CLASS_FEATURE_COUNT = ANY_LN_CLASS_FEATURE_COUNT + 4;
 
     /**
      * The number of operations of the '<em>LN Class</em>' class.
@@ -2389,6 +2650,15 @@ public interface NsdPackage extends EPackage {
      */
     int LN_CLASSES__LN_CLASS = 1;
 
+    /**
+     * The feature id for the '<em><b>NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LN_CLASSES__NS = 2;
+
     /**
      * The number of structural features of the '<em>LN Classes</em>' class.
      * <!-- begin-user-doc -->
@@ -2396,7 +2666,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int LN_CLASSES_FEATURE_COUNT = 2;
+    int LN_CLASSES_FEATURE_COUNT = 3;
 
     /**
      * The number of operations of the '<em>LN Classes</em>' class.
@@ -2426,6 +2696,15 @@ public interface NsdPackage extends EPackage {
      */
     int NOTICE__MIXED = 0;
 
+    /**
+     * The feature id for the '<em><b>Copyright Notice</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NOTICE__COPYRIGHT_NOTICE = 1;
+
     /**
      * The number of structural features of the '<em>Notice</em>' class.
      * <!-- begin-user-doc -->
@@ -2433,7 +2712,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int NOTICE_FEATURE_COUNT = 1;
+    int NOTICE_FEATURE_COUNT = 2;
 
     /**
      * The number of operations of the '<em>Notice</em>' class.
@@ -2807,6 +3086,15 @@ public interface NsdPackage extends EPackage {
      */
     int PRESENCE_CONDITION__TITLE_ID = 3;
 
+    /**
+     * The feature id for the '<em><b>Presence Conditions</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PRESENCE_CONDITION__PRESENCE_CONDITIONS = 4;
+
     /**
      * The number of structural features of the '<em>Presence Condition</em>' class.
      * <!-- begin-user-doc -->
@@ -2814,7 +3102,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int PRESENCE_CONDITION_FEATURE_COUNT = 4;
+    int PRESENCE_CONDITION_FEATURE_COUNT = 5;
 
     /**
      * The number of operations of the '<em>Presence Condition</em>' class.
@@ -2844,6 +3132,24 @@ public interface NsdPackage extends EPackage {
      */
     int PRESENCE_CONDITIONS__PRESENCE_CONDITION = 0;
 
+    /**
+     * The feature id for the '<em><b>NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PRESENCE_CONDITIONS__NS = 1;
+
+    /**
+     * The feature id for the '<em><b>Service NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PRESENCE_CONDITIONS__SERVICE_NS = 2;
+
     /**
      * The number of structural features of the '<em>Presence Conditions</em>' class.
      * <!-- begin-user-doc -->
@@ -2851,7 +3157,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int PRESENCE_CONDITIONS_FEATURE_COUNT = 1;
+    int PRESENCE_CONDITIONS_FEATURE_COUNT = 3;
 
     /**
      * The number of operations of the '<em>Presence Conditions</em>' class.
@@ -2900,16 +3206,25 @@ public interface NsdPackage extends EPackage {
     int SERVICE_CDC__VARIANT = 2;
 
     /**
-     * The number of structural features of the '<em>Service CDC</em>' class.
+     * The feature id for the '<em><b>Service CD Cs</b></em>' container reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SERVICE_CDC_FEATURE_COUNT = 3;
+    int SERVICE_CDC__SERVICE_CD_CS = 3;
 
     /**
-     * The number of operations of the '<em>Service CDC</em>' class.
+     * The number of structural features of the '<em>Service CDC</em>' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_CDC_FEATURE_COUNT = 4;
+
+    /**
+     * The number of operations of the '<em>Service CDC</em>' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
@@ -2936,6 +3251,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_CD_CS__SERVICE_CDC = 0;
 
+    /**
+     * The feature id for the '<em><b>Service NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_CD_CS__SERVICE_NS = 1;
+
     /**
      * The number of structural features of the '<em>Service CD Cs</em>' class.
      * <!-- begin-user-doc -->
@@ -2943,7 +3267,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_CD_CS_FEATURE_COUNT = 1;
+    int SERVICE_CD_CS_FEATURE_COUNT = 2;
 
     /**
      * The number of operations of the '<em>Service CD Cs</em>' class.
@@ -3018,6 +3342,24 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_CONSTRUCTED_ATTRIBUTE__NAME = CONSTRUCTED_ATTRIBUTE__NAME;
 
+    /**
+     * The feature id for the '<em><b>Constructed Attributes</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES = CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES;
+
+    /**
+     * The feature id for the '<em><b>Service Type Realizations</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS = CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS;
+
     /**
      * The feature id for the '<em><b>Type Kind Parameterized</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -3027,6 +3369,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_CONSTRUCTED_ATTRIBUTE__TYPE_KIND_PARAMETERIZED = CONSTRUCTED_ATTRIBUTE_FEATURE_COUNT + 0;
 
+    /**
+     * The feature id for the '<em><b>Service Constructed Attribute</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE = CONSTRUCTED_ATTRIBUTE_FEATURE_COUNT + 1;
+
     /**
      * The number of structural features of the '<em>Service Constructed Attribute</em>' class.
      * <!-- begin-user-doc -->
@@ -3034,7 +3385,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_CONSTRUCTED_ATTRIBUTE_FEATURE_COUNT = CONSTRUCTED_ATTRIBUTE_FEATURE_COUNT + 1;
+    int SERVICE_CONSTRUCTED_ATTRIBUTE_FEATURE_COUNT = CONSTRUCTED_ATTRIBUTE_FEATURE_COUNT + 2;
 
     /**
      * The number of operations of the '<em>Service Constructed Attribute</em>' class.
@@ -3064,6 +3415,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE = 0;
 
+    /**
+     * The feature id for the '<em><b>Service NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS = 1;
+
     /**
      * The number of structural features of the '<em>Service Constructed Attributes</em>' class.
      * <!-- begin-user-doc -->
@@ -3071,7 +3431,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_CONSTRUCTED_ATTRIBUTES_FEATURE_COUNT = 1;
+    int SERVICE_CONSTRUCTED_ATTRIBUTES_FEATURE_COUNT = 2;
 
     /**
      * The number of operations of the '<em>Service Constructed Attributes</em>' class.
@@ -3200,6 +3560,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 8;
 
+    /**
+     * The feature id for the '<em><b>Service CDC</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_DATA_ATTRIBUTE__SERVICE_CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 9;
+
     /**
      * The number of structural features of the '<em>Service Data Attribute</em>' class.
      * <!-- begin-user-doc -->
@@ -3207,7 +3576,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 9;
+    int SERVICE_DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 10;
 
     /**
      * The number of operations of the '<em>Service Data Attribute</em>' class.
@@ -3454,6 +3823,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_NS_USAGE__REVISION = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 3;
 
+    /**
+     * The feature id for the '<em><b>Applicable Service NS</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 4;
+
     /**
      * The number of structural features of the '<em>Service Ns Usage</em>' class.
      * <!-- begin-user-doc -->
@@ -3461,7 +3839,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_NS_USAGE_FEATURE_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 4;
+    int SERVICE_NS_USAGE_FEATURE_COUNT = NSD_OBJECT_WITH_VERSION_AND_RELEASE_FEATURE_COUNT + 5;
 
     /**
      * The number of operations of the '<em>Service Ns Usage</em>' class.
@@ -3564,132 +3942,59 @@ public interface NsdPackage extends EPackage {
     int SERVICE_PARAMETER__TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 5;
 
     /**
-     * The number of structural features of the '<em>Service Parameter</em>' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVICE_PARAMETER_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 6;
-
-    /**
-     * The number of operations of the '<em>Service Parameter</em>' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVICE_PARAMETER_OPERATION_COUNT = DOCUMENTED_CLASS_OPERATION_COUNT + 0;
-
-    /**
-     * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl <em>Service Type Realization</em>}' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getServiceTypeRealization()
-     * @generated
-     */
-    int SERVICE_TYPE_REALIZATION = 45;
-
-    /**
-     * The feature id for the '<em><b>Fc</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVICE_TYPE_REALIZATION__FC = 0;
-
-    /**
-     * The feature id for the '<em><b>Name</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVICE_TYPE_REALIZATION__NAME = 1;
-
-    /**
-     * The feature id for the '<em><b>Pres Cond</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVICE_TYPE_REALIZATION__PRES_COND = 2;
-
-    /**
-     * The feature id for the '<em><b>Pres Cond Args</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVICE_TYPE_REALIZATION__PRES_COND_ARGS = 3;
-
-    /**
-     * The feature id for the '<em><b>Pres Cond Args ID</b></em>' attribute.
+     * The feature id for the '<em><b>CDC</b></em>' container reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SERVICE_TYPE_REALIZATION__PRES_COND_ARGS_ID = 4;
+    int SERVICE_PARAMETER__CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 6;
 
     /**
-     * The feature id for the '<em><b>Type</b></em>' attribute.
+     * The number of structural features of the '<em>Service Parameter</em>' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SERVICE_TYPE_REALIZATION__TYPE = 5;
+    int SERVICE_PARAMETER_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 7;
 
     /**
-     * The feature id for the '<em><b>Type Kind</b></em>' attribute.
+     * The number of operations of the '<em>Service Parameter</em>' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SERVICE_TYPE_REALIZATION__TYPE_KIND = 6;
+    int SERVICE_PARAMETER_OPERATION_COUNT = DOCUMENTED_CLASS_OPERATION_COUNT + 0;
 
     /**
-     * The number of structural features of the '<em>Service Type Realization</em>' class.
+     * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationsImpl <em>Service Type Realizations</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationsImpl
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getServiceTypeRealizations()
      * @generated
-     * @ordered
      */
-    int SERVICE_TYPE_REALIZATION_FEATURE_COUNT = 7;
+    int SERVICE_TYPE_REALIZATIONS = 45;
 
     /**
-     * The number of operations of the '<em>Service Type Realization</em>' class.
+     * The feature id for the '<em><b>Service Type Realization</b></em>' containment reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SERVICE_TYPE_REALIZATION_OPERATION_COUNT = 0;
-
-    /**
-     * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationsImpl <em>Service Type Realizations</em>}' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationsImpl
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getServiceTypeRealizations()
-     * @generated
-     */
-    int SERVICE_TYPE_REALIZATIONS = 46;
+    int SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION = 0;
 
     /**
-     * The feature id for the '<em><b>Service Type Realization</b></em>' containment reference list.
+     * The feature id for the '<em><b>Service NS</b></em>' container reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION = 0;
+    int SERVICE_TYPE_REALIZATIONS__SERVICE_NS = 1;
 
     /**
      * The number of structural features of the '<em>Service Type Realizations</em>' class.
@@ -3698,7 +4003,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_TYPE_REALIZATIONS_FEATURE_COUNT = 1;
+    int SERVICE_TYPE_REALIZATIONS_FEATURE_COUNT = 2;
 
     /**
      * The number of operations of the '<em>Service Type Realizations</em>' class.
@@ -3717,7 +4022,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getSubDataAttribute()
      * @generated
      */
-    int SUB_DATA_ATTRIBUTE = 47;
+    int SUB_DATA_ATTRIBUTE = 46;
 
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
@@ -3863,6 +4168,15 @@ public interface NsdPackage extends EPackage {
      */
     int SUB_DATA_ATTRIBUTE__TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
 
+    /**
+     * The feature id for the '<em><b>Constructed Attribute</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 13;
+
     /**
      * The number of structural features of the '<em>Sub Data Attribute</em>' class.
      * <!-- begin-user-doc -->
@@ -3870,7 +4184,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 13;
+    int SUB_DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 14;
 
     /**
      * The number of operations of the '<em>Sub Data Attribute</em>' class.
@@ -3889,7 +4203,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getSubDataObject()
      * @generated
      */
-    int SUB_DATA_OBJECT = 48;
+    int SUB_DATA_OBJECT = 47;
 
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
@@ -4017,6 +4331,15 @@ public interface NsdPackage extends EPackage {
      */
     int SUB_DATA_OBJECT__UNDERLYING_TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 10;
 
+    /**
+     * The feature id for the '<em><b>CDC</b></em>' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_OBJECT__CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
+
     /**
      * The number of structural features of the '<em>Sub Data Object</em>' class.
      * <!-- begin-user-doc -->
@@ -4024,7 +4347,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_OBJECT_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
+    int SUB_DATA_OBJECT_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
 
     /**
      * The number of operations of the '<em>Sub Data Object</em>' class.
@@ -4043,7 +4366,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getACSIServicesKind()
      * @generated
      */
-    int ACSI_SERVICES_KIND = 51;
+    int ACSI_SERVICES_KIND = 50;
 
     /**
      * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CBKind <em>CB Kind</em>}' enum.
@@ -4053,7 +4376,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getCBKind()
      * @generated
      */
-    int CB_KIND = 52;
+    int CB_KIND = 51;
 
     /**
      * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind <em>Defined Attribute Type Kind</em>}' enum.
@@ -4063,7 +4386,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getDefinedAttributeTypeKind()
      * @generated
      */
-    int DEFINED_ATTRIBUTE_TYPE_KIND = 53;
+    int DEFINED_ATTRIBUTE_TYPE_KIND = 52;
 
     /**
      * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LicenseKind <em>License Kind</em>}' enum.
@@ -4073,7 +4396,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getLicenseKind()
      * @generated
      */
-    int LICENSE_KIND = 54;
+    int LICENSE_KIND = 53;
 
     /**
      * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage <em>Pub Stage</em>}' enum.
@@ -4083,7 +4406,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getPubStage()
      * @generated
      */
-    int PUB_STAGE = 55;
+    int PUB_STAGE = 54;
 
     /**
      * The meta object id for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.UndefinedAttributeTypeKind <em>Undefined Attribute Type Kind</em>}' enum.
@@ -4093,7 +4416,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getUndefinedAttributeTypeKind()
      * @generated
      */
-    int UNDEFINED_ATTRIBUTE_TYPE_KIND = 56;
+    int UNDEFINED_ATTRIBUTE_TYPE_KIND = 55;
 
     /**
      * The meta object id for the '<em>ACSI Services Kind Object</em>' data type.
@@ -4103,7 +4426,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getACSIServicesKindObject()
      * @generated
      */
-    int ACSI_SERVICES_KIND_OBJECT = 57;
+    int ACSI_SERVICES_KIND_OBJECT = 56;
 
     /**
      * The meta object id for the '<em>Attribute Type Kind</em>' data type.
@@ -4113,7 +4436,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getAttributeTypeKind()
      * @generated
      */
-    int ATTRIBUTE_TYPE_KIND = 58;
+    int ATTRIBUTE_TYPE_KIND = 57;
 
     /**
      * The meta object id for the '<em>CB Kind Object</em>' data type.
@@ -4123,7 +4446,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getCBKindObject()
      * @generated
      */
-    int CB_KIND_OBJECT = 59;
+    int CB_KIND_OBJECT = 58;
 
     /**
      * The meta object id for the '<em>Defined Attribute Type Kind Object</em>' data type.
@@ -4133,7 +4456,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getDefinedAttributeTypeKindObject()
      * @generated
      */
-    int DEFINED_ATTRIBUTE_TYPE_KIND_OBJECT = 60;
+    int DEFINED_ATTRIBUTE_TYPE_KIND_OBJECT = 59;
 
     /**
      * The meta object id for the '<em>License Kind Object</em>' data type.
@@ -4143,7 +4466,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getLicenseKindObject()
      * @generated
      */
-    int LICENSE_KIND_OBJECT = 61;
+    int LICENSE_KIND_OBJECT = 60;
 
     /**
      * The meta object id for the '<em>Pub Stage Object</em>' data type.
@@ -4153,7 +4476,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getPubStageObject()
      * @generated
      */
-    int PUB_STAGE_OBJECT = 62;
+    int PUB_STAGE_OBJECT = 61;
 
     /**
      * The meta object id for the '<em>Undefined Attribute Type Kind Object</em>' data type.
@@ -4163,7 +4486,7 @@ public interface NsdPackage extends EPackage {
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getUndefinedAttributeTypeKindObject()
      * @generated
      */
-    int UNDEFINED_ATTRIBUTE_TYPE_KIND_OBJECT = 63;
+    int UNDEFINED_ATTRIBUTE_TYPE_KIND_OBJECT = 62;
 
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType <em>Applies To Type</em>}'.
@@ -4209,47 +4532,69 @@ public interface NsdPackage extends EPackage {
     EAttribute getAppliesToType_Revision();
 
     /**
-     * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType <em>Depends On Type</em>}'.
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getServiceNsUsage <em>Service Ns Usage</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service Ns Usage</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getServiceNsUsage()
+     * @see #getAppliesToType()
+     * @generated
+     */
+    EReference getAppliesToType_ServiceNsUsage();
+
+    /**
+     * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn <em>Depends On</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Depends On Type</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType
+     * @return the meta object for class '<em>Depends On</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn
      * @generated
      */
-    EClass getDependsOnType();
+    EClass getDependsOn();
 
     /**
-     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getId <em>Id</em>}'.
+     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getId <em>Id</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @return the meta object for the attribute '<em>Id</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getId()
-     * @see #getDependsOnType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getId()
+     * @see #getDependsOn()
      * @generated
      */
-    EAttribute getDependsOnType_Id();
+    EAttribute getDependsOn_Id();
 
     /**
-     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getPublicationStage <em>Publication Stage</em>}'.
+     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getPublicationStage <em>Publication Stage</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @return the meta object for the attribute '<em>Publication Stage</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getPublicationStage()
-     * @see #getDependsOnType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getPublicationStage()
+     * @see #getDependsOn()
      * @generated
      */
-    EAttribute getDependsOnType_PublicationStage();
+    EAttribute getDependsOn_PublicationStage();
 
     /**
-     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getRevision <em>Revision</em>}'.
+     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getRevision <em>Revision</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @return the meta object for the attribute '<em>Revision</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType#getRevision()
-     * @see #getDependsOnType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getRevision()
+     * @see #getDependsOn()
+     * @generated
+     */
+    EAttribute getDependsOn_Revision();
+
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getNS <em>NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn#getNS()
+     * @see #getDependsOn()
      * @generated
      */
-    EAttribute getDependsOnType_Revision();
+    EReference getDependsOn_NS();
 
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot <em>Document Root</em>}'.
@@ -4305,17 +4650,6 @@ public interface NsdPackage extends EPackage {
      */
     EReference getDocumentRoot_ApplicableServiceNS();
 
-    /**
-     * Returns the meta object for the containment reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getCopyright <em>Copyright</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the containment reference '<em>Copyright</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getCopyright()
-     * @see #getDocumentRoot()
-     * @generated
-     */
-    EReference getDocumentRoot_Copyright();
-
     /**
      * Returns the meta object for the containment reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot#getNS <em>NS</em>}'.
      * <!-- begin-user-doc -->
@@ -4370,6 +4704,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getServiceType_Name();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType#getApplicableServices <em>Applicable Services</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Applicable Services</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType#getApplicableServices()
+     * @see #getServiceType()
+     * @generated
+     */
+    EReference getServiceType_ApplicableServices();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation <em>Abbreviation</em>}'.
      * <!-- begin-user-doc -->
@@ -4402,6 +4747,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getAbbreviation_Name();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getAbbreviations <em>Abbreviations</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Abbreviations</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation#getAbbreviations()
+     * @see #getAbbreviation()
+     * @generated
+     */
+    EReference getAbbreviation_Abbreviations();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations <em>Abbreviations</em>}'.
      * <!-- begin-user-doc -->
@@ -4423,6 +4779,28 @@ public interface NsdPackage extends EPackage {
      */
     EReference getAbbreviations_Abbreviation();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getNS <em>NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getNS()
+     * @see #getAbbreviations()
+     * @generated
+     */
+    EReference getAbbreviations_NS();
+
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getServiceNS <em>Service NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getServiceNS()
+     * @see #getAbbreviations()
+     * @generated
+     */
+    EReference getAbbreviations_ServiceNS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass <em>Abstract LN Class</em>}'.
      * <!-- begin-user-doc -->
@@ -4444,6 +4822,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getAbstractLNClass_Name();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass#getLNClasses <em>LN Classes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>LN Classes</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass#getLNClasses()
+     * @see #getAbstractLNClass()
+     * @generated
+     */
+    EReference getAbstractLNClass_LNClasses();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass <em>Any LN Class</em>}'.
      * <!-- begin-user-doc -->
@@ -4551,6 +4940,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getApplicableServices_DataSetMemberOf();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getFunctionalConstraint <em>Functional Constraint</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Functional Constraint</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getFunctionalConstraint()
+     * @see #getApplicableServices()
+     * @generated
+     */
+    EReference getApplicableServices_FunctionalConstraint();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType <em>Basic Type</em>}'.
      * <!-- begin-user-doc -->
@@ -4583,6 +4983,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getBasicType_Name();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getBasicTypes <em>Basic Types</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Basic Types</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getBasicTypes()
+     * @see #getBasicType()
+     * @generated
+     */
+    EReference getBasicType_BasicTypes();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes <em>Basic Types</em>}'.
      * <!-- begin-user-doc -->
@@ -4604,6 +5015,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getBasicTypes_BasicType();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getNS <em>NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes#getNS()
+     * @see #getBasicTypes()
+     * @generated
+     */
+    EReference getBasicTypes_NS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC <em>CDC</em>}'.
      * <!-- begin-user-doc -->
@@ -4702,6 +5124,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getCDC_Variant();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getCDCs <em>CD Cs</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>CD Cs</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getCDCs()
+     * @see #getCDC()
+     * @generated
+     */
+    EReference getCDC_CDCs();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs <em>CD Cs</em>}'.
      * <!-- begin-user-doc -->
@@ -4723,6 +5156,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getCDCs_CDC();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getNS <em>NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs#getNS()
+     * @see #getCDCs()
+     * @generated
+     */
+    EReference getCDCs_NS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes <em>Changes</em>}'.
      * <!-- begin-user-doc -->
@@ -4777,6 +5221,28 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getChanges_Tissues();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getNS <em>NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getNS()
+     * @see #getChanges()
+     * @generated
+     */
+    EReference getChanges_NS();
+
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getServiceNS <em>Service NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getServiceNS()
+     * @see #getChanges()
+     * @generated
+     */
+    EReference getChanges_ServiceNS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute <em>Constructed Attribute</em>}'.
      * <!-- begin-user-doc -->
@@ -4810,10 +5276,32 @@ public interface NsdPackage extends EPackage {
     EAttribute getConstructedAttribute_Name();
 
     /**
-     * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes <em>Constructed Attributes</em>}'.
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getConstructedAttributes <em>Constructed Attributes</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Constructed Attributes</em>'.
+     * @return the meta object for the container reference '<em>Constructed Attributes</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getConstructedAttributes()
+     * @see #getConstructedAttribute()
+     * @generated
+     */
+    EReference getConstructedAttribute_ConstructedAttributes();
+
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getServiceTypeRealizations <em>Service Type Realizations</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service Type Realizations</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getServiceTypeRealizations()
+     * @see #getConstructedAttribute()
+     * @generated
+     */
+    EReference getConstructedAttribute_ServiceTypeRealizations();
+
+    /**
+     * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes <em>Constructed Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for class '<em>Constructed Attributes</em>'.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes
      * @generated
      */
@@ -4830,6 +5318,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getConstructedAttributes_ConstructedAttribute();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getNS <em>NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes#getNS()
+     * @see #getConstructedAttributes()
+     * @generated
+     */
+    EReference getConstructedAttributes_NS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Copyrighted <em>Copyrighted</em>}'.
      * <!-- begin-user-doc -->
@@ -4883,6 +5382,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getCopyrightNotice_License();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getCopyrighted <em>Copyrighted</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Copyrighted</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice#getCopyrighted()
+     * @see #getCopyrightNotice()
+     * @generated
+     */
+    EReference getCopyrightNotice_Copyrighted();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute <em>Data Attribute</em>}'.
      * <!-- begin-user-doc -->
@@ -5080,6 +5590,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getDataAttribute_TypeKind();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getCDC <em>CDC</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>CDC</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getCDC()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    EReference getDataAttribute_CDC();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject <em>Data Object</em>}'.
      * <!-- begin-user-doc -->
@@ -5211,6 +5732,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getDataObject_UnderlyingTypeKind();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getAnyLNClass <em>Any LN Class</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Any LN Class</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getAnyLNClass()
+     * @see #getDataObject()
+     * @generated
+     */
+    EReference getDataObject_AnyLNClass();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf <em>Data Set Member Of</em>}'.
      * <!-- begin-user-doc -->
@@ -5232,6 +5764,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getDataSetMemberOf_Cb();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf#getApplicableServices <em>Applicable Services</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Applicable Services</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf#getApplicableServices()
+     * @see #getDataSetMemberOf()
+     * @generated
+     */
+    EReference getDataSetMemberOf_ApplicableServices();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc <em>Doc</em>}'.
      * <!-- begin-user-doc -->
@@ -5286,6 +5829,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getDoc_Id();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getNSDoc <em>NS Doc</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS Doc</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc#getNSDoc()
+     * @see #getDoc()
+     * @generated
+     */
+    EReference getDoc_NSDoc();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentedClass <em>Documented Class</em>}'.
      * <!-- begin-user-doc -->
@@ -5372,6 +5926,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getEnumeration_Name();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getEnumerations <em>Enumerations</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Enumerations</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getEnumerations()
+     * @see #getEnumeration()
+     * @generated
+     */
+    EReference getEnumeration_Enumerations();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations <em>Enumerations</em>}'.
      * <!-- begin-user-doc -->
@@ -5393,6 +5958,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getEnumerations_Enumeration();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getNS <em>NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations#getNS()
+     * @see #getEnumerations()
+     * @generated
+     */
+    EReference getEnumerations_NS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint <em>Functional Constraint</em>}'.
      * <!-- begin-user-doc -->
@@ -5447,6 +6023,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getFunctionalConstraint_TitleID();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getFunctionalConstraints <em>Functional Constraints</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Functional Constraints</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getFunctionalConstraints()
+     * @see #getFunctionalConstraint()
+     * @generated
+     */
+    EReference getFunctionalConstraint_FunctionalConstraints();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints <em>Functional Constraints</em>}'.
      * <!-- begin-user-doc -->
@@ -5468,6 +6055,28 @@ public interface NsdPackage extends EPackage {
      */
     EReference getFunctionalConstraints_FunctionalConstraint();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getNS <em>NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getNS()
+     * @see #getFunctionalConstraints()
+     * @generated
+     */
+    EReference getFunctionalConstraints_NS();
+
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getServiceNS <em>Service NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getServiceNS()
+     * @see #getFunctionalConstraints()
+     * @generated
+     */
+    EReference getFunctionalConstraints_ServiceNS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.License <em>License</em>}'.
      * <!-- begin-user-doc -->
@@ -5511,6 +6120,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getLicense_Uri();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getCopyrightNotice <em>Copyright Notice</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Copyright Notice</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.License#getCopyrightNotice()
+     * @see #getLicense()
+     * @generated
+     */
+    EReference getLicense_CopyrightNotice();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal <em>Literal</em>}'.
      * <!-- begin-user-doc -->
@@ -5543,6 +6163,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getLiteral_Name();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal#getEnumeration <em>Enumeration</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Enumeration</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal#getEnumeration()
+     * @see #getLiteral()
+     * @generated
+     */
+    EReference getLiteral_Enumeration();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass <em>LN Class</em>}'.
      * <!-- begin-user-doc -->
@@ -5586,6 +6217,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getLNClass_Name();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#getLNClasses <em>LN Classes</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>LN Classes</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass#getLNClasses()
+     * @see #getLNClass()
+     * @generated
+     */
+    EReference getLNClass_LNClasses();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses <em>LN Classes</em>}'.
      * <!-- begin-user-doc -->
@@ -5618,6 +6260,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getLNClasses_LNClass();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getNS <em>NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses#getNS()
+     * @see #getLNClasses()
+     * @generated
+     */
+    EReference getLNClasses_NS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Notice <em>Notice</em>}'.
      * <!-- begin-user-doc -->
@@ -5639,6 +6292,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getNotice_Mixed();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Notice#getCopyrightNotice <em>Copyright Notice</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Copyright Notice</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Notice#getCopyrightNotice()
+     * @see #getNotice()
+     * @generated
+     */
+    EReference getNotice_CopyrightNotice();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS <em>NS</em>}'.
      * <!-- begin-user-doc -->
@@ -5966,6 +6630,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getPresenceCondition_TitleID();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getPresenceConditions <em>Presence Conditions</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Presence Conditions</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getPresenceConditions()
+     * @see #getPresenceCondition()
+     * @generated
+     */
+    EReference getPresenceCondition_PresenceConditions();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions <em>Presence Conditions</em>}'.
      * <!-- begin-user-doc -->
@@ -5987,6 +6662,28 @@ public interface NsdPackage extends EPackage {
      */
     EReference getPresenceConditions_PresenceCondition();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getNS <em>NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getNS()
+     * @see #getPresenceConditions()
+     * @generated
+     */
+    EReference getPresenceConditions_NS();
+
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getServiceNS <em>Service NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getServiceNS()
+     * @see #getPresenceConditions()
+     * @generated
+     */
+    EReference getPresenceConditions_ServiceNS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC <em>Service CDC</em>}'.
      * <!-- begin-user-doc -->
@@ -6030,6 +6727,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getServiceCDC_Variant();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceCDCs <em>Service CD Cs</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service CD Cs</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceCDCs()
+     * @see #getServiceCDC()
+     * @generated
+     */
+    EReference getServiceCDC_ServiceCDCs();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs <em>Service CD Cs</em>}'.
      * <!-- begin-user-doc -->
@@ -6051,6 +6759,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getServiceCDCs_ServiceCDC();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceNS <em>Service NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceNS()
+     * @see #getServiceCDCs()
+     * @generated
+     */
+    EReference getServiceCDCs_ServiceNS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute <em>Service Constructed Attribute</em>}'.
      * <!-- begin-user-doc -->
@@ -6072,6 +6791,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getServiceConstructedAttribute_TypeKindParameterized();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute#getServiceConstructedAttribute <em>Service Constructed Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service Constructed Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute#getServiceConstructedAttribute()
+     * @see #getServiceConstructedAttribute()
+     * @generated
+     */
+    EReference getServiceConstructedAttribute_ServiceConstructedAttribute();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes <em>Service Constructed Attributes</em>}'.
      * <!-- begin-user-doc -->
@@ -6093,6 +6823,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getServiceConstructedAttributes_ServiceConstructedAttribute();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceNS <em>Service NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceNS()
+     * @see #getServiceConstructedAttributes()
+     * @generated
+     */
+    EReference getServiceConstructedAttributes_ServiceNS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute <em>Service Data Attribute</em>}'.
      * <!-- begin-user-doc -->
@@ -6202,6 +6943,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getServiceDataAttribute_UnderlyingTypeKind();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getServiceCDC <em>Service CDC</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service CDC</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getServiceCDC()
+     * @see #getServiceDataAttribute()
+     * @generated
+     */
+    EReference getServiceDataAttribute_ServiceCDC();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS <em>Service NS</em>}'.
      * <!-- begin-user-doc -->
@@ -6409,6 +7161,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getServiceNsUsage_Revision();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getApplicableServiceNS <em>Applicable Service NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Applicable Service NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getApplicableServiceNS()
+     * @see #getServiceNsUsage()
+     * @generated
+     */
+    EReference getServiceNsUsage_ApplicableServiceNS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter <em>Service Parameter</em>}'.
      * <!-- begin-user-doc -->
@@ -6486,91 +7249,15 @@ public interface NsdPackage extends EPackage {
     EAttribute getServiceParameter_TypeKind();
 
     /**
-     * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization <em>Service Type Realization</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Service Type Realization</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization
-     * @generated
-     */
-    EClass getServiceTypeRealization();
-
-    /**
-     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getFc <em>Fc</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Fc</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getFc()
-     * @see #getServiceTypeRealization()
-     * @generated
-     */
-    EAttribute getServiceTypeRealization_Fc();
-
-    /**
-     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getName <em>Name</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Name</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getName()
-     * @see #getServiceTypeRealization()
-     * @generated
-     */
-    EAttribute getServiceTypeRealization_Name();
-
-    /**
-     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCond <em>Pres Cond</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Pres Cond</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCond()
-     * @see #getServiceTypeRealization()
-     * @generated
-     */
-    EAttribute getServiceTypeRealization_PresCond();
-
-    /**
-     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCondArgs <em>Pres Cond Args</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Pres Cond Args</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCondArgs()
-     * @see #getServiceTypeRealization()
-     * @generated
-     */
-    EAttribute getServiceTypeRealization_PresCondArgs();
-
-    /**
-     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCondArgsID <em>Pres Cond Args ID</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Pres Cond Args ID</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCondArgsID()
-     * @see #getServiceTypeRealization()
-     * @generated
-     */
-    EAttribute getServiceTypeRealization_PresCondArgsID();
-
-    /**
-     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getType <em>Type</em>}'.
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getCDC <em>CDC</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Type</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getType()
-     * @see #getServiceTypeRealization()
-     * @generated
-     */
-    EAttribute getServiceTypeRealization_Type();
-
-    /**
-     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getTypeKind <em>Type Kind</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Type Kind</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getTypeKind()
-     * @see #getServiceTypeRealization()
+     * @return the meta object for the container reference '<em>CDC</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getCDC()
+     * @see #getServiceParameter()
      * @generated
      */
-    EAttribute getServiceTypeRealization_TypeKind();
+    EReference getServiceParameter_CDC();
 
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations <em>Service Type Realizations</em>}'.
@@ -6593,6 +7280,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getServiceTypeRealizations_ServiceTypeRealization();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceNS <em>Service NS</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Service NS</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceNS()
+     * @see #getServiceTypeRealizations()
+     * @generated
+     */
+    EReference getServiceTypeRealizations_ServiceNS();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute <em>Sub Data Attribute</em>}'.
      * <!-- begin-user-doc -->
@@ -6746,6 +7444,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getSubDataAttribute_TypeKind();
 
+    /**
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getConstructedAttribute <em>Constructed Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>Constructed Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getConstructedAttribute()
+     * @see #getSubDataAttribute()
+     * @generated
+     */
+    EReference getSubDataAttribute_ConstructedAttribute();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject <em>Sub Data Object</em>}'.
      * <!-- begin-user-doc -->
@@ -6878,7 +7587,18 @@ public interface NsdPackage extends EPackage {
     EAttribute getSubDataObject_UnderlyingTypeKind();
 
     /**
-     * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.TitledClass <em>Titled Class</em>}'.
+     * Returns the meta object for the container reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getCDC <em>CDC</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the container reference '<em>CDC</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getCDC()
+     * @see #getSubDataObject()
+     * @generated
+     */
+    EReference getSubDataObject_CDC();
+
+    /**
+     * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.TitledClass <em>Titled Class</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @return the meta object for class '<em>Titled Class</em>'.
@@ -7006,9 +7726,6 @@ public interface NsdPackage extends EPackage {
      * Returns the meta object for data type '{@link org.eclipse.emf.common.util.Enumerator <em>Attribute Type Kind</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Type kind of a data attribute, which may be "undefined".
-     * <!-- end-model-doc -->
      * @return the meta object for data type '<em>Attribute Type Kind</em>'.
      * @see org.eclipse.emf.common.util.Enumerator
      * @model instanceClass="org.eclipse.emf.common.util.Enumerator"
@@ -7135,14 +7852,22 @@ public interface NsdPackage extends EPackage {
         EAttribute APPLIES_TO_TYPE__REVISION = eINSTANCE.getAppliesToType_Revision();
 
         /**
-         * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnTypeImpl <em>Depends On Type</em>}' class.
+         * The meta object literal for the '<em><b>Service Ns Usage</b></em>' container reference feature.
          * <!-- begin-user-doc -->
          * <!-- end-user-doc -->
-         * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnTypeImpl
-         * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getDependsOnType()
          * @generated
          */
-        EClass DEPENDS_ON_TYPE = eINSTANCE.getDependsOnType();
+        EReference APPLIES_TO_TYPE__SERVICE_NS_USAGE = eINSTANCE.getAppliesToType_ServiceNsUsage();
+
+        /**
+         * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnImpl <em>Depends On</em>}' class.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnImpl
+         * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getDependsOn()
+         * @generated
+         */
+        EClass DEPENDS_ON = eINSTANCE.getDependsOn();
 
         /**
          * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
@@ -7150,7 +7875,7 @@ public interface NsdPackage extends EPackage {
          * <!-- end-user-doc -->
          * @generated
          */
-        EAttribute DEPENDS_ON_TYPE__ID = eINSTANCE.getDependsOnType_Id();
+        EAttribute DEPENDS_ON__ID = eINSTANCE.getDependsOn_Id();
 
         /**
          * The meta object literal for the '<em><b>Publication Stage</b></em>' attribute feature.
@@ -7158,7 +7883,7 @@ public interface NsdPackage extends EPackage {
          * <!-- end-user-doc -->
          * @generated
          */
-        EAttribute DEPENDS_ON_TYPE__PUBLICATION_STAGE = eINSTANCE.getDependsOnType_PublicationStage();
+        EAttribute DEPENDS_ON__PUBLICATION_STAGE = eINSTANCE.getDependsOn_PublicationStage();
 
         /**
          * The meta object literal for the '<em><b>Revision</b></em>' attribute feature.
@@ -7166,7 +7891,15 @@ public interface NsdPackage extends EPackage {
          * <!-- end-user-doc -->
          * @generated
          */
-        EAttribute DEPENDS_ON_TYPE__REVISION = eINSTANCE.getDependsOnType_Revision();
+        EAttribute DEPENDS_ON__REVISION = eINSTANCE.getDependsOn_Revision();
+
+        /**
+         * The meta object literal for the '<em><b>NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DEPENDS_ON__NS = eINSTANCE.getDependsOn_NS();
 
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocumentRootImpl <em>Document Root</em>}' class.
@@ -7210,14 +7943,6 @@ public interface NsdPackage extends EPackage {
          */
         EReference DOCUMENT_ROOT__APPLICABLE_SERVICE_NS = eINSTANCE.getDocumentRoot_ApplicableServiceNS();
 
-        /**
-         * The meta object literal for the '<em><b>Copyright</b></em>' containment reference feature.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EReference DOCUMENT_ROOT__COPYRIGHT = eINSTANCE.getDocumentRoot_Copyright();
-
         /**
          * The meta object literal for the '<em><b>NS</b></em>' containment reference feature.
          * <!-- begin-user-doc -->
@@ -7260,6 +7985,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute SERVICE_TYPE__NAME = eINSTANCE.getServiceType_Name();
 
+        /**
+         * The meta object literal for the '<em><b>Applicable Services</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SERVICE_TYPE__APPLICABLE_SERVICES = eINSTANCE.getServiceType_ApplicableServices();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbbreviationImpl <em>Abbreviation</em>}' class.
          * <!-- begin-user-doc -->
@@ -7286,6 +8019,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute ABBREVIATION__NAME = eINSTANCE.getAbbreviation_Name();
 
+        /**
+         * The meta object literal for the '<em><b>Abbreviations</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ABBREVIATION__ABBREVIATIONS = eINSTANCE.getAbbreviation_Abbreviations();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbbreviationsImpl <em>Abbreviations</em>}' class.
          * <!-- begin-user-doc -->
@@ -7304,6 +8045,22 @@ public interface NsdPackage extends EPackage {
          */
         EReference ABBREVIATIONS__ABBREVIATION = eINSTANCE.getAbbreviations_Abbreviation();
 
+        /**
+         * The meta object literal for the '<em><b>NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ABBREVIATIONS__NS = eINSTANCE.getAbbreviations_NS();
+
+        /**
+         * The meta object literal for the '<em><b>Service NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ABBREVIATIONS__SERVICE_NS = eINSTANCE.getAbbreviations_ServiceNS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbstractLNClassImpl <em>Abstract LN Class</em>}' class.
          * <!-- begin-user-doc -->
@@ -7322,6 +8079,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute ABSTRACT_LN_CLASS__NAME = eINSTANCE.getAbstractLNClass_Name();
 
+        /**
+         * The meta object literal for the '<em><b>LN Classes</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ABSTRACT_LN_CLASS__LN_CLASSES = eINSTANCE.getAbstractLNClass_LNClasses();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AnyLNClassImpl <em>Any LN Class</em>}' class.
          * <!-- begin-user-doc -->
@@ -7408,6 +8173,14 @@ public interface NsdPackage extends EPackage {
          */
         EReference APPLICABLE_SERVICES__DATA_SET_MEMBER_OF = eINSTANCE.getApplicableServices_DataSetMemberOf();
 
+        /**
+         * The meta object literal for the '<em><b>Functional Constraint</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT = eINSTANCE.getApplicableServices_FunctionalConstraint();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.BasicTypeImpl <em>Basic Type</em>}' class.
          * <!-- begin-user-doc -->
@@ -7434,6 +8207,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute BASIC_TYPE__NAME = eINSTANCE.getBasicType_Name();
 
+        /**
+         * The meta object literal for the '<em><b>Basic Types</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference BASIC_TYPE__BASIC_TYPES = eINSTANCE.getBasicType_BasicTypes();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.BasicTypesImpl <em>Basic Types</em>}' class.
          * <!-- begin-user-doc -->
@@ -7452,6 +8233,14 @@ public interface NsdPackage extends EPackage {
          */
         EReference BASIC_TYPES__BASIC_TYPE = eINSTANCE.getBasicTypes_BasicType();
 
+        /**
+         * The meta object literal for the '<em><b>NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference BASIC_TYPES__NS = eINSTANCE.getBasicTypes_NS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCImpl <em>CDC</em>}' class.
          * <!-- begin-user-doc -->
@@ -7526,6 +8315,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute CDC__VARIANT = eINSTANCE.getCDC_Variant();
 
+        /**
+         * The meta object literal for the '<em><b>CD Cs</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CDC__CD_CS = eINSTANCE.getCDC_CDCs();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCsImpl <em>CD Cs</em>}' class.
          * <!-- begin-user-doc -->
@@ -7544,6 +8341,14 @@ public interface NsdPackage extends EPackage {
          */
         EReference CD_CS__CDC = eINSTANCE.getCDCs_CDC();
 
+        /**
+         * The meta object literal for the '<em><b>NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CD_CS__NS = eINSTANCE.getCDCs_NS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ChangesImpl <em>Changes</em>}' class.
          * <!-- begin-user-doc -->
@@ -7586,6 +8391,22 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute CHANGES__TISSUES = eINSTANCE.getChanges_Tissues();
 
+        /**
+         * The meta object literal for the '<em><b>NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CHANGES__NS = eINSTANCE.getChanges_NS();
+
+        /**
+         * The meta object literal for the '<em><b>Service NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CHANGES__SERVICE_NS = eINSTANCE.getChanges_ServiceNS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributeImpl <em>Constructed Attribute</em>}' class.
          * <!-- begin-user-doc -->
@@ -7612,6 +8433,24 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute CONSTRUCTED_ATTRIBUTE__NAME = eINSTANCE.getConstructedAttribute_Name();
 
+        /**
+         * The meta object literal for the '<em><b>Constructed Attributes</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES = eINSTANCE
+                .getConstructedAttribute_ConstructedAttributes();
+
+        /**
+         * The meta object literal for the '<em><b>Service Type Realizations</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS = eINSTANCE
+                .getConstructedAttribute_ServiceTypeRealizations();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributesImpl <em>Constructed Attributes</em>}' class.
          * <!-- begin-user-doc -->
@@ -7631,6 +8470,14 @@ public interface NsdPackage extends EPackage {
         EReference CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE = eINSTANCE
                 .getConstructedAttributes_ConstructedAttribute();
 
+        /**
+         * The meta object literal for the '<em><b>NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CONSTRUCTED_ATTRIBUTES__NS = eINSTANCE.getConstructedAttributes_NS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CopyrightedImpl <em>Copyrighted</em>}' class.
          * <!-- begin-user-doc -->
@@ -7675,6 +8522,14 @@ public interface NsdPackage extends EPackage {
          */
         EReference COPYRIGHT_NOTICE__LICENSE = eINSTANCE.getCopyrightNotice_License();
 
+        /**
+         * The meta object literal for the '<em><b>Copyrighted</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference COPYRIGHT_NOTICE__COPYRIGHTED = eINSTANCE.getCopyrightNotice_Copyrighted();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl <em>Data Attribute</em>}' class.
          * <!-- begin-user-doc -->
@@ -7821,6 +8676,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute DATA_ATTRIBUTE__TYPE_KIND = eINSTANCE.getDataAttribute_TypeKind();
 
+        /**
+         * The meta object literal for the '<em><b>CDC</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ATTRIBUTE__CDC = eINSTANCE.getDataAttribute_CDC();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl <em>Data Object</em>}' class.
          * <!-- begin-user-doc -->
@@ -7919,6 +8782,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute DATA_OBJECT__UNDERLYING_TYPE_KIND = eINSTANCE.getDataObject_UnderlyingTypeKind();
 
+        /**
+         * The meta object literal for the '<em><b>Any LN Class</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_OBJECT__ANY_LN_CLASS = eINSTANCE.getDataObject_AnyLNClass();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataSetMemberOfImpl <em>Data Set Member Of</em>}' class.
          * <!-- begin-user-doc -->
@@ -7937,6 +8808,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute DATA_SET_MEMBER_OF__CB = eINSTANCE.getDataSetMemberOf_Cb();
 
+        /**
+         * The meta object literal for the '<em><b>Applicable Services</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_SET_MEMBER_OF__APPLICABLE_SERVICES = eINSTANCE.getDataSetMemberOf_ApplicableServices();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocImpl <em>Doc</em>}' class.
          * <!-- begin-user-doc -->
@@ -7979,6 +8858,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute DOC__ID = eINSTANCE.getDoc_Id();
 
+        /**
+         * The meta object literal for the '<em><b>NS Doc</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DOC__NS_DOC = eINSTANCE.getDoc_NSDoc();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocumentedClassImpl <em>Documented Class</em>}' class.
          * <!-- begin-user-doc -->
@@ -8047,6 +8934,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute ENUMERATION__NAME = eINSTANCE.getEnumeration_Name();
 
+        /**
+         * The meta object literal for the '<em><b>Enumerations</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ENUMERATION__ENUMERATIONS = eINSTANCE.getEnumeration_Enumerations();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationsImpl <em>Enumerations</em>}' class.
          * <!-- begin-user-doc -->
@@ -8065,6 +8960,14 @@ public interface NsdPackage extends EPackage {
          */
         EReference ENUMERATIONS__ENUMERATION = eINSTANCE.getEnumerations_Enumeration();
 
+        /**
+         * The meta object literal for the '<em><b>NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ENUMERATIONS__NS = eINSTANCE.getEnumerations_NS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintImpl <em>Functional Constraint</em>}' class.
          * <!-- begin-user-doc -->
@@ -8107,6 +9010,15 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute FUNCTIONAL_CONSTRAINT__TITLE_ID = eINSTANCE.getFunctionalConstraint_TitleID();
 
+        /**
+         * The meta object literal for the '<em><b>Functional Constraints</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS = eINSTANCE
+                .getFunctionalConstraint_FunctionalConstraints();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintsImpl <em>Functional Constraints</em>}' class.
          * <!-- begin-user-doc -->
@@ -8126,6 +9038,22 @@ public interface NsdPackage extends EPackage {
         EReference FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT = eINSTANCE
                 .getFunctionalConstraints_FunctionalConstraint();
 
+        /**
+         * The meta object literal for the '<em><b>NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference FUNCTIONAL_CONSTRAINTS__NS = eINSTANCE.getFunctionalConstraints_NS();
+
+        /**
+         * The meta object literal for the '<em><b>Service NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference FUNCTIONAL_CONSTRAINTS__SERVICE_NS = eINSTANCE.getFunctionalConstraints_ServiceNS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LicenseImpl <em>License</em>}' class.
          * <!-- begin-user-doc -->
@@ -8160,6 +9088,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute LICENSE__URI = eINSTANCE.getLicense_Uri();
 
+        /**
+         * The meta object literal for the '<em><b>Copyright Notice</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference LICENSE__COPYRIGHT_NOTICE = eINSTANCE.getLicense_CopyrightNotice();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LiteralImpl <em>Literal</em>}' class.
          * <!-- begin-user-doc -->
@@ -8186,6 +9122,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute LITERAL__NAME = eINSTANCE.getLiteral_Name();
 
+        /**
+         * The meta object literal for the '<em><b>Enumeration</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference LITERAL__ENUMERATION = eINSTANCE.getLiteral_Enumeration();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LNClassImpl <em>LN Class</em>}' class.
          * <!-- begin-user-doc -->
@@ -8220,6 +9164,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute LN_CLASS__NAME = eINSTANCE.getLNClass_Name();
 
+        /**
+         * The meta object literal for the '<em><b>LN Classes</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference LN_CLASS__LN_CLASSES = eINSTANCE.getLNClass_LNClasses();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LNClassesImpl <em>LN Classes</em>}' class.
          * <!-- begin-user-doc -->
@@ -8246,6 +9198,14 @@ public interface NsdPackage extends EPackage {
          */
         EReference LN_CLASSES__LN_CLASS = eINSTANCE.getLNClasses_LNClass();
 
+        /**
+         * The meta object literal for the '<em><b>NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference LN_CLASSES__NS = eINSTANCE.getLNClasses_NS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NoticeImpl <em>Notice</em>}' class.
          * <!-- begin-user-doc -->
@@ -8264,6 +9224,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute NOTICE__MIXED = eINSTANCE.getNotice_Mixed();
 
+        /**
+         * The meta object literal for the '<em><b>Copyright Notice</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference NOTICE__COPYRIGHT_NOTICE = eINSTANCE.getNotice_CopyrightNotice();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NSImpl <em>NS</em>}' class.
          * <!-- begin-user-doc -->
@@ -8510,6 +9478,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute PRESENCE_CONDITION__TITLE_ID = eINSTANCE.getPresenceCondition_TitleID();
 
+        /**
+         * The meta object literal for the '<em><b>Presence Conditions</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PRESENCE_CONDITION__PRESENCE_CONDITIONS = eINSTANCE.getPresenceCondition_PresenceConditions();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionsImpl <em>Presence Conditions</em>}' class.
          * <!-- begin-user-doc -->
@@ -8528,6 +9504,22 @@ public interface NsdPackage extends EPackage {
          */
         EReference PRESENCE_CONDITIONS__PRESENCE_CONDITION = eINSTANCE.getPresenceConditions_PresenceCondition();
 
+        /**
+         * The meta object literal for the '<em><b>NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PRESENCE_CONDITIONS__NS = eINSTANCE.getPresenceConditions_NS();
+
+        /**
+         * The meta object literal for the '<em><b>Service NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PRESENCE_CONDITIONS__SERVICE_NS = eINSTANCE.getPresenceConditions_ServiceNS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceCDCImpl <em>Service CDC</em>}' class.
          * <!-- begin-user-doc -->
@@ -8562,6 +9554,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute SERVICE_CDC__VARIANT = eINSTANCE.getServiceCDC_Variant();
 
+        /**
+         * The meta object literal for the '<em><b>Service CD Cs</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SERVICE_CDC__SERVICE_CD_CS = eINSTANCE.getServiceCDC_ServiceCDCs();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceCDCsImpl <em>Service CD Cs</em>}' class.
          * <!-- begin-user-doc -->
@@ -8580,6 +9580,14 @@ public interface NsdPackage extends EPackage {
          */
         EReference SERVICE_CD_CS__SERVICE_CDC = eINSTANCE.getServiceCDCs_ServiceCDC();
 
+        /**
+         * The meta object literal for the '<em><b>Service NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SERVICE_CD_CS__SERVICE_NS = eINSTANCE.getServiceCDCs_ServiceNS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceConstructedAttributeImpl <em>Service Constructed Attribute</em>}' class.
          * <!-- begin-user-doc -->
@@ -8599,6 +9607,15 @@ public interface NsdPackage extends EPackage {
         EAttribute SERVICE_CONSTRUCTED_ATTRIBUTE__TYPE_KIND_PARAMETERIZED = eINSTANCE
                 .getServiceConstructedAttribute_TypeKindParameterized();
 
+        /**
+         * The meta object literal for the '<em><b>Service Constructed Attribute</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE = eINSTANCE
+                .getServiceConstructedAttribute_ServiceConstructedAttribute();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceConstructedAttributesImpl <em>Service Constructed Attributes</em>}' class.
          * <!-- begin-user-doc -->
@@ -8618,6 +9635,14 @@ public interface NsdPackage extends EPackage {
         EReference SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE = eINSTANCE
                 .getServiceConstructedAttributes_ServiceConstructedAttribute();
 
+        /**
+         * The meta object literal for the '<em><b>Service NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS = eINSTANCE.getServiceConstructedAttributes_ServiceNS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceDataAttributeImpl <em>Service Data Attribute</em>}' class.
          * <!-- begin-user-doc -->
@@ -8701,6 +9726,14 @@ public interface NsdPackage extends EPackage {
         EAttribute SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND = eINSTANCE
                 .getServiceDataAttribute_UnderlyingTypeKind();
 
+        /**
+         * The meta object literal for the '<em><b>Service CDC</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SERVICE_DATA_ATTRIBUTE__SERVICE_CDC = eINSTANCE.getServiceDataAttribute_ServiceCDC();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceNSImpl <em>Service NS</em>}' class.
          * <!-- begin-user-doc -->
@@ -8857,6 +9890,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute SERVICE_NS_USAGE__REVISION = eINSTANCE.getServiceNsUsage_Revision();
 
+        /**
+         * The meta object literal for the '<em><b>Applicable Service NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS = eINSTANCE.getServiceNsUsage_ApplicableServiceNS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceParameterImpl <em>Service Parameter</em>}' class.
          * <!-- begin-user-doc -->
@@ -8916,70 +9957,12 @@ public interface NsdPackage extends EPackage {
         EAttribute SERVICE_PARAMETER__TYPE_KIND = eINSTANCE.getServiceParameter_TypeKind();
 
         /**
-         * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl <em>Service Type Realization</em>}' class.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl
-         * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdPackageImpl#getServiceTypeRealization()
-         * @generated
-         */
-        EClass SERVICE_TYPE_REALIZATION = eINSTANCE.getServiceTypeRealization();
-
-        /**
-         * The meta object literal for the '<em><b>Fc</b></em>' attribute feature.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EAttribute SERVICE_TYPE_REALIZATION__FC = eINSTANCE.getServiceTypeRealization_Fc();
-
-        /**
-         * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EAttribute SERVICE_TYPE_REALIZATION__NAME = eINSTANCE.getServiceTypeRealization_Name();
-
-        /**
-         * The meta object literal for the '<em><b>Pres Cond</b></em>' attribute feature.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EAttribute SERVICE_TYPE_REALIZATION__PRES_COND = eINSTANCE.getServiceTypeRealization_PresCond();
-
-        /**
-         * The meta object literal for the '<em><b>Pres Cond Args</b></em>' attribute feature.
+         * The meta object literal for the '<em><b>CDC</b></em>' container reference feature.
          * <!-- begin-user-doc -->
          * <!-- end-user-doc -->
          * @generated
          */
-        EAttribute SERVICE_TYPE_REALIZATION__PRES_COND_ARGS = eINSTANCE.getServiceTypeRealization_PresCondArgs();
-
-        /**
-         * The meta object literal for the '<em><b>Pres Cond Args ID</b></em>' attribute feature.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EAttribute SERVICE_TYPE_REALIZATION__PRES_COND_ARGS_ID = eINSTANCE.getServiceTypeRealization_PresCondArgsID();
-
-        /**
-         * The meta object literal for the '<em><b>Type</b></em>' attribute feature.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EAttribute SERVICE_TYPE_REALIZATION__TYPE = eINSTANCE.getServiceTypeRealization_Type();
-
-        /**
-         * The meta object literal for the '<em><b>Type Kind</b></em>' attribute feature.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EAttribute SERVICE_TYPE_REALIZATION__TYPE_KIND = eINSTANCE.getServiceTypeRealization_TypeKind();
+        EReference SERVICE_PARAMETER__CDC = eINSTANCE.getServiceParameter_CDC();
 
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationsImpl <em>Service Type Realizations</em>}' class.
@@ -9000,6 +9983,14 @@ public interface NsdPackage extends EPackage {
         EReference SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION = eINSTANCE
                 .getServiceTypeRealizations_ServiceTypeRealization();
 
+        /**
+         * The meta object literal for the '<em><b>Service NS</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SERVICE_TYPE_REALIZATIONS__SERVICE_NS = eINSTANCE.getServiceTypeRealizations_ServiceNS();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl <em>Sub Data Attribute</em>}' class.
          * <!-- begin-user-doc -->
@@ -9114,6 +10105,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute SUB_DATA_ATTRIBUTE__TYPE_KIND = eINSTANCE.getSubDataAttribute_TypeKind();
 
+        /**
+         * The meta object literal for the '<em><b>Constructed Attribute</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE = eINSTANCE.getSubDataAttribute_ConstructedAttribute();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl <em>Sub Data Object</em>}' class.
          * <!-- begin-user-doc -->
@@ -9212,6 +10211,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute SUB_DATA_OBJECT__UNDERLYING_TYPE_KIND = eINSTANCE.getSubDataObject_UnderlyingTypeKind();
 
+        /**
+         * The meta object literal for the '<em><b>CDC</b></em>' container reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SUB_DATA_OBJECT__CDC = eINSTANCE.getSubDataObject_CDC();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.TitledClassImpl <em>Titled Class</em>}' class.
          * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java
index e68314e..92947f9 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java
@@ -26,10 +26,6 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Presence Condition</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a presence condition.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -38,6 +34,7 @@ import org.eclipse.emf.ecore.EObject;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getDescID <em>Desc ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getTitleID <em>Title ID</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getPresenceConditions <em>Presence Conditions</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition()
@@ -49,13 +46,13 @@ public interface PresenceCondition extends EObject {
      * Returns the value of the '<em><b>Argument</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The presence condition argument, if any.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Argument</em>' attribute.
+     * @see #isSetArgument()
+     * @see #unsetArgument()
      * @see #setArgument(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition_Argument()
-     * @model extendedMetaData="kind='attribute' name='argument'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='argument'"
      * @generated
      */
     String getArgument();
@@ -65,22 +62,47 @@ public interface PresenceCondition extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Argument</em>' attribute.
+     * @see #isSetArgument()
+     * @see #unsetArgument()
      * @see #getArgument()
      * @generated
      */
     void setArgument( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getArgument <em>Argument</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetArgument()
+     * @see #getArgument()
+     * @see #setArgument(String)
+     * @generated
+     */
+    void unsetArgument();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getArgument <em>Argument</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Argument</em>' attribute is set.
+     * @see #unsetArgument()
+     * @see #getArgument()
+     * @see #setArgument(String)
+     * @generated
+     */
+    boolean isSetArgument();
+
     /**
      * Returns the value of the '<em><b>Desc ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to a full description of this object.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #setDescID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition_DescID()
-     * @model extendedMetaData="kind='attribute' name='descID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='descID'"
      * @generated
      */
     String getDescID();
@@ -90,22 +112,46 @@ public interface PresenceCondition extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #getDescID()
      * @generated
      */
     void setDescID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getDescID <em>Desc ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    void unsetDescID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getDescID <em>Desc ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Desc ID</em>' attribute is set.
+     * @see #unsetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    boolean isSetDescID();
+
     /**
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the presence condition, as used in IEC 61850 data models.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -116,22 +162,47 @@ public interface PresenceCondition extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
     /**
      * Returns the value of the '<em><b>Title ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to the title (alias) of this object.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Title ID</em>' attribute.
+     * @see #isSetTitleID()
+     * @see #unsetTitleID()
      * @see #setTitleID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition_TitleID()
-     * @model extendedMetaData="kind='attribute' name='titleID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='titleID'"
      * @generated
      */
     String getTitleID();
@@ -141,9 +212,62 @@ public interface PresenceCondition extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Title ID</em>' attribute.
+     * @see #isSetTitleID()
+     * @see #unsetTitleID()
      * @see #getTitleID()
      * @generated
      */
     void setTitleID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getTitleID <em>Title ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetTitleID()
+     * @see #getTitleID()
+     * @see #setTitleID(String)
+     * @generated
+     */
+    void unsetTitleID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getTitleID <em>Title ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Title ID</em>' attribute is set.
+     * @see #unsetTitleID()
+     * @see #getTitleID()
+     * @see #setTitleID(String)
+     * @generated
+     */
+    boolean isSetTitleID();
+
+    /**
+     * Returns the value of the '<em><b>Presence Conditions</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getPresenceCondition <em>Presence Condition</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Presence Conditions</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Presence Conditions</em>' container reference.
+     * @see #setPresenceConditions(PresenceConditions)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition_PresenceConditions()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getPresenceCondition
+     * @model opposite="presenceCondition" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    PresenceConditions getPresenceConditions();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getPresenceConditions <em>Presence Conditions</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Presence Conditions</em>' container reference.
+     * @see #getPresenceConditions()
+     * @generated
+     */
+    void setPresenceConditions( PresenceConditions value );
+
 } // PresenceCondition
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceConditions.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceConditions.java
index 79647cc..9a903c3 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceConditions.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceConditions.java
@@ -28,15 +28,13 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Presence Conditions</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of presence conditions which are introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getPresenceCondition <em>Presence Condition</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getNS <em>NS</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceConditions()
@@ -47,17 +45,95 @@ public interface PresenceConditions extends EObject {
     /**
      * Returns the value of the '<em><b>Presence Condition</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getPresenceConditions <em>Presence Conditions</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Definition of a presence condition.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Presence Condition</em>' containment reference list.
+     * @see #isSetPresenceCondition()
+     * @see #unsetPresenceCondition()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceConditions_PresenceCondition()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getPresenceConditions
+     * @model opposite="presenceConditions" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='PresenceCondition' namespace='##targetNamespace'"
      * @generated
      */
     EList< PresenceCondition > getPresenceCondition();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getPresenceCondition <em>Presence Condition</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresenceCondition()
+     * @see #getPresenceCondition()
+     * @generated
+     */
+    void unsetPresenceCondition();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getPresenceCondition <em>Presence Condition</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Presence Condition</em>' containment reference list is set.
+     * @see #unsetPresenceCondition()
+     * @see #getPresenceCondition()
+     * @generated
+     */
+    boolean isSetPresenceCondition();
+
+    /**
+     * Returns the value of the '<em><b>NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getPresenceConditions <em>Presence Conditions</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>NS</em>' container reference.
+     * @see #setNS(NS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceConditions_NS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#getPresenceConditions
+     * @model opposite="presenceConditions" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    NS getNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getNS <em>NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>NS</em>' container reference.
+     * @see #getNS()
+     * @generated
+     */
+    void setNS( NS value );
+
+    /**
+     * Returns the value of the '<em><b>Service NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getPresenceConditions <em>Presence Conditions</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service NS</em>' container reference.
+     * @see #setServiceNS(ServiceNS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceConditions_ServiceNS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getPresenceConditions
+     * @model opposite="presenceConditions" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceNS getServiceNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getServiceNS <em>Service NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service NS</em>' container reference.
+     * @see #getServiceNS()
+     * @generated
+     */
+    void setServiceNS( ServiceNS value );
+
 } // PresenceConditions
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PubStage.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PubStage.java
index 2ae2421..aba2cf3 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PubStage.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PubStage.java
@@ -30,9 +30,6 @@ import org.eclipse.emf.common.util.Enumerator;
  * A representation of the literals of the enumeration '<em><b>Pub Stage</b></em>',
  * and utility methods for working with them.
  * <!-- end-user-doc -->
- * <!-- begin-model-doc -->
- * Publication stage of the namespace.
- * <!-- end-model-doc -->
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPubStage()
  * @model extendedMetaData="name='tPubStage'"
  * @generated
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDC.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDC.java
index c65172f..5c15ecc 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDC.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDC.java
@@ -28,10 +28,6 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Service CDC</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a CDC extension for control services.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -39,6 +35,7 @@ import org.eclipse.emf.ecore.EObject;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceDataAttribute <em>Service Data Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getCdc <em>Cdc</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getVariant <em>Variant</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceCDCs <em>Service CD Cs</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceCDC()
@@ -49,30 +46,51 @@ public interface ServiceCDC extends EObject {
     /**
      * Returns the value of the '<em><b>Service Data Attribute</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getServiceCDC <em>Service CDC</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Data attribute to be used as service parameter.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Service Data Attribute</em>' containment reference list.
+     * @see #isSetServiceDataAttribute()
+     * @see #unsetServiceDataAttribute()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceCDC_ServiceDataAttribute()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getServiceCDC
+     * @model opposite="serviceCDC" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ServiceDataAttribute' namespace='##targetNamespace'"
      * @generated
      */
     EList< ServiceDataAttribute > getServiceDataAttribute();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceDataAttribute <em>Service Data Attribute</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetServiceDataAttribute()
+     * @see #getServiceDataAttribute()
+     * @generated
+     */
+    void unsetServiceDataAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceDataAttribute <em>Service Data Attribute</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service Data Attribute</em>' containment reference list is set.
+     * @see #unsetServiceDataAttribute()
+     * @see #getServiceDataAttribute()
+     * @generated
+     */
+    boolean isSetServiceDataAttribute();
+
     /**
      * Returns the value of the '<em><b>Cdc</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the common data class the service extension is for.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Cdc</em>' attribute.
+     * @see #isSetCdc()
+     * @see #unsetCdc()
      * @see #setCdc(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceCDC_Cdc()
-     * @model required="true"
+     * @model unsettable="true" required="true"
      *        extendedMetaData="kind='attribute' name='cdc'"
      * @generated
      */
@@ -83,22 +101,46 @@ public interface ServiceCDC extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Cdc</em>' attribute.
+     * @see #isSetCdc()
+     * @see #unsetCdc()
      * @see #getCdc()
      * @generated
      */
     void setCdc( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getCdc <em>Cdc</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetCdc()
+     * @see #getCdc()
+     * @see #setCdc(String)
+     * @generated
+     */
+    void unsetCdc();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getCdc <em>Cdc</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Cdc</em>' attribute is set.
+     * @see #unsetCdc()
+     * @see #getCdc()
+     * @see #setCdc(String)
+     * @generated
+     */
+    boolean isSetCdc();
+
     /**
      * Returns the value of the '<em><b>Variant</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Identification of the variant of the CDC (e.g., SPG_SP).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Variant</em>' attribute.
+     * @see #isSetVariant()
+     * @see #unsetVariant()
      * @see #setVariant(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceCDC_Variant()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.Token"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Token"
      *        extendedMetaData="kind='attribute' name='variant'"
      * @generated
      */
@@ -109,9 +151,62 @@ public interface ServiceCDC extends EObject {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Variant</em>' attribute.
+     * @see #isSetVariant()
+     * @see #unsetVariant()
      * @see #getVariant()
      * @generated
      */
     void setVariant( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getVariant <em>Variant</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetVariant()
+     * @see #getVariant()
+     * @see #setVariant(String)
+     * @generated
+     */
+    void unsetVariant();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getVariant <em>Variant</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Variant</em>' attribute is set.
+     * @see #unsetVariant()
+     * @see #getVariant()
+     * @see #setVariant(String)
+     * @generated
+     */
+    boolean isSetVariant();
+
+    /**
+     * Returns the value of the '<em><b>Service CD Cs</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceCDC <em>Service CDC</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service CD Cs</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service CD Cs</em>' container reference.
+     * @see #setServiceCDCs(ServiceCDCs)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceCDC_ServiceCDCs()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceCDC
+     * @model opposite="serviceCDC" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceCDCs getServiceCDCs();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceCDCs <em>Service CD Cs</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service CD Cs</em>' container reference.
+     * @see #getServiceCDCs()
+     * @generated
+     */
+    void setServiceCDCs( ServiceCDCs value );
+
 } // ServiceCDC
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDCs.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDCs.java
index 5852c6b..eabf98f 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDCs.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceCDCs.java
@@ -28,15 +28,12 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Service CD Cs</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of Service CDCs introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceCDC <em>Service CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceCDCs()
@@ -47,17 +44,67 @@ public interface ServiceCDCs extends EObject {
     /**
      * Returns the value of the '<em><b>Service CDC</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceCDCs <em>Service CD Cs</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * CDC extensions for control in this service namespace.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Service CDC</em>' containment reference list.
+     * @see #isSetServiceCDC()
+     * @see #unsetServiceCDC()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceCDCs_ServiceCDC()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceCDCs
+     * @model opposite="serviceCDCs" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ServiceCDC' namespace='##targetNamespace'"
      * @generated
      */
     EList< ServiceCDC > getServiceCDC();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceCDC <em>Service CDC</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetServiceCDC()
+     * @see #getServiceCDC()
+     * @generated
+     */
+    void unsetServiceCDC();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceCDC <em>Service CDC</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service CDC</em>' containment reference list is set.
+     * @see #unsetServiceCDC()
+     * @see #getServiceCDC()
+     * @generated
+     */
+    boolean isSetServiceCDC();
+
+    /**
+     * Returns the value of the '<em><b>Service NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceCDCs <em>Service CD Cs</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service NS</em>' container reference.
+     * @see #setServiceNS(ServiceNS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceCDCs_ServiceNS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceCDCs
+     * @model opposite="serviceCDCs" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceNS getServiceNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceNS <em>Service NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service NS</em>' container reference.
+     * @see #getServiceNS()
+     * @generated
+     */
+    void setServiceNS( ServiceNS value );
+
 } // ServiceCDCs
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceConstructedAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceConstructedAttribute.java
index 3dc1987..7a14aed 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceConstructedAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceConstructedAttribute.java
@@ -24,15 +24,12 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  * A representation of the model object '<em><b>Service Constructed Attribute</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a constructed attribute type for services.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute#isTypeKindParameterized <em>Type Kind Parameterized</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute#getServiceConstructedAttribute <em>Service Constructed Attribute</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceConstructedAttribute()
@@ -45,9 +42,6 @@ public interface ServiceConstructedAttribute extends ConstructedAttribute {
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether this ServiceConstructedAttribute has at least one child data attribute with typeKind "undefined".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type Kind Parameterized</em>' attribute.
      * @see #isSetTypeKindParameterized()
      * @see #unsetTypeKindParameterized()
@@ -94,4 +88,32 @@ public interface ServiceConstructedAttribute extends ConstructedAttribute {
      */
     boolean isSetTypeKindParameterized();
 
+    /**
+     * Returns the value of the '<em><b>Service Constructed Attribute</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceConstructedAttribute <em>Service Constructed Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service Constructed Attribute</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service Constructed Attribute</em>' container reference.
+     * @see #setServiceConstructedAttribute(ServiceConstructedAttributes)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceConstructedAttribute_ServiceConstructedAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceConstructedAttribute
+     * @model opposite="serviceConstructedAttribute" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceConstructedAttributes getServiceConstructedAttribute();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute#getServiceConstructedAttribute <em>Service Constructed Attribute</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service Constructed Attribute</em>' container reference.
+     * @see #getServiceConstructedAttribute()
+     * @generated
+     */
+    void setServiceConstructedAttribute( ServiceConstructedAttributes value );
+
 } // ServiceConstructedAttribute
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceConstructedAttributes.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceConstructedAttributes.java
index 4ee087e..42d4bc2 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceConstructedAttributes.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceConstructedAttributes.java
@@ -28,15 +28,12 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Service Constructed Attributes</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of Service Constructed Attributes introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceConstructedAttribute <em>Service Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceConstructedAttributes()
@@ -47,17 +44,67 @@ public interface ServiceConstructedAttributes extends EObject {
     /**
      * Returns the value of the '<em><b>Service Constructed Attribute</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute#getServiceConstructedAttribute <em>Service Constructed Attribute</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Realization of Part 7-2 abstract types or constructed attributes needed for control services. Note: in SCL instance files, the ProtNs element shall be specified for these.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Service Constructed Attribute</em>' containment reference list.
+     * @see #isSetServiceConstructedAttribute()
+     * @see #unsetServiceConstructedAttribute()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceConstructedAttributes_ServiceConstructedAttribute()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute#getServiceConstructedAttribute
+     * @model opposite="serviceConstructedAttribute" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ServiceConstructedAttribute' namespace='##targetNamespace'"
      * @generated
      */
     EList< ServiceConstructedAttribute > getServiceConstructedAttribute();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceConstructedAttribute <em>Service Constructed Attribute</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetServiceConstructedAttribute()
+     * @see #getServiceConstructedAttribute()
+     * @generated
+     */
+    void unsetServiceConstructedAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceConstructedAttribute <em>Service Constructed Attribute</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service Constructed Attribute</em>' containment reference list is set.
+     * @see #unsetServiceConstructedAttribute()
+     * @see #getServiceConstructedAttribute()
+     * @generated
+     */
+    boolean isSetServiceConstructedAttribute();
+
+    /**
+     * Returns the value of the '<em><b>Service NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceConstructedAttributes <em>Service Constructed Attributes</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service NS</em>' container reference.
+     * @see #setServiceNS(ServiceNS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceConstructedAttributes_ServiceNS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceConstructedAttributes
+     * @model opposite="serviceConstructedAttributes" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceNS getServiceNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceNS <em>Service NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service NS</em>' container reference.
+     * @see #getServiceNS()
+     * @generated
+     */
+    void setServiceNS( ServiceNS value );
+
 } // ServiceConstructedAttributes
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceDataAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceDataAttribute.java
index 5f14544..a6f8821 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceDataAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceDataAttribute.java
@@ -26,10 +26,6 @@ import org.eclipse.emf.common.util.Enumerator;
  * A representation of the model object '<em><b>Service Data Attribute</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a service parameter as Data Attribute.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -43,6 +39,7 @@ import org.eclipse.emf.common.util.Enumerator;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getTypeKind <em>Type Kind</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getUnderlyingType <em>Underlying Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getUnderlyingTypeKind <em>Underlying Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getServiceCDC <em>Service CDC</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceDataAttribute()
@@ -54,13 +51,12 @@ public interface ServiceDataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Fc</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Functional constraint of the data attribute.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Fc</em>' attribute.
+     * @see #isSetFc()
+     * @see #unsetFc()
      * @see #setFc(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceDataAttribute_Fc()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='fc'"
      * @generated
      */
@@ -71,22 +67,46 @@ public interface ServiceDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Fc</em>' attribute.
+     * @see #isSetFc()
+     * @see #unsetFc()
      * @see #getFc()
      * @generated
      */
     void setFc( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getFc <em>Fc</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetFc()
+     * @see #getFc()
+     * @see #setFc(String)
+     * @generated
+     */
+    void unsetFc();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getFc <em>Fc</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Fc</em>' attribute is set.
+     * @see #unsetFc()
+     * @see #getFc()
+     * @see #setFc(String)
+     * @generated
+     */
+    boolean isSetFc();
+
     /**
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the data attribute.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceDataAttribute_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -97,19 +117,41 @@ public interface ServiceDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
     /**
      * Returns the value of the '<em><b>Pres Cond</b></em>' attribute.
      * The default value is <code>"M"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Presence condition of the element. By default 'M' (mandatory).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond</em>' attribute.
      * @see #isSetPresCond()
      * @see #unsetPresCond()
@@ -160,13 +202,13 @@ public interface ServiceDataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Pres Cond Args</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition. Can be a sibling element or a group number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond Args</em>' attribute.
+     * @see #isSetPresCondArgs()
+     * @see #unsetPresCondArgs()
      * @see #setPresCondArgs(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceDataAttribute_PresCondArgs()
-     * @model extendedMetaData="kind='attribute' name='presCondArgs'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='presCondArgs'"
      * @generated
      */
     String getPresCondArgs();
@@ -176,22 +218,47 @@ public interface ServiceDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Pres Cond Args</em>' attribute.
+     * @see #isSetPresCondArgs()
+     * @see #unsetPresCondArgs()
      * @see #getPresCondArgs()
      * @generated
      */
     void setPresCondArgs( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getPresCondArgs <em>Pres Cond Args</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresCondArgs()
+     * @see #getPresCondArgs()
+     * @see #setPresCondArgs(String)
+     * @generated
+     */
+    void unsetPresCondArgs();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getPresCondArgs <em>Pres Cond Args</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Pres Cond Args</em>' attribute is set.
+     * @see #unsetPresCondArgs()
+     * @see #getPresCondArgs()
+     * @see #setPresCondArgs(String)
+     * @generated
+     */
+    boolean isSetPresCondArgs();
+
     /**
      * Returns the value of the '<em><b>Pres Cond Args ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition: a documentation identifier referring to some free text.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond Args ID</em>' attribute.
+     * @see #isSetPresCondArgsID()
+     * @see #unsetPresCondArgsID()
      * @see #setPresCondArgsID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceDataAttribute_PresCondArgsID()
-     * @model extendedMetaData="kind='attribute' name='presCondArgsID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='presCondArgsID'"
      * @generated
      */
     String getPresCondArgsID();
@@ -201,22 +268,47 @@ public interface ServiceDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Pres Cond Args ID</em>' attribute.
+     * @see #isSetPresCondArgsID()
+     * @see #unsetPresCondArgsID()
      * @see #getPresCondArgsID()
      * @generated
      */
     void setPresCondArgsID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresCondArgsID()
+     * @see #getPresCondArgsID()
+     * @see #setPresCondArgsID(String)
+     * @generated
+     */
+    void unsetPresCondArgsID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Pres Cond Args ID</em>' attribute is set.
+     * @see #unsetPresCondArgsID()
+     * @see #getPresCondArgsID()
+     * @see #setPresCondArgsID(String)
+     * @generated
+     */
+    boolean isSetPresCondArgsID();
+
     /**
      * Returns the value of the '<em><b>Type</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The type of the data attribute, e.g., the name of a basic type like INT32, the name of an enumeration of a constructed data attribute - depending on the sibling typeKind. If not provided, shall be defined by the "parent" element.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #setType(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceDataAttribute_Type()
-     * @model extendedMetaData="kind='attribute' name='type'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='type'"
      * @generated
      */
     String getType();
@@ -226,19 +318,41 @@ public interface ServiceDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #getType()
      * @generated
      */
     void setType( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getType <em>Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    void unsetType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getType <em>Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Type</em>' attribute is set.
+     * @see #unsetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    boolean isSetType();
+
     /**
      * Returns the value of the '<em><b>Type Kind</b></em>' attribute.
      * The default value is <code>"BASIC"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The kind of the data attribute's type. By  default, "BASIC".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type Kind</em>' attribute.
      * @see #isSetTypeKind()
      * @see #unsetTypeKind()
@@ -289,13 +403,13 @@ public interface ServiceDataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Underlying Type</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Type to be used for type-open CDCs, e.g., enumeration to be used for enumeration-based CDCs (e.g., ENS, ENC, ENG).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Underlying Type</em>' attribute.
+     * @see #isSetUnderlyingType()
+     * @see #unsetUnderlyingType()
      * @see #setUnderlyingType(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceDataAttribute_UnderlyingType()
-     * @model extendedMetaData="kind='attribute' name='underlyingType'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='underlyingType'"
      * @generated
      */
     String getUnderlyingType();
@@ -305,19 +419,41 @@ public interface ServiceDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Underlying Type</em>' attribute.
+     * @see #isSetUnderlyingType()
+     * @see #unsetUnderlyingType()
      * @see #getUnderlyingType()
      * @generated
      */
     void setUnderlyingType( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getUnderlyingType <em>Underlying Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetUnderlyingType()
+     * @see #getUnderlyingType()
+     * @see #setUnderlyingType(String)
+     * @generated
+     */
+    void unsetUnderlyingType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getUnderlyingType <em>Underlying Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Underlying Type</em>' attribute is set.
+     * @see #unsetUnderlyingType()
+     * @see #getUnderlyingType()
+     * @see #setUnderlyingType(String)
+     * @generated
+     */
+    boolean isSetUnderlyingType();
+
     /**
      * Returns the value of the '<em><b>Underlying Type Kind</b></em>' attribute.
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The typeKind to be used for all "undefined" attributes of the CDC of this DataObject.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Underlying Type Kind</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind
      * @see #isSetUnderlyingTypeKind()
@@ -366,4 +502,32 @@ public interface ServiceDataAttribute extends DocumentedClass {
      */
     boolean isSetUnderlyingTypeKind();
 
+    /**
+     * Returns the value of the '<em><b>Service CDC</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceDataAttribute <em>Service Data Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service CDC</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service CDC</em>' container reference.
+     * @see #setServiceCDC(ServiceCDC)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceDataAttribute_ServiceCDC()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC#getServiceDataAttribute
+     * @model opposite="serviceDataAttribute" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceCDC getServiceCDC();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute#getServiceCDC <em>Service CDC</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service CDC</em>' container reference.
+     * @see #getServiceCDC()
+     * @generated
+     */
+    void setServiceCDC( ServiceCDC value );
+
 } // ServiceDataAttribute
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceNS.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceNS.java
index b2515ef..68d03ce 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceNS.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceNS.java
@@ -26,10 +26,6 @@ import javax.xml.datatype.XMLGregorianCalendar;
  * A representation of the model object '<em><b>Service NS</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a service namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -56,15 +52,16 @@ import javax.xml.datatype.XMLGregorianCalendar;
 public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
     /**
      * Returns the value of the '<em><b>Changes</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getServiceNS <em>Service NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The version/revision/release this namespace is based on, including the TISSUEs implemented in this release.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Changes</em>' containment reference.
+     * @see #isSetChanges()
+     * @see #unsetChanges()
      * @see #setChanges(Changes)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_Changes()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes#getServiceNS
+     * @model opposite="serviceNS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Changes' namespace='##targetNamespace'"
      * @generated
      */
@@ -75,22 +72,48 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Changes</em>' containment reference.
+     * @see #isSetChanges()
+     * @see #unsetChanges()
      * @see #getChanges()
      * @generated
      */
     void setChanges( Changes value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getChanges <em>Changes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetChanges()
+     * @see #getChanges()
+     * @see #setChanges(Changes)
+     * @generated
+     */
+    void unsetChanges();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getChanges <em>Changes</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Changes</em>' containment reference is set.
+     * @see #unsetChanges()
+     * @see #getChanges()
+     * @see #setChanges(Changes)
+     * @generated
+     */
+    boolean isSetChanges();
+
     /**
      * Returns the value of the '<em><b>Functional Constraints</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getServiceNS <em>Service NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of Functional Constraints added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine "included" ones.).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Functional Constraints</em>' containment reference.
+     * @see #isSetFunctionalConstraints()
+     * @see #unsetFunctionalConstraints()
      * @see #setFunctionalConstraints(FunctionalConstraints)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_FunctionalConstraints()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints#getServiceNS
+     * @model opposite="serviceNS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='FunctionalConstraints' namespace='##targetNamespace'"
      * @generated
      */
@@ -101,22 +124,48 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Functional Constraints</em>' containment reference.
+     * @see #isSetFunctionalConstraints()
+     * @see #unsetFunctionalConstraints()
      * @see #getFunctionalConstraints()
      * @generated
      */
     void setFunctionalConstraints( FunctionalConstraints value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getFunctionalConstraints <em>Functional Constraints</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetFunctionalConstraints()
+     * @see #getFunctionalConstraints()
+     * @see #setFunctionalConstraints(FunctionalConstraints)
+     * @generated
+     */
+    void unsetFunctionalConstraints();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getFunctionalConstraints <em>Functional Constraints</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Functional Constraints</em>' containment reference is set.
+     * @see #unsetFunctionalConstraints()
+     * @see #getFunctionalConstraints()
+     * @see #setFunctionalConstraints(FunctionalConstraints)
+     * @generated
+     */
+    boolean isSetFunctionalConstraints();
+
     /**
      * Returns the value of the '<em><b>Presence Conditions</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getServiceNS <em>Service NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of presence conditions added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine "included" ones.).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Presence Conditions</em>' containment reference.
+     * @see #isSetPresenceConditions()
+     * @see #unsetPresenceConditions()
      * @see #setPresenceConditions(PresenceConditions)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_PresenceConditions()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions#getServiceNS
+     * @model opposite="serviceNS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='PresenceConditions' namespace='##targetNamespace'"
      * @generated
      */
@@ -127,22 +176,48 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Presence Conditions</em>' containment reference.
+     * @see #isSetPresenceConditions()
+     * @see #unsetPresenceConditions()
      * @see #getPresenceConditions()
      * @generated
      */
     void setPresenceConditions( PresenceConditions value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getPresenceConditions <em>Presence Conditions</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresenceConditions()
+     * @see #getPresenceConditions()
+     * @see #setPresenceConditions(PresenceConditions)
+     * @generated
+     */
+    void unsetPresenceConditions();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getPresenceConditions <em>Presence Conditions</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Presence Conditions</em>' containment reference is set.
+     * @see #unsetPresenceConditions()
+     * @see #getPresenceConditions()
+     * @see #setPresenceConditions(PresenceConditions)
+     * @generated
+     */
+    boolean isSetPresenceConditions();
+
     /**
      * Returns the value of the '<em><b>Abbreviations</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getServiceNS <em>Service NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of abbreviations added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine "included" ones.).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Abbreviations</em>' containment reference.
+     * @see #isSetAbbreviations()
+     * @see #unsetAbbreviations()
      * @see #setAbbreviations(Abbreviations)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_Abbreviations()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations#getServiceNS
+     * @model opposite="serviceNS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='Abbreviations' namespace='##targetNamespace'"
      * @generated
      */
@@ -153,22 +228,48 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Abbreviations</em>' containment reference.
+     * @see #isSetAbbreviations()
+     * @see #unsetAbbreviations()
      * @see #getAbbreviations()
      * @generated
      */
     void setAbbreviations( Abbreviations value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getAbbreviations <em>Abbreviations</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetAbbreviations()
+     * @see #getAbbreviations()
+     * @see #setAbbreviations(Abbreviations)
+     * @generated
+     */
+    void unsetAbbreviations();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getAbbreviations <em>Abbreviations</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Abbreviations</em>' containment reference is set.
+     * @see #unsetAbbreviations()
+     * @see #getAbbreviations()
+     * @see #setAbbreviations(Abbreviations)
+     * @generated
+     */
+    boolean isSetAbbreviations();
+
     /**
      * Returns the value of the '<em><b>Service Type Realizations</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceNS <em>Service NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of service type realization added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine "included" ones.).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Service Type Realizations</em>' containment reference.
+     * @see #isSetServiceTypeRealizations()
+     * @see #unsetServiceTypeRealizations()
      * @see #setServiceTypeRealizations(ServiceTypeRealizations)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_ServiceTypeRealizations()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceNS
+     * @model opposite="serviceNS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ServiceTypeRealizations' namespace='##targetNamespace'"
      * @generated
      */
@@ -179,22 +280,48 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Service Type Realizations</em>' containment reference.
+     * @see #isSetServiceTypeRealizations()
+     * @see #unsetServiceTypeRealizations()
      * @see #getServiceTypeRealizations()
      * @generated
      */
     void setServiceTypeRealizations( ServiceTypeRealizations value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceTypeRealizations <em>Service Type Realizations</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetServiceTypeRealizations()
+     * @see #getServiceTypeRealizations()
+     * @see #setServiceTypeRealizations(ServiceTypeRealizations)
+     * @generated
+     */
+    void unsetServiceTypeRealizations();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceTypeRealizations <em>Service Type Realizations</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service Type Realizations</em>' containment reference is set.
+     * @see #unsetServiceTypeRealizations()
+     * @see #getServiceTypeRealizations()
+     * @see #setServiceTypeRealizations(ServiceTypeRealizations)
+     * @generated
+     */
+    boolean isSetServiceTypeRealizations();
+
     /**
      * Returns the value of the '<em><b>Service Constructed Attributes</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceNS <em>Service NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of service constructed attributes added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine "included" ones.).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Service Constructed Attributes</em>' containment reference.
+     * @see #isSetServiceConstructedAttributes()
+     * @see #unsetServiceConstructedAttributes()
      * @see #setServiceConstructedAttributes(ServiceConstructedAttributes)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_ServiceConstructedAttributes()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes#getServiceNS
+     * @model opposite="serviceNS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ServiceConstructedAttributes' namespace='##targetNamespace'"
      * @generated
      */
@@ -205,22 +332,48 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Service Constructed Attributes</em>' containment reference.
+     * @see #isSetServiceConstructedAttributes()
+     * @see #unsetServiceConstructedAttributes()
      * @see #getServiceConstructedAttributes()
      * @generated
      */
     void setServiceConstructedAttributes( ServiceConstructedAttributes value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceConstructedAttributes <em>Service Constructed Attributes</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetServiceConstructedAttributes()
+     * @see #getServiceConstructedAttributes()
+     * @see #setServiceConstructedAttributes(ServiceConstructedAttributes)
+     * @generated
+     */
+    void unsetServiceConstructedAttributes();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceConstructedAttributes <em>Service Constructed Attributes</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service Constructed Attributes</em>' containment reference is set.
+     * @see #unsetServiceConstructedAttributes()
+     * @see #getServiceConstructedAttributes()
+     * @see #setServiceConstructedAttributes(ServiceConstructedAttributes)
+     * @generated
+     */
+    boolean isSetServiceConstructedAttributes();
+
     /**
      * Returns the value of the '<em><b>Service CD Cs</b></em>' containment reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceNS <em>Service NS</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * List of service CDCs added by this namespace. Is cumulative to those defined in namespaces this one needs (may not redefine "included" ones.).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Service CD Cs</em>' containment reference.
+     * @see #isSetServiceCDCs()
+     * @see #unsetServiceCDCs()
      * @see #setServiceCDCs(ServiceCDCs)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_ServiceCDCs()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs#getServiceNS
+     * @model opposite="serviceNS" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ServiceCDCs' namespace='##targetNamespace'"
      * @generated
      */
@@ -231,22 +384,47 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Service CD Cs</em>' containment reference.
+     * @see #isSetServiceCDCs()
+     * @see #unsetServiceCDCs()
      * @see #getServiceCDCs()
      * @generated
      */
     void setServiceCDCs( ServiceCDCs value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceCDCs <em>Service CD Cs</em>}' containment reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetServiceCDCs()
+     * @see #getServiceCDCs()
+     * @see #setServiceCDCs(ServiceCDCs)
+     * @generated
+     */
+    void unsetServiceCDCs();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceCDCs <em>Service CD Cs</em>}' containment reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service CD Cs</em>' containment reference is set.
+     * @see #unsetServiceCDCs()
+     * @see #getServiceCDCs()
+     * @see #setServiceCDCs(ServiceCDCs)
+     * @generated
+     */
+    boolean isSetServiceCDCs();
+
     /**
      * Returns the value of the '<em><b>Desc ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to a full description of this NS.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #setDescID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_DescID()
-     * @model extendedMetaData="kind='attribute' name='descID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='descID'"
      * @generated
      */
     String getDescID();
@@ -256,22 +434,46 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Desc ID</em>' attribute.
+     * @see #isSetDescID()
+     * @see #unsetDescID()
      * @see #getDescID()
      * @generated
      */
     void setDescID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getDescID <em>Desc ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    void unsetDescID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getDescID <em>Desc ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Desc ID</em>' attribute is set.
+     * @see #unsetDescID()
+     * @see #getDescID()
+     * @see #setDescID(String)
+     * @generated
+     */
+    boolean isSetDescID();
+
     /**
      * Returns the value of the '<em><b>Id</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Identifier of the namespace, e.g., "IEC 61850-7-4", "(Tr)IEC 61850-90-4".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #setId(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_Id()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='id'"
      * @generated
      */
@@ -282,20 +484,42 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #getId()
      * @generated
      */
     void setId( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getId <em>Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    void unsetId();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getId <em>Id</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Id</em>' attribute is set.
+     * @see #unsetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    boolean isSetId();
+
     /**
      * Returns the value of the '<em><b>Publication Stage</b></em>' attribute.
      * The default value is <code>"IS"</code>.
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The publication stage of the namespace, by default IS.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Publication Stage</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage
      * @see #isSetPublicationStage()
@@ -349,9 +573,6 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * The default value is <code>"A"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Revision of the namespace version, by default 'A'.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Revision</em>' attribute.
      * @see #isSetRevision()
      * @see #unsetRevision()
@@ -402,14 +623,12 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * Returns the value of the '<em><b>Uml Date</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * UTC Date and time of the UML version from which this namespace definition file was generated. Shall be provided if umlVersion is present. Format: YYYY-MM-DDThh:mm:ssZ, where: YYYY indicates the year, MM indicates the month, DD indicates the day, T indicates the start of the required time section, hh indicates the hour, mm indicates the minute, ss indicates the second, and Z the UTC time stamp indication.
-     * 
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Uml Date</em>' attribute.
+     * @see #isSetUmlDate()
+     * @see #unsetUmlDate()
      * @see #setUmlDate(XMLGregorianCalendar)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_UmlDate()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.DateTime"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.DateTime"
      *        extendedMetaData="kind='attribute' name='umlDate'"
      * @generated
      */
@@ -420,22 +639,47 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Uml Date</em>' attribute.
+     * @see #isSetUmlDate()
+     * @see #unsetUmlDate()
      * @see #getUmlDate()
      * @generated
      */
     void setUmlDate( XMLGregorianCalendar value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getUmlDate <em>Uml Date</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetUmlDate()
+     * @see #getUmlDate()
+     * @see #setUmlDate(XMLGregorianCalendar)
+     * @generated
+     */
+    void unsetUmlDate();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getUmlDate <em>Uml Date</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Uml Date</em>' attribute is set.
+     * @see #unsetUmlDate()
+     * @see #getUmlDate()
+     * @see #setUmlDate(XMLGregorianCalendar)
+     * @generated
+     */
+    boolean isSetUmlDate();
+
     /**
      * Returns the value of the '<em><b>Uml Version</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Version of UML from which this namespace definition file was generated from.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Uml Version</em>' attribute.
+     * @see #isSetUmlVersion()
+     * @see #unsetUmlVersion()
      * @see #setUmlVersion(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNS_UmlVersion()
-     * @model extendedMetaData="kind='attribute' name='umlVersion'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='umlVersion'"
      * @generated
      */
     String getUmlVersion();
@@ -445,9 +689,34 @@ public interface ServiceNS extends Copyrighted, NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Uml Version</em>' attribute.
+     * @see #isSetUmlVersion()
+     * @see #unsetUmlVersion()
      * @see #getUmlVersion()
      * @generated
      */
     void setUmlVersion( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getUmlVersion <em>Uml Version</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetUmlVersion()
+     * @see #getUmlVersion()
+     * @see #setUmlVersion(String)
+     * @generated
+     */
+    void unsetUmlVersion();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getUmlVersion <em>Uml Version</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Uml Version</em>' attribute is set.
+     * @see #unsetUmlVersion()
+     * @see #getUmlVersion()
+     * @see #setUmlVersion(String)
+     * @generated
+     */
+    boolean isSetUmlVersion();
+
 } // ServiceNS
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceNsUsage.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceNsUsage.java
index 82b543b..1903552 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceNsUsage.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceNsUsage.java
@@ -26,10 +26,6 @@ import org.eclipse.emf.common.util.EList;
  * A representation of the model object '<em><b>Service Ns Usage</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Describes the list of (domain) NS for which a ServiceNS is applicable.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -38,6 +34,7 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getId <em>Id</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getPublicationStage <em>Publication Stage</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getRevision <em>Revision</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getApplicableServiceNS <em>Applicable Service NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNsUsage()
@@ -48,30 +45,51 @@ public interface ServiceNsUsage extends NSDObjectWithVersionAndRelease {
     /**
      * Returns the value of the '<em><b>Applies To</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getServiceNsUsage <em>Service Ns Usage</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * References to namespaces this ServiceNS can be used with.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Applies To</em>' containment reference list.
+     * @see #isSetAppliesTo()
+     * @see #unsetAppliesTo()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNsUsage_AppliesTo()
-     * @model containment="true" required="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType#getServiceNsUsage
+     * @model opposite="serviceNsUsage" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='AppliesTo' namespace='##targetNamespace'"
      * @generated
      */
     EList< AppliesToType > getAppliesTo();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getAppliesTo <em>Applies To</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetAppliesTo()
+     * @see #getAppliesTo()
+     * @generated
+     */
+    void unsetAppliesTo();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getAppliesTo <em>Applies To</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Applies To</em>' containment reference list is set.
+     * @see #unsetAppliesTo()
+     * @see #getAppliesTo()
+     * @generated
+     */
+    boolean isSetAppliesTo();
+
     /**
      * Returns the value of the '<em><b>Id</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Identifier of the namespace, e.g., "IEC 61850-7-4", "(Tr)IEC 61850-90-4".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #setId(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNsUsage_Id()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='id'"
      * @generated
      */
@@ -82,20 +100,42 @@ public interface ServiceNsUsage extends NSDObjectWithVersionAndRelease {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Id</em>' attribute.
+     * @see #isSetId()
+     * @see #unsetId()
      * @see #getId()
      * @generated
      */
     void setId( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getId <em>Id</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    void unsetId();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getId <em>Id</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Id</em>' attribute is set.
+     * @see #unsetId()
+     * @see #getId()
+     * @see #setId(String)
+     * @generated
+     */
+    boolean isSetId();
+
     /**
      * Returns the value of the '<em><b>Publication Stage</b></em>' attribute.
      * The default value is <code>"IS"</code>.
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The publication stage of the namespace, by default IS.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Publication Stage</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage
      * @see #isSetPublicationStage()
@@ -149,9 +189,6 @@ public interface ServiceNsUsage extends NSDObjectWithVersionAndRelease {
      * The default value is <code>"A"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Revision of the namespace version, by default 'A'.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Revision</em>' attribute.
      * @see #isSetRevision()
      * @see #unsetRevision()
@@ -198,4 +235,32 @@ public interface ServiceNsUsage extends NSDObjectWithVersionAndRelease {
      */
     boolean isSetRevision();
 
+    /**
+     * Returns the value of the '<em><b>Applicable Service NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServiceNS#getServiceNsUsage <em>Service Ns Usage</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Applicable Service NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Applicable Service NS</em>' container reference.
+     * @see #setApplicableServiceNS(ApplicableServiceNS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceNsUsage_ApplicableServiceNS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServiceNS#getServiceNsUsage
+     * @model opposite="serviceNsUsage" unsettable="true" ordered="false"
+     * @generated
+     */
+    ApplicableServiceNS getApplicableServiceNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage#getApplicableServiceNS <em>Applicable Service NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Applicable Service NS</em>' container reference.
+     * @see #getApplicableServiceNS()
+     * @generated
+     */
+    void setApplicableServiceNS( ApplicableServiceNS value );
+
 } // ServiceNsUsage
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceParameter.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceParameter.java
index 6e4a36a..995e654 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceParameter.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceParameter.java
@@ -28,10 +28,6 @@ import org.eclipse.emf.common.util.Enumerator;
  * A representation of the model object '<em><b>Service Parameter</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of the service parameter for control services.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -42,6 +38,7 @@ import org.eclipse.emf.common.util.Enumerator;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getTypeKind <em>Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getCDC <em>CDC</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceParameter()
@@ -53,13 +50,12 @@ public interface ServiceParameter extends DocumentedClass {
      * Returns the value of the '<em><b>Default Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Default value for the data attribute. May only be defined for data attributes with typeKind="BASIC" or "ENUMERATED".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Default Value</em>' attribute.
+     * @see #isSetDefaultValue()
+     * @see #unsetDefaultValue()
      * @see #setDefaultValue(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceParameter_DefaultValue()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.NormalizedString"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.NormalizedString"
      *        extendedMetaData="kind='attribute' name='defaultValue'"
      * @generated
      */
@@ -70,22 +66,46 @@ public interface ServiceParameter extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Default Value</em>' attribute.
+     * @see #isSetDefaultValue()
+     * @see #unsetDefaultValue()
      * @see #getDefaultValue()
      * @generated
      */
     void setDefaultValue( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getDefaultValue <em>Default Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDefaultValue()
+     * @see #getDefaultValue()
+     * @see #setDefaultValue(String)
+     * @generated
+     */
+    void unsetDefaultValue();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getDefaultValue <em>Default Value</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Default Value</em>' attribute is set.
+     * @see #unsetDefaultValue()
+     * @see #getDefaultValue()
+     * @see #setDefaultValue(String)
+     * @generated
+     */
+    boolean isSetDefaultValue();
+
     /**
      * Returns the value of the '<em><b>Max Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Allowed maximal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind="BASIC" and corresponding to a number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Max Value</em>' attribute.
+     * @see #isSetMaxValue()
+     * @see #unsetMaxValue()
      * @see #setMaxValue(BigDecimal)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceParameter_MaxValue()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.Decimal"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Decimal"
      *        extendedMetaData="kind='attribute' name='maxValue'"
      * @generated
      */
@@ -96,22 +116,46 @@ public interface ServiceParameter extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Max Value</em>' attribute.
+     * @see #isSetMaxValue()
+     * @see #unsetMaxValue()
      * @see #getMaxValue()
      * @generated
      */
     void setMaxValue( BigDecimal value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getMaxValue <em>Max Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetMaxValue()
+     * @see #getMaxValue()
+     * @see #setMaxValue(BigDecimal)
+     * @generated
+     */
+    void unsetMaxValue();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getMaxValue <em>Max Value</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Max Value</em>' attribute is set.
+     * @see #unsetMaxValue()
+     * @see #getMaxValue()
+     * @see #setMaxValue(BigDecimal)
+     * @generated
+     */
+    boolean isSetMaxValue();
+
     /**
      * Returns the value of the '<em><b>Min Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Allowed minimal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind="BASIC" and corresponding to a number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Min Value</em>' attribute.
+     * @see #isSetMinValue()
+     * @see #unsetMinValue()
      * @see #setMinValue(BigDecimal)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceParameter_MinValue()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.Decimal"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Decimal"
      *        extendedMetaData="kind='attribute' name='minValue'"
      * @generated
      */
@@ -122,22 +166,46 @@ public interface ServiceParameter extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Min Value</em>' attribute.
+     * @see #isSetMinValue()
+     * @see #unsetMinValue()
      * @see #getMinValue()
      * @generated
      */
     void setMinValue( BigDecimal value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getMinValue <em>Min Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetMinValue()
+     * @see #getMinValue()
+     * @see #setMinValue(BigDecimal)
+     * @generated
+     */
+    void unsetMinValue();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getMinValue <em>Min Value</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Min Value</em>' attribute is set.
+     * @see #unsetMinValue()
+     * @see #getMinValue()
+     * @see #setMinValue(BigDecimal)
+     * @generated
+     */
+    boolean isSetMinValue();
+
     /**
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the data attribute.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceParameter_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -148,22 +216,47 @@ public interface ServiceParameter extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
     /**
      * Returns the value of the '<em><b>Type</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The type of the data attribute, e.g., the name of a basic type like INT32, the name of an enumeration of a constructed data attribute - depending on the sibling typeKind. If not provided, shall be defined by the "parent" element.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #setType(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceParameter_Type()
-     * @model extendedMetaData="kind='attribute' name='type'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='type'"
      * @generated
      */
     String getType();
@@ -173,19 +266,41 @@ public interface ServiceParameter extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #getType()
      * @generated
      */
     void setType( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getType <em>Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    void unsetType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getType <em>Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Type</em>' attribute is set.
+     * @see #unsetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    boolean isSetType();
+
     /**
      * Returns the value of the '<em><b>Type Kind</b></em>' attribute.
      * The default value is <code>"BASIC"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The kind of the data attribute's type. By  default, "BASIC".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type Kind</em>' attribute.
      * @see #isSetTypeKind()
      * @see #unsetTypeKind()
@@ -232,4 +347,32 @@ public interface ServiceParameter extends DocumentedClass {
      */
     boolean isSetTypeKind();
 
+    /**
+     * Returns the value of the '<em><b>CDC</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getServiceParameter <em>Service Parameter</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>CDC</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>CDC</em>' container reference.
+     * @see #setCDC(CDC)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceParameter_CDC()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getServiceParameter
+     * @model opposite="serviceParameter" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    CDC getCDC();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter#getCDC <em>CDC</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>CDC</em>' container reference.
+     * @see #getCDC()
+     * @generated
+     */
+    void setCDC( CDC value );
+
 } // ServiceParameter
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceType.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceType.java
index 863d97c..8d81723 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceType.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceType.java
@@ -31,6 +31,7 @@ import org.eclipse.emf.ecore.EObject;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType#getApplicableServices <em>Applicable Services</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceType()
@@ -53,7 +54,7 @@ public interface ServiceType extends EObject {
      * @see #unsetName()
      * @see #setName(ACSIServicesKind)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceType_Name()
-     * @model unsettable="true" required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -95,4 +96,32 @@ public interface ServiceType extends EObject {
      */
     boolean isSetName();
 
+    /**
+     * Returns the value of the '<em><b>Applicable Services</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getService <em>Service</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Applicable Services</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Applicable Services</em>' container reference.
+     * @see #setApplicableServices(ApplicableServices)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceType_ApplicableServices()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices#getService
+     * @model opposite="service" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ApplicableServices getApplicableServices();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType#getApplicableServices <em>Applicable Services</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Applicable Services</em>' container reference.
+     * @see #getApplicableServices()
+     * @generated
+     */
+    void setApplicableServices( ApplicableServices value );
+
 } // ServiceType
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceTypeRealization.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceTypeRealization.java
deleted file mode 100644
index 59508a7..0000000
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceTypeRealization.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/**
- *  Copyright (c) 2019 CentraleSupélec & EDF.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  This file is part of the RiseClipse tool
- *  
- *  Contributors:
- *      Computer Science Department, CentraleSupélec
- *      EDF R&D
- *  Contacts:
- *      dominique.marcadet@centralesupelec.fr
- *      aurelie.dehouck-neveu@edf.fr
- *  Web site:
- *      http://wdi.supelec.fr/software/RiseClipse/
- * 
- */
-package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
-
-import org.eclipse.emf.common.util.Enumerator;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Service Type Realization</b></em>'.
- * <!-- end-user-doc -->
- *
- * <!-- begin-model-doc -->
- * Definition of the realization of an abstract type as constructed attribute in the service namespace.
- * <!-- end-model-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getFc <em>Fc</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getName <em>Name</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCond <em>Pres Cond</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCondArgs <em>Pres Cond Args</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCondArgsID <em>Pres Cond Args ID</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getType <em>Type</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getTypeKind <em>Type Kind</em>}</li>
- * </ul>
- *
- * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealization()
- * @model extendedMetaData="name='tServiceTypeRealization' kind='empty'"
- * @generated
- */
-public interface ServiceTypeRealization extends EObject {
-    /**
-     * Returns the value of the '<em><b>Fc</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Functional constraint of the data attribute.
-     * <!-- end-model-doc -->
-     * @return the value of the '<em>Fc</em>' attribute.
-     * @see #setFc(String)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealization_Fc()
-     * @model required="true"
-     *        extendedMetaData="kind='attribute' name='fc'"
-     * @generated
-     */
-    String getFc();
-
-    /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getFc <em>Fc</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Fc</em>' attribute.
-     * @see #getFc()
-     * @generated
-     */
-    void setFc( String value );
-
-    /**
-     * Returns the value of the '<em><b>Name</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the data attribute.
-     * <!-- end-model-doc -->
-     * @return the value of the '<em>Name</em>' attribute.
-     * @see #setName(String)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealization_Name()
-     * @model required="true"
-     *        extendedMetaData="kind='attribute' name='name'"
-     * @generated
-     */
-    String getName();
-
-    /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getName <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Name</em>' attribute.
-     * @see #getName()
-     * @generated
-     */
-    void setName( String value );
-
-    /**
-     * Returns the value of the '<em><b>Pres Cond</b></em>' attribute.
-     * The default value is <code>"M"</code>.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Presence condition of the element. By default 'M' (mandatory).
-     * <!-- end-model-doc -->
-     * @return the value of the '<em>Pres Cond</em>' attribute.
-     * @see #isSetPresCond()
-     * @see #unsetPresCond()
-     * @see #setPresCond(String)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealization_PresCond()
-     * @model default="M" unsettable="true"
-     *        extendedMetaData="kind='attribute' name='presCond'"
-     * @generated
-     */
-    String getPresCond();
-
-    /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCond <em>Pres Cond</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Pres Cond</em>' attribute.
-     * @see #isSetPresCond()
-     * @see #unsetPresCond()
-     * @see #getPresCond()
-     * @generated
-     */
-    void setPresCond( String value );
-
-    /**
-     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCond <em>Pres Cond</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #isSetPresCond()
-     * @see #getPresCond()
-     * @see #setPresCond(String)
-     * @generated
-     */
-    void unsetPresCond();
-
-    /**
-     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCond <em>Pres Cond</em>}' attribute is set.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return whether the value of the '<em>Pres Cond</em>' attribute is set.
-     * @see #unsetPresCond()
-     * @see #getPresCond()
-     * @see #setPresCond(String)
-     * @generated
-     */
-    boolean isSetPresCond();
-
-    /**
-     * Returns the value of the '<em><b>Pres Cond Args</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition. Can be a sibling element or a group number.
-     * <!-- end-model-doc -->
-     * @return the value of the '<em>Pres Cond Args</em>' attribute.
-     * @see #setPresCondArgs(String)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealization_PresCondArgs()
-     * @model extendedMetaData="kind='attribute' name='presCondArgs'"
-     * @generated
-     */
-    String getPresCondArgs();
-
-    /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCondArgs <em>Pres Cond Args</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Pres Cond Args</em>' attribute.
-     * @see #getPresCondArgs()
-     * @generated
-     */
-    void setPresCondArgs( String value );
-
-    /**
-     * Returns the value of the '<em><b>Pres Cond Args ID</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition: a documentation identifier referring to some free text.
-     * <!-- end-model-doc -->
-     * @return the value of the '<em>Pres Cond Args ID</em>' attribute.
-     * @see #setPresCondArgsID(String)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealization_PresCondArgsID()
-     * @model extendedMetaData="kind='attribute' name='presCondArgsID'"
-     * @generated
-     */
-    String getPresCondArgsID();
-
-    /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Pres Cond Args ID</em>' attribute.
-     * @see #getPresCondArgsID()
-     * @generated
-     */
-    void setPresCondArgsID( String value );
-
-    /**
-     * Returns the value of the '<em><b>Type</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The type of the data attribute, e.g., the name of a basic type like INT32, the name of an enumeration of a constructed data attribute - depending on the sibling typeKind. If not provided, shall be defined by the "parent" element.
-     * <!-- end-model-doc -->
-     * @return the value of the '<em>Type</em>' attribute.
-     * @see #setType(String)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealization_Type()
-     * @model extendedMetaData="kind='attribute' name='type'"
-     * @generated
-     */
-    String getType();
-
-    /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getType <em>Type</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Type</em>' attribute.
-     * @see #getType()
-     * @generated
-     */
-    void setType( String value );
-
-    /**
-     * Returns the value of the '<em><b>Type Kind</b></em>' attribute.
-     * The default value is <code>"BASIC"</code>.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The kind of the data attribute's type. By  default, "BASIC".
-     * <!-- end-model-doc -->
-     * @return the value of the '<em>Type Kind</em>' attribute.
-     * @see #isSetTypeKind()
-     * @see #unsetTypeKind()
-     * @see #setTypeKind(Enumerator)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealization_TypeKind()
-     * @model default="BASIC" unsettable="true" dataType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.AttributeTypeKind"
-     *        extendedMetaData="kind='attribute' name='typeKind'"
-     * @generated
-     */
-    Enumerator getTypeKind();
-
-    /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getTypeKind <em>Type Kind</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Type Kind</em>' attribute.
-     * @see #isSetTypeKind()
-     * @see #unsetTypeKind()
-     * @see #getTypeKind()
-     * @generated
-     */
-    void setTypeKind( Enumerator value );
-
-    /**
-     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getTypeKind <em>Type Kind</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #isSetTypeKind()
-     * @see #getTypeKind()
-     * @see #setTypeKind(Enumerator)
-     * @generated
-     */
-    void unsetTypeKind();
-
-    /**
-     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization#getTypeKind <em>Type Kind</em>}' attribute is set.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return whether the value of the '<em>Type Kind</em>' attribute is set.
-     * @see #unsetTypeKind()
-     * @see #getTypeKind()
-     * @see #setTypeKind(Enumerator)
-     * @generated
-     */
-    boolean isSetTypeKind();
-
-} // ServiceTypeRealization
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceTypeRealizations.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceTypeRealizations.java
index 8dc3230..5c5ce0d 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceTypeRealizations.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/ServiceTypeRealizations.java
@@ -28,15 +28,12 @@ import org.eclipse.emf.ecore.EObject;
  * A representation of the model object '<em><b>Service Type Realizations</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * List of Service Type Realizations introduced by a namespace.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceTypeRealization <em>Service Type Realization</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealizations()
@@ -47,17 +44,67 @@ public interface ServiceTypeRealizations extends EObject {
     /**
      * Returns the value of the '<em><b>Service Type Realization</b></em>' containment reference list.
      * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getServiceTypeRealizations <em>Service Type Realizations</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Realization of an abstract type as constructed attribute in the service namespace.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Service Type Realization</em>' containment reference list.
+     * @see #isSetServiceTypeRealization()
+     * @see #unsetServiceTypeRealization()
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealizations_ServiceTypeRealization()
-     * @model containment="true"
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getServiceTypeRealizations
+     * @model opposite="serviceTypeRealizations" containment="true" unsettable="true" ordered="false"
      *        extendedMetaData="kind='element' name='ServiceTypeRealization' namespace='##targetNamespace'"
      * @generated
      */
     EList< ConstructedAttribute > getServiceTypeRealization();
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceTypeRealization <em>Service Type Realization</em>}' containment reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetServiceTypeRealization()
+     * @see #getServiceTypeRealization()
+     * @generated
+     */
+    void unsetServiceTypeRealization();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceTypeRealization <em>Service Type Realization</em>}' containment reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Service Type Realization</em>' containment reference list is set.
+     * @see #unsetServiceTypeRealization()
+     * @see #getServiceTypeRealization()
+     * @generated
+     */
+    boolean isSetServiceTypeRealization();
+
+    /**
+     * Returns the value of the '<em><b>Service NS</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceTypeRealizations <em>Service Type Realizations</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Service NS</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Service NS</em>' container reference.
+     * @see #setServiceNS(ServiceNS)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getServiceTypeRealizations_ServiceNS()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS#getServiceTypeRealizations
+     * @model opposite="serviceTypeRealizations" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ServiceNS getServiceNS();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations#getServiceNS <em>Service NS</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Service NS</em>' container reference.
+     * @see #getServiceNS()
+     * @generated
+     */
+    void setServiceNS( ServiceNS value );
+
 } // ServiceTypeRealizations
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java
index d52fa1d..741bbf2 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java
@@ -28,10 +28,6 @@ import org.eclipse.emf.common.util.Enumerator;
  * A representation of the model object '<em><b>Sub Data Attribute</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a Sub Data Attribute (within a constructed data attribute).
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -49,6 +45,7 @@ import org.eclipse.emf.common.util.Enumerator;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getSizeAttribute <em>Size Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getTypeKind <em>Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getConstructedAttribute <em>Constructed Attribute</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute()
@@ -60,13 +57,12 @@ public interface SubDataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Default Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Default value for the data attribute. May only be defined for data attributes with typeKind="BASIC" or "ENUMERATED".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Default Value</em>' attribute.
+     * @see #isSetDefaultValue()
+     * @see #unsetDefaultValue()
      * @see #setDefaultValue(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute_DefaultValue()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.NormalizedString"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.NormalizedString"
      *        extendedMetaData="kind='attribute' name='defaultValue'"
      * @generated
      */
@@ -77,19 +73,41 @@ public interface SubDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Default Value</em>' attribute.
+     * @see #isSetDefaultValue()
+     * @see #unsetDefaultValue()
      * @see #getDefaultValue()
      * @generated
      */
     void setDefaultValue( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getDefaultValue <em>Default Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetDefaultValue()
+     * @see #getDefaultValue()
+     * @see #setDefaultValue(String)
+     * @generated
+     */
+    void unsetDefaultValue();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getDefaultValue <em>Default Value</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Default Value</em>' attribute is set.
+     * @see #unsetDefaultValue()
+     * @see #getDefaultValue()
+     * @see #setDefaultValue(String)
+     * @generated
+     */
+    boolean isSetDefaultValue();
+
     /**
      * Returns the value of the '<em><b>Is Array</b></em>' attribute.
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether the element is an array. By default, not an array.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Is Array</em>' attribute.
      * @see #isSetIsArray()
      * @see #unsetIsArray()
@@ -140,14 +158,13 @@ public interface SubDataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Max Index Attribute</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the Attribute holding the maximal index of the array.
-     * Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Max Index Attribute</em>' attribute.
+     * @see #isSetMaxIndexAttribute()
+     * @see #unsetMaxIndexAttribute()
      * @see #setMaxIndexAttribute(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute_MaxIndexAttribute()
-     * @model extendedMetaData="kind='attribute' name='maxIndexAttribute'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='maxIndexAttribute'"
      * @generated
      */
     String getMaxIndexAttribute();
@@ -157,22 +174,46 @@ public interface SubDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Max Index Attribute</em>' attribute.
+     * @see #isSetMaxIndexAttribute()
+     * @see #unsetMaxIndexAttribute()
      * @see #getMaxIndexAttribute()
      * @generated
      */
     void setMaxIndexAttribute( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getMaxIndexAttribute <em>Max Index Attribute</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetMaxIndexAttribute()
+     * @see #getMaxIndexAttribute()
+     * @see #setMaxIndexAttribute(String)
+     * @generated
+     */
+    void unsetMaxIndexAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getMaxIndexAttribute <em>Max Index Attribute</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Max Index Attribute</em>' attribute is set.
+     * @see #unsetMaxIndexAttribute()
+     * @see #getMaxIndexAttribute()
+     * @see #setMaxIndexAttribute(String)
+     * @generated
+     */
+    boolean isSetMaxIndexAttribute();
+
     /**
      * Returns the value of the '<em><b>Max Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Allowed maximal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind="BASIC" and corresponding to a number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Max Value</em>' attribute.
+     * @see #isSetMaxValue()
+     * @see #unsetMaxValue()
      * @see #setMaxValue(BigDecimal)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute_MaxValue()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.Decimal"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Decimal"
      *        extendedMetaData="kind='attribute' name='maxValue'"
      * @generated
      */
@@ -183,21 +224,41 @@ public interface SubDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Max Value</em>' attribute.
+     * @see #isSetMaxValue()
+     * @see #unsetMaxValue()
      * @see #getMaxValue()
      * @generated
      */
     void setMaxValue( BigDecimal value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getMaxValue <em>Max Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetMaxValue()
+     * @see #getMaxValue()
+     * @see #setMaxValue(BigDecimal)
+     * @generated
+     */
+    void unsetMaxValue();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getMaxValue <em>Max Value</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Max Value</em>' attribute is set.
+     * @see #unsetMaxValue()
+     * @see #getMaxValue()
+     * @see #setMaxValue(BigDecimal)
+     * @generated
+     */
+    boolean isSetMaxValue();
+
     /**
      * Returns the value of the '<em><b>Min Index</b></em>' attribute.
      * The default value is <code>"0"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Lowest index of the array.
-     * Is relevant information if and only if isArray=true.
-     * By default 0.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Min Index</em>' attribute.
      * @see #isSetMinIndex()
      * @see #unsetMinIndex()
@@ -248,13 +309,12 @@ public interface SubDataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Min Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Allowed minimal value (inclusive) for the data attribute. If not provided the minimal value according to the type is allowed. May only be defined for data attributes with typeKind="BASIC" and corresponding to a number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Min Value</em>' attribute.
+     * @see #isSetMinValue()
+     * @see #unsetMinValue()
      * @see #setMinValue(BigDecimal)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute_MinValue()
-     * @model dataType="org.eclipse.emf.ecore.xml.type.Decimal"
+     * @model unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Decimal"
      *        extendedMetaData="kind='attribute' name='minValue'"
      * @generated
      */
@@ -265,22 +325,46 @@ public interface SubDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Min Value</em>' attribute.
+     * @see #isSetMinValue()
+     * @see #unsetMinValue()
      * @see #getMinValue()
      * @generated
      */
     void setMinValue( BigDecimal value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getMinValue <em>Min Value</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetMinValue()
+     * @see #getMinValue()
+     * @see #setMinValue(BigDecimal)
+     * @generated
+     */
+    void unsetMinValue();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getMinValue <em>Min Value</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Min Value</em>' attribute is set.
+     * @see #unsetMinValue()
+     * @see #getMinValue()
+     * @see #setMinValue(BigDecimal)
+     * @generated
+     */
+    boolean isSetMinValue();
+
     /**
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the data attribute.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -291,19 +375,41 @@ public interface SubDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
     /**
      * Returns the value of the '<em><b>Pres Cond</b></em>' attribute.
      * The default value is <code>"M"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Presence condition of the element. By default 'M' (mandatory).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond</em>' attribute.
      * @see #isSetPresCond()
      * @see #unsetPresCond()
@@ -354,13 +460,13 @@ public interface SubDataAttribute extends DocumentedClass {
      * Returns the value of the '<em><b>Pres Cond Args</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition. Can be a sibling element or a group number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond Args</em>' attribute.
+     * @see #isSetPresCondArgs()
+     * @see #unsetPresCondArgs()
      * @see #setPresCondArgs(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute_PresCondArgs()
-     * @model extendedMetaData="kind='attribute' name='presCondArgs'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='presCondArgs'"
      * @generated
      */
     String getPresCondArgs();
@@ -370,22 +476,47 @@ public interface SubDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Pres Cond Args</em>' attribute.
+     * @see #isSetPresCondArgs()
+     * @see #unsetPresCondArgs()
      * @see #getPresCondArgs()
      * @generated
      */
     void setPresCondArgs( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getPresCondArgs <em>Pres Cond Args</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresCondArgs()
+     * @see #getPresCondArgs()
+     * @see #setPresCondArgs(String)
+     * @generated
+     */
+    void unsetPresCondArgs();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getPresCondArgs <em>Pres Cond Args</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Pres Cond Args</em>' attribute is set.
+     * @see #unsetPresCondArgs()
+     * @see #getPresCondArgs()
+     * @see #setPresCondArgs(String)
+     * @generated
+     */
+    boolean isSetPresCondArgs();
+
     /**
      * Returns the value of the '<em><b>Pres Cond Args ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition: a documentation identifier referring to some free text.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond Args ID</em>' attribute.
+     * @see #isSetPresCondArgsID()
+     * @see #unsetPresCondArgsID()
      * @see #setPresCondArgsID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute_PresCondArgsID()
-     * @model extendedMetaData="kind='attribute' name='presCondArgsID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='presCondArgsID'"
      * @generated
      */
     String getPresCondArgsID();
@@ -395,23 +526,47 @@ public interface SubDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Pres Cond Args ID</em>' attribute.
+     * @see #isSetPresCondArgsID()
+     * @see #unsetPresCondArgsID()
      * @see #getPresCondArgsID()
      * @generated
      */
     void setPresCondArgsID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresCondArgsID()
+     * @see #getPresCondArgsID()
+     * @see #setPresCondArgsID(String)
+     * @generated
+     */
+    void unsetPresCondArgsID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Pres Cond Args ID</em>' attribute is set.
+     * @see #unsetPresCondArgsID()
+     * @see #getPresCondArgsID()
+     * @see #setPresCondArgsID(String)
+     * @generated
+     */
+    boolean isSetPresCondArgsID();
+
     /**
      * Returns the value of the '<em><b>Size Attribute</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Sibling data attribute name holding the size of the array.
-     * Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Size Attribute</em>' attribute.
+     * @see #isSetSizeAttribute()
+     * @see #unsetSizeAttribute()
      * @see #setSizeAttribute(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute_SizeAttribute()
-     * @model extendedMetaData="kind='attribute' name='sizeAttribute'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='sizeAttribute'"
      * @generated
      */
     String getSizeAttribute();
@@ -421,22 +576,47 @@ public interface SubDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Size Attribute</em>' attribute.
+     * @see #isSetSizeAttribute()
+     * @see #unsetSizeAttribute()
      * @see #getSizeAttribute()
      * @generated
      */
     void setSizeAttribute( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getSizeAttribute <em>Size Attribute</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetSizeAttribute()
+     * @see #getSizeAttribute()
+     * @see #setSizeAttribute(String)
+     * @generated
+     */
+    void unsetSizeAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getSizeAttribute <em>Size Attribute</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Size Attribute</em>' attribute is set.
+     * @see #unsetSizeAttribute()
+     * @see #getSizeAttribute()
+     * @see #setSizeAttribute(String)
+     * @generated
+     */
+    boolean isSetSizeAttribute();
+
     /**
      * Returns the value of the '<em><b>Type</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The type of the data attribute, e.g., the name of a basic type like INT32, the name of an enumeration of a constructed data attribute - depending on the sibling typeKind. If not provided, shall be defined by the "parent" element.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #setType(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute_Type()
-     * @model extendedMetaData="kind='attribute' name='type'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='type'"
      * @generated
      */
     String getType();
@@ -446,19 +626,41 @@ public interface SubDataAttribute extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #getType()
      * @generated
      */
     void setType( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getType <em>Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    void unsetType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getType <em>Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Type</em>' attribute is set.
+     * @see #unsetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    boolean isSetType();
+
     /**
      * Returns the value of the '<em><b>Type Kind</b></em>' attribute.
      * The default value is <code>"BASIC"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The kind of the data attribute's type. By  default, "BASIC".
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type Kind</em>' attribute.
      * @see #isSetTypeKind()
      * @see #unsetTypeKind()
@@ -505,4 +707,32 @@ public interface SubDataAttribute extends DocumentedClass {
      */
     boolean isSetTypeKind();
 
+    /**
+     * Returns the value of the '<em><b>Constructed Attribute</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getSubDataAttribute <em>Sub Data Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Constructed Attribute</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Constructed Attribute</em>' container reference.
+     * @see #setConstructedAttribute(ConstructedAttribute)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute_ConstructedAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getSubDataAttribute
+     * @model opposite="subDataAttribute" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    ConstructedAttribute getConstructedAttribute();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getConstructedAttribute <em>Constructed Attribute</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Constructed Attribute</em>' container reference.
+     * @see #getConstructedAttribute()
+     * @generated
+     */
+    void setConstructedAttribute( ConstructedAttribute value );
+
 } // SubDataAttribute
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java
index b445a68..7164838 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java
@@ -24,10 +24,6 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  * A representation of the model object '<em><b>Sub Data Object</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * Definition of a Sub-Data Object.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -43,6 +39,7 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getUnderlyingType <em>Underlying Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getUnderlyingTypeKind <em>Underlying Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getCDC <em>CDC</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject()
@@ -55,9 +52,6 @@ public interface SubDataObject extends DocumentedClass {
      * The default value is <code>"false"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Flag indicating whether the element is an array. By default, not an array.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Is Array</em>' attribute.
      * @see #isSetIsArray()
      * @see #unsetIsArray()
@@ -108,14 +102,13 @@ public interface SubDataObject extends DocumentedClass {
      * Returns the value of the '<em><b>Max Index Attribute</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the Attribute holding the maximal index of the array.
-     * Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Max Index Attribute</em>' attribute.
+     * @see #isSetMaxIndexAttribute()
+     * @see #unsetMaxIndexAttribute()
      * @see #setMaxIndexAttribute(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_MaxIndexAttribute()
-     * @model extendedMetaData="kind='attribute' name='maxIndexAttribute'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='maxIndexAttribute'"
      * @generated
      */
     String getMaxIndexAttribute();
@@ -125,21 +118,41 @@ public interface SubDataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Max Index Attribute</em>' attribute.
+     * @see #isSetMaxIndexAttribute()
+     * @see #unsetMaxIndexAttribute()
      * @see #getMaxIndexAttribute()
      * @generated
      */
     void setMaxIndexAttribute( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getMaxIndexAttribute <em>Max Index Attribute</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetMaxIndexAttribute()
+     * @see #getMaxIndexAttribute()
+     * @see #setMaxIndexAttribute(String)
+     * @generated
+     */
+    void unsetMaxIndexAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getMaxIndexAttribute <em>Max Index Attribute</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Max Index Attribute</em>' attribute is set.
+     * @see #unsetMaxIndexAttribute()
+     * @see #getMaxIndexAttribute()
+     * @see #setMaxIndexAttribute(String)
+     * @generated
+     */
+    boolean isSetMaxIndexAttribute();
+
     /**
      * Returns the value of the '<em><b>Min Index</b></em>' attribute.
      * The default value is <code>"0"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Lowest index of the array.
-     * Is relevant information if and only if isArray=true.
-     * By default 0.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Min Index</em>' attribute.
      * @see #isSetMinIndex()
      * @see #unsetMinIndex()
@@ -190,13 +203,12 @@ public interface SubDataObject extends DocumentedClass {
      * Returns the value of the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Name of the Sub-Data Object.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #setName(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_Name()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='name'"
      * @generated
      */
@@ -207,19 +219,41 @@ public interface SubDataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Name</em>' attribute.
+     * @see #isSetName()
+     * @see #unsetName()
      * @see #getName()
      * @generated
      */
     void setName( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getName <em>Name</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    void unsetName();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getName <em>Name</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Name</em>' attribute is set.
+     * @see #unsetName()
+     * @see #getName()
+     * @see #setName(String)
+     * @generated
+     */
+    boolean isSetName();
+
     /**
      * Returns the value of the '<em><b>Pres Cond</b></em>' attribute.
      * The default value is <code>"M"</code>.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Presence condition of the element. By default 'M' (mandatory).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond</em>' attribute.
      * @see #isSetPresCond()
      * @see #unsetPresCond()
@@ -270,13 +304,13 @@ public interface SubDataObject extends DocumentedClass {
      * Returns the value of the '<em><b>Pres Cond Args</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition. Can be a sibling element or a group number.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond Args</em>' attribute.
+     * @see #isSetPresCondArgs()
+     * @see #unsetPresCondArgs()
      * @see #setPresCondArgs(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_PresCondArgs()
-     * @model extendedMetaData="kind='attribute' name='presCondArgs'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='presCondArgs'"
      * @generated
      */
     String getPresCondArgs();
@@ -286,22 +320,47 @@ public interface SubDataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Pres Cond Args</em>' attribute.
+     * @see #isSetPresCondArgs()
+     * @see #unsetPresCondArgs()
      * @see #getPresCondArgs()
      * @generated
      */
     void setPresCondArgs( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getPresCondArgs <em>Pres Cond Args</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresCondArgs()
+     * @see #getPresCondArgs()
+     * @see #setPresCondArgs(String)
+     * @generated
+     */
+    void unsetPresCondArgs();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getPresCondArgs <em>Pres Cond Args</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Pres Cond Args</em>' attribute is set.
+     * @see #unsetPresCondArgs()
+     * @see #getPresCondArgs()
+     * @see #setPresCondArgs(String)
+     * @generated
+     */
+    boolean isSetPresCondArgs();
+
     /**
      * Returns the value of the '<em><b>Pres Cond Args ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Optional argument to the presence condition: a documentation identifier referring to some free text.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Pres Cond Args ID</em>' attribute.
+     * @see #isSetPresCondArgsID()
+     * @see #unsetPresCondArgsID()
      * @see #setPresCondArgsID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_PresCondArgsID()
-     * @model extendedMetaData="kind='attribute' name='presCondArgsID'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='presCondArgsID'"
      * @generated
      */
     String getPresCondArgsID();
@@ -311,23 +370,47 @@ public interface SubDataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Pres Cond Args ID</em>' attribute.
+     * @see #isSetPresCondArgsID()
+     * @see #unsetPresCondArgsID()
      * @see #getPresCondArgsID()
      * @generated
      */
     void setPresCondArgsID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetPresCondArgsID()
+     * @see #getPresCondArgsID()
+     * @see #setPresCondArgsID(String)
+     * @generated
+     */
+    void unsetPresCondArgsID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getPresCondArgsID <em>Pres Cond Args ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Pres Cond Args ID</em>' attribute is set.
+     * @see #unsetPresCondArgsID()
+     * @see #getPresCondArgsID()
+     * @see #setPresCondArgsID(String)
+     * @generated
+     */
+    boolean isSetPresCondArgsID();
+
     /**
      * Returns the value of the '<em><b>Size Attribute</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Sibling data attribute name holding the size of the array.
-     * Is relevant information if and only if isArray=true. One and only one of sizeAttribute and maxIndexAttribute shall be used.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Size Attribute</em>' attribute.
+     * @see #isSetSizeAttribute()
+     * @see #unsetSizeAttribute()
      * @see #setSizeAttribute(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_SizeAttribute()
-     * @model extendedMetaData="kind='attribute' name='sizeAttribute'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='sizeAttribute'"
      * @generated
      */
     String getSizeAttribute();
@@ -337,22 +420,46 @@ public interface SubDataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Size Attribute</em>' attribute.
+     * @see #isSetSizeAttribute()
+     * @see #unsetSizeAttribute()
      * @see #getSizeAttribute()
      * @generated
      */
     void setSizeAttribute( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getSizeAttribute <em>Size Attribute</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetSizeAttribute()
+     * @see #getSizeAttribute()
+     * @see #setSizeAttribute(String)
+     * @generated
+     */
+    void unsetSizeAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getSizeAttribute <em>Size Attribute</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Size Attribute</em>' attribute is set.
+     * @see #unsetSizeAttribute()
+     * @see #getSizeAttribute()
+     * @see #setSizeAttribute(String)
+     * @generated
+     */
+    boolean isSetSizeAttribute();
+
     /**
      * Returns the value of the '<em><b>Type</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Type of the SubDataObject, i.e., its CDC.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #setType(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_Type()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='type'"
      * @generated
      */
@@ -363,22 +470,47 @@ public interface SubDataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Type</em>' attribute.
+     * @see #isSetType()
+     * @see #unsetType()
      * @see #getType()
      * @generated
      */
     void setType( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getType <em>Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    void unsetType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getType <em>Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Type</em>' attribute is set.
+     * @see #unsetType()
+     * @see #getType()
+     * @see #setType(String)
+     * @generated
+     */
+    boolean isSetType();
+
     /**
      * Returns the value of the '<em><b>Underlying Type</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Type to be used for type-open CDCs, e.g., enumeration to be used for enumeration-based CDCs (e.g., ENS, ENC, ENG).
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Underlying Type</em>' attribute.
+     * @see #isSetUnderlyingType()
+     * @see #unsetUnderlyingType()
      * @see #setUnderlyingType(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_UnderlyingType()
-     * @model extendedMetaData="kind='attribute' name='underlyingType'"
+     * @model unsettable="true"
+     *        extendedMetaData="kind='attribute' name='underlyingType'"
      * @generated
      */
     String getUnderlyingType();
@@ -388,19 +520,41 @@ public interface SubDataObject extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Underlying Type</em>' attribute.
+     * @see #isSetUnderlyingType()
+     * @see #unsetUnderlyingType()
      * @see #getUnderlyingType()
      * @generated
      */
     void setUnderlyingType( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getUnderlyingType <em>Underlying Type</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetUnderlyingType()
+     * @see #getUnderlyingType()
+     * @see #setUnderlyingType(String)
+     * @generated
+     */
+    void unsetUnderlyingType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getUnderlyingType <em>Underlying Type</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Underlying Type</em>' attribute is set.
+     * @see #unsetUnderlyingType()
+     * @see #getUnderlyingType()
+     * @see #setUnderlyingType(String)
+     * @generated
+     */
+    boolean isSetUnderlyingType();
+
     /**
      * Returns the value of the '<em><b>Underlying Type Kind</b></em>' attribute.
      * The literals are from the enumeration {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind}.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * The typeKind to be used for all "undefined" attributes of the CDC of this DataObject.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Underlying Type Kind</em>' attribute.
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind
      * @see #isSetUnderlyingTypeKind()
@@ -449,4 +603,32 @@ public interface SubDataObject extends DocumentedClass {
      */
     boolean isSetUnderlyingTypeKind();
 
+    /**
+     * Returns the value of the '<em><b>CDC</b></em>' container reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getSubDataObject <em>Sub Data Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>CDC</em>' container reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>CDC</em>' container reference.
+     * @see #setCDC(CDC)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_CDC()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getSubDataObject
+     * @model opposite="subDataObject" resolveProxies="false" unsettable="true" ordered="false"
+     * @generated
+     */
+    CDC getCDC();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getCDC <em>CDC</em>}' container reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>CDC</em>' container reference.
+     * @see #getCDC()
+     * @generated
+     */
+    void setCDC( CDC value );
+
 } // SubDataObject
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/TitledClass.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/TitledClass.java
index bfa5910..5689e87 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/TitledClass.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/TitledClass.java
@@ -24,10 +24,6 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  * A representation of the model object '<em><b>Titled Class</b></em>'.
  * <!-- end-user-doc -->
  *
- * <!-- begin-model-doc -->
- * A tDocumentedClass with title.
- * <!-- end-model-doc -->
- *
  * <p>
  * The following features are supported:
  * </p>
@@ -44,13 +40,12 @@ public interface TitledClass extends DocumentedClass {
      * Returns the value of the '<em><b>Title ID</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * <!-- begin-model-doc -->
-     * Documentation identifier referring to the title (alias) of this object.
-     * <!-- end-model-doc -->
      * @return the value of the '<em>Title ID</em>' attribute.
+     * @see #isSetTitleID()
+     * @see #unsetTitleID()
      * @see #setTitleID(String)
      * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getTitledClass_TitleID()
-     * @model required="true"
+     * @model unsettable="true"
      *        extendedMetaData="kind='attribute' name='titleID'"
      * @generated
      */
@@ -61,9 +56,34 @@ public interface TitledClass extends DocumentedClass {
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @param value the new value of the '<em>Title ID</em>' attribute.
+     * @see #isSetTitleID()
+     * @see #unsetTitleID()
      * @see #getTitleID()
      * @generated
      */
     void setTitleID( String value );
 
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.TitledClass#getTitleID <em>Title ID</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetTitleID()
+     * @see #getTitleID()
+     * @see #setTitleID(String)
+     * @generated
+     */
+    void unsetTitleID();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.TitledClass#getTitleID <em>Title ID</em>}' attribute is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Title ID</em>' attribute is set.
+     * @see #unsetTitleID()
+     * @see #getTitleID()
+     * @see #setTitleID(String)
+     * @generated
+     */
+    boolean isSetTitleID();
+
 } // TitledClass
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/UndefinedAttributeTypeKind.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/UndefinedAttributeTypeKind.java
index a6cc91a..d191004 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/UndefinedAttributeTypeKind.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/UndefinedAttributeTypeKind.java
@@ -30,9 +30,6 @@ import org.eclipse.emf.common.util.Enumerator;
  * A representation of the literals of the enumeration '<em><b>Undefined Attribute Type Kind</b></em>',
  * and utility methods for working with them.
  * <!-- end-user-doc -->
- * <!-- begin-model-doc -->
- * Type kind for a data attribute which has its type "undefined".
- * <!-- end-model-doc -->
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getUndefinedAttributeTypeKind()
  * @model extendedMetaData="name='tUndefinedAttributeTypeKind'"
  * @generated
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbbreviationImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbbreviationImpl.java
index c6f37ca..c01a2ea 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbbreviationImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbbreviationImpl.java
@@ -20,14 +20,18 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 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.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -39,6 +43,7 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbbreviationImpl#getDescID <em>Desc ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbbreviationImpl#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbbreviationImpl#getAbbreviations <em>Abbreviations</em>}</li>
  * </ul>
  *
  * @generated
@@ -64,6 +69,15 @@ public class AbbreviationImpl extends MinimalEObjectImpl.Container implements Ab
      */
     protected String descID = DESC_ID_EDEFAULT;
 
+    /**
+     * This is true if the Desc ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean descIDESet;
+
     /**
      * The default value of the '{@link #getName() <em>Name</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -84,6 +98,15 @@ public class AbbreviationImpl extends MinimalEObjectImpl.Container implements Ab
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -122,8 +145,35 @@ public class AbbreviationImpl extends MinimalEObjectImpl.Container implements Ab
     public void setDescID( String newDescID ) {
         String oldDescID = descID;
         descID = newDescID;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.ABBREVIATION__DESC_ID, oldDescID, descID ) );
+        boolean oldDescIDESet = descIDESet;
+        descIDESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.ABBREVIATION__DESC_ID, oldDescID, descID, !oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDescID() {
+        String oldDescID = descID;
+        boolean oldDescIDESet = descIDESet;
+        descID = DESC_ID_EDEFAULT;
+        descIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.ABBREVIATION__DESC_ID, oldDescID, DESC_ID_EDEFAULT, oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDescID() {
+        return descIDESet;
     }
 
     /**
@@ -145,8 +195,122 @@ public class AbbreviationImpl extends MinimalEObjectImpl.Container implements Ab
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.ABBREVIATION__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.ABBREVIATION__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.ABBREVIATION__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Abbreviations getAbbreviations() {
+        if( eContainerFeatureID() != NsdPackage.ABBREVIATION__ABBREVIATIONS ) return null;
+        return ( Abbreviations ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetAbbreviations( Abbreviations newAbbreviations, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newAbbreviations, NsdPackage.ABBREVIATION__ABBREVIATIONS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setAbbreviations( Abbreviations newAbbreviations ) {
+        if( newAbbreviations != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.ABBREVIATION__ABBREVIATIONS && newAbbreviations != null ) ) {
+            if( EcoreUtil.isAncestor( this, newAbbreviations ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newAbbreviations != null ) msgs = ( ( InternalEObject ) newAbbreviations ).eInverseAdd( this,
+                    NsdPackage.ABBREVIATIONS__ABBREVIATION, Abbreviations.class, msgs );
+            msgs = basicSetAbbreviations( newAbbreviations, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.ABBREVIATION__ABBREVIATIONS, newAbbreviations, newAbbreviations ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.ABBREVIATION__ABBREVIATIONS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetAbbreviations( ( Abbreviations ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.ABBREVIATION__ABBREVIATIONS:
+            return basicSetAbbreviations( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.ABBREVIATION__ABBREVIATIONS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.ABBREVIATIONS__ABBREVIATION,
+                    Abbreviations.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
     }
 
     /**
@@ -161,6 +325,8 @@ public class AbbreviationImpl extends MinimalEObjectImpl.Container implements Ab
             return getDescID();
         case NsdPackage.ABBREVIATION__NAME:
             return getName();
+        case NsdPackage.ABBREVIATION__ABBREVIATIONS:
+            return getAbbreviations();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -179,6 +345,9 @@ public class AbbreviationImpl extends MinimalEObjectImpl.Container implements Ab
         case NsdPackage.ABBREVIATION__NAME:
             setName( ( String ) newValue );
             return;
+        case NsdPackage.ABBREVIATION__ABBREVIATIONS:
+            setAbbreviations( ( Abbreviations ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -192,10 +361,13 @@ public class AbbreviationImpl extends MinimalEObjectImpl.Container implements Ab
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ABBREVIATION__DESC_ID:
-            setDescID( DESC_ID_EDEFAULT );
+            unsetDescID();
             return;
         case NsdPackage.ABBREVIATION__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
+            return;
+        case NsdPackage.ABBREVIATION__ABBREVIATIONS:
+            setAbbreviations( ( Abbreviations ) null );
             return;
         }
         super.eUnset( featureID );
@@ -210,9 +382,11 @@ public class AbbreviationImpl extends MinimalEObjectImpl.Container implements Ab
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ABBREVIATION__DESC_ID:
-            return DESC_ID_EDEFAULT == null ? descID != null : !DESC_ID_EDEFAULT.equals( descID );
+            return isSetDescID();
         case NsdPackage.ABBREVIATION__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
+        case NsdPackage.ABBREVIATION__ABBREVIATIONS:
+            return getAbbreviations() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -228,9 +402,15 @@ public class AbbreviationImpl extends MinimalEObjectImpl.Container implements Ab
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (descID: " );
-        result.append( descID );
+        if( descIDESet )
+            result.append( descID );
+        else
+            result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbbreviationsImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbbreviationsImpl.java
index 58dc572..44f3394 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbbreviationsImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbbreviationsImpl.java
@@ -21,10 +21,13 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviation;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS;
 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;
@@ -32,9 +35,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -46,6 +50,8 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbbreviationsImpl#getAbbreviation <em>Abbreviation</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbbreviationsImpl#getNS <em>NS</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbbreviationsImpl#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -88,12 +94,140 @@ public class AbbreviationsImpl extends MinimalEObjectImpl.Container implements A
     @Override
     public EList< Abbreviation > getAbbreviation() {
         if( abbreviation == null ) {
-            abbreviation = new EObjectContainmentEList< Abbreviation >( Abbreviation.class, this,
-                    NsdPackage.ABBREVIATIONS__ABBREVIATION );
+            abbreviation = new EObjectContainmentWithInverseEList.Unsettable< Abbreviation >( Abbreviation.class, this,
+                    NsdPackage.ABBREVIATIONS__ABBREVIATION, NsdPackage.ABBREVIATION__ABBREVIATIONS );
         }
         return abbreviation;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetAbbreviation() {
+        if( abbreviation != null ) ( ( InternalEList.Unsettable< ? > ) abbreviation ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetAbbreviation() {
+        return abbreviation != null && ( ( InternalEList.Unsettable< ? > ) abbreviation ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NS getNS() {
+        if( eContainerFeatureID() != NsdPackage.ABBREVIATIONS__NS ) return null;
+        return ( NS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNS( NS newNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNS, NsdPackage.ABBREVIATIONS__NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNS( NS newNS ) {
+        if( newNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.ABBREVIATIONS__NS && newNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNS != null )
+                msgs = ( ( InternalEObject ) newNS ).eInverseAdd( this, NsdPackage.NS__ABBREVIATIONS, NS.class, msgs );
+            msgs = basicSetNS( newNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.ABBREVIATIONS__NS, newNS, newNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceNS getServiceNS() {
+        if( eContainerFeatureID() != NsdPackage.ABBREVIATIONS__SERVICE_NS ) return null;
+        return ( ServiceNS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceNS( ServiceNS newServiceNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceNS, NsdPackage.ABBREVIATIONS__SERVICE_NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceNS( ServiceNS newServiceNS ) {
+        if( newServiceNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.ABBREVIATIONS__SERVICE_NS && newServiceNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceNS != null ) msgs = ( ( InternalEObject ) newServiceNS ).eInverseAdd( this,
+                    NsdPackage.SERVICE_NS__ABBREVIATIONS, ServiceNS.class, msgs );
+            msgs = basicSetServiceNS( newServiceNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.ABBREVIATIONS__SERVICE_NS, newServiceNS, newServiceNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.ABBREVIATIONS__ABBREVIATION:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getAbbreviation() ).basicAdd( otherEnd,
+                    msgs );
+        case NsdPackage.ABBREVIATIONS__NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNS( ( NS ) otherEnd, msgs );
+        case NsdPackage.ABBREVIATIONS__SERVICE_NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceNS( ( ServiceNS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -104,10 +238,31 @@ public class AbbreviationsImpl extends MinimalEObjectImpl.Container implements A
         switch( featureID ) {
         case NsdPackage.ABBREVIATIONS__ABBREVIATION:
             return ( ( InternalEList< ? > ) getAbbreviation() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.ABBREVIATIONS__NS:
+            return basicSetNS( null, msgs );
+        case NsdPackage.ABBREVIATIONS__SERVICE_NS:
+            return basicSetServiceNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.ABBREVIATIONS__NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS__ABBREVIATIONS, NS.class, msgs );
+        case NsdPackage.ABBREVIATIONS__SERVICE_NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.SERVICE_NS__ABBREVIATIONS, ServiceNS.class,
+                    msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -118,6 +273,10 @@ public class AbbreviationsImpl extends MinimalEObjectImpl.Container implements A
         switch( featureID ) {
         case NsdPackage.ABBREVIATIONS__ABBREVIATION:
             return getAbbreviation();
+        case NsdPackage.ABBREVIATIONS__NS:
+            return getNS();
+        case NsdPackage.ABBREVIATIONS__SERVICE_NS:
+            return getServiceNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -135,6 +294,12 @@ public class AbbreviationsImpl extends MinimalEObjectImpl.Container implements A
             getAbbreviation().clear();
             getAbbreviation().addAll( ( Collection< ? extends Abbreviation > ) newValue );
             return;
+        case NsdPackage.ABBREVIATIONS__NS:
+            setNS( ( NS ) newValue );
+            return;
+        case NsdPackage.ABBREVIATIONS__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -148,7 +313,13 @@ public class AbbreviationsImpl extends MinimalEObjectImpl.Container implements A
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ABBREVIATIONS__ABBREVIATION:
-            getAbbreviation().clear();
+            unsetAbbreviation();
+            return;
+        case NsdPackage.ABBREVIATIONS__NS:
+            setNS( ( NS ) null );
+            return;
+        case NsdPackage.ABBREVIATIONS__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -163,7 +334,11 @@ public class AbbreviationsImpl extends MinimalEObjectImpl.Container implements A
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ABBREVIATIONS__ABBREVIATION:
-            return abbreviation != null && !abbreviation.isEmpty();
+            return isSetAbbreviation();
+        case NsdPackage.ABBREVIATIONS__NS:
+            return getNS() != null;
+        case NsdPackage.ABBREVIATIONS__SERVICE_NS:
+            return getServiceNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbstractLNClassImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbstractLNClassImpl.java
index 777bdd1..4a0b285 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbstractLNClassImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AbstractLNClassImpl.java
@@ -20,13 +20,17 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -37,6 +41,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbstractLNClassImpl#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AbstractLNClassImpl#getLNClasses <em>LN Classes</em>}</li>
  * </ul>
  *
  * @generated
@@ -62,6 +67,15 @@ public class AbstractLNClassImpl extends AnyLNClassImpl implements AbstractLNCla
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -100,8 +114,122 @@ public class AbstractLNClassImpl extends AnyLNClassImpl implements AbstractLNCla
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.ABSTRACT_LN_CLASS__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.ABSTRACT_LN_CLASS__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.ABSTRACT_LN_CLASS__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public LNClasses getLNClasses() {
+        if( eContainerFeatureID() != NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES ) return null;
+        return ( LNClasses ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetLNClasses( LNClasses newLNClasses, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newLNClasses, NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setLNClasses( LNClasses newLNClasses ) {
+        if( newLNClasses != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES && newLNClasses != null ) ) {
+            if( EcoreUtil.isAncestor( this, newLNClasses ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newLNClasses != null ) msgs = ( ( InternalEObject ) newLNClasses ).eInverseAdd( this,
+                    NsdPackage.LN_CLASSES__ABSTRACT_LN_CLASS, LNClasses.class, msgs );
+            msgs = basicSetLNClasses( newLNClasses, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES, newLNClasses, newLNClasses ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetLNClasses( ( LNClasses ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES:
+            return basicSetLNClasses( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.LN_CLASSES__ABSTRACT_LN_CLASS, LNClasses.class,
+                    msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
     }
 
     /**
@@ -114,6 +242,8 @@ public class AbstractLNClassImpl extends AnyLNClassImpl implements AbstractLNCla
         switch( featureID ) {
         case NsdPackage.ABSTRACT_LN_CLASS__NAME:
             return getName();
+        case NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES:
+            return getLNClasses();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -129,6 +259,9 @@ public class AbstractLNClassImpl extends AnyLNClassImpl implements AbstractLNCla
         case NsdPackage.ABSTRACT_LN_CLASS__NAME:
             setName( ( String ) newValue );
             return;
+        case NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES:
+            setLNClasses( ( LNClasses ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -142,7 +275,10 @@ public class AbstractLNClassImpl extends AnyLNClassImpl implements AbstractLNCla
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ABSTRACT_LN_CLASS__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
+            return;
+        case NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES:
+            setLNClasses( ( LNClasses ) null );
             return;
         }
         super.eUnset( featureID );
@@ -157,7 +293,9 @@ public class AbstractLNClassImpl extends AnyLNClassImpl implements AbstractLNCla
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ABSTRACT_LN_CLASS__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
+        case NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES:
+            return getLNClasses() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -173,7 +311,10 @@ public class AbstractLNClassImpl extends AnyLNClassImpl implements AbstractLNCla
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AnyLNClassImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AnyLNClassImpl.java
index cb4a9cd..10409b1 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AnyLNClassImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AnyLNClassImpl.java
@@ -34,8 +34,7 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -83,6 +82,15 @@ public abstract class AnyLNClassImpl extends TitledClassImpl implements AnyLNCla
      */
     protected String base = BASE_EDEFAULT;
 
+    /**
+     * This is true if the Base attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean baseESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -110,12 +118,32 @@ public abstract class AnyLNClassImpl extends TitledClassImpl implements AnyLNCla
     @Override
     public EList< DataObject > getDataObject() {
         if( dataObject == null ) {
-            dataObject = new EObjectContainmentEList< DataObject >( DataObject.class, this,
-                    NsdPackage.ANY_LN_CLASS__DATA_OBJECT );
+            dataObject = new EObjectContainmentWithInverseEList.Unsettable< DataObject >( DataObject.class, this,
+                    NsdPackage.ANY_LN_CLASS__DATA_OBJECT, NsdPackage.DATA_OBJECT__ANY_LN_CLASS );
         }
         return dataObject;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDataObject() {
+        if( dataObject != null ) ( ( InternalEList.Unsettable< ? > ) dataObject ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDataObject() {
+        return dataObject != null && ( ( InternalEList.Unsettable< ? > ) dataObject ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -135,8 +163,51 @@ public abstract class AnyLNClassImpl extends TitledClassImpl implements AnyLNCla
     public void setBase( String newBase ) {
         String oldBase = base;
         base = newBase;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.ANY_LN_CLASS__BASE, oldBase, base ) );
+        boolean oldBaseESet = baseESet;
+        baseESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.ANY_LN_CLASS__BASE, oldBase, base, !oldBaseESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetBase() {
+        String oldBase = base;
+        boolean oldBaseESet = baseESet;
+        base = BASE_EDEFAULT;
+        baseESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.ANY_LN_CLASS__BASE, oldBase, BASE_EDEFAULT, oldBaseESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetBase() {
+        return baseESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.ANY_LN_CLASS__DATA_OBJECT:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getDataObject() ).basicAdd( otherEnd,
+                    msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -198,10 +269,10 @@ public abstract class AnyLNClassImpl extends TitledClassImpl implements AnyLNCla
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ANY_LN_CLASS__DATA_OBJECT:
-            getDataObject().clear();
+            unsetDataObject();
             return;
         case NsdPackage.ANY_LN_CLASS__BASE:
-            setBase( BASE_EDEFAULT );
+            unsetBase();
             return;
         }
         super.eUnset( featureID );
@@ -216,9 +287,9 @@ public abstract class AnyLNClassImpl extends TitledClassImpl implements AnyLNCla
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ANY_LN_CLASS__DATA_OBJECT:
-            return dataObject != null && !dataObject.isEmpty();
+            return isSetDataObject();
         case NsdPackage.ANY_LN_CLASS__BASE:
-            return BASE_EDEFAULT == null ? base != null : !BASE_EDEFAULT.equals( base );
+            return isSetBase();
         }
         return super.eIsSet( featureID );
     }
@@ -234,7 +305,10 @@ public abstract class AnyLNClassImpl extends TitledClassImpl implements AnyLNCla
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (base: " );
-        result.append( base );
+        if( baseESet )
+            result.append( base );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ApplicableServiceNSImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ApplicableServiceNSImpl.java
index 356f7eb..2d2731d 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ApplicableServiceNSImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ApplicableServiceNSImpl.java
@@ -36,8 +36,7 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -86,6 +85,15 @@ public class ApplicableServiceNSImpl extends CopyrightedImpl implements Applicab
      */
     protected XMLGregorianCalendar date = DATE_EDEFAULT;
 
+    /**
+     * This is true if the Date attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean dateESet;
+
     /**
      * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -142,12 +150,33 @@ public class ApplicableServiceNSImpl extends CopyrightedImpl implements Applicab
     @Override
     public EList< ServiceNsUsage > getServiceNsUsage() {
         if( serviceNsUsage == null ) {
-            serviceNsUsage = new EObjectContainmentEList< ServiceNsUsage >( ServiceNsUsage.class, this,
-                    NsdPackage.APPLICABLE_SERVICE_NS__SERVICE_NS_USAGE );
+            serviceNsUsage = new EObjectContainmentWithInverseEList.Unsettable< ServiceNsUsage >( ServiceNsUsage.class,
+                    this, NsdPackage.APPLICABLE_SERVICE_NS__SERVICE_NS_USAGE,
+                    NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS );
         }
         return serviceNsUsage;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetServiceNsUsage() {
+        if( serviceNsUsage != null ) ( ( InternalEList.Unsettable< ? > ) serviceNsUsage ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetServiceNsUsage() {
+        return serviceNsUsage != null && ( ( InternalEList.Unsettable< ? > ) serviceNsUsage ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -167,8 +196,35 @@ public class ApplicableServiceNSImpl extends CopyrightedImpl implements Applicab
     public void setDate( XMLGregorianCalendar newDate ) {
         XMLGregorianCalendar oldDate = date;
         date = newDate;
+        boolean oldDateESet = dateESet;
+        dateESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.APPLICABLE_SERVICE_NS__DATE, oldDate, date ) );
+                NsdPackage.APPLICABLE_SERVICE_NS__DATE, oldDate, date, !oldDateESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDate() {
+        XMLGregorianCalendar oldDate = date;
+        boolean oldDateESet = dateESet;
+        date = DATE_EDEFAULT;
+        dateESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.APPLICABLE_SERVICE_NS__DATE, oldDate, DATE_EDEFAULT, oldDateESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDate() {
+        return dateESet;
     }
 
     /**
@@ -221,6 +277,22 @@ public class ApplicableServiceNSImpl extends CopyrightedImpl implements Applicab
         return versionESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.APPLICABLE_SERVICE_NS__SERVICE_NS_USAGE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getServiceNsUsage() )
+                    .basicAdd( otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -285,10 +357,10 @@ public class ApplicableServiceNSImpl extends CopyrightedImpl implements Applicab
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.APPLICABLE_SERVICE_NS__SERVICE_NS_USAGE:
-            getServiceNsUsage().clear();
+            unsetServiceNsUsage();
             return;
         case NsdPackage.APPLICABLE_SERVICE_NS__DATE:
-            setDate( DATE_EDEFAULT );
+            unsetDate();
             return;
         case NsdPackage.APPLICABLE_SERVICE_NS__VERSION:
             unsetVersion();
@@ -306,9 +378,9 @@ public class ApplicableServiceNSImpl extends CopyrightedImpl implements Applicab
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.APPLICABLE_SERVICE_NS__SERVICE_NS_USAGE:
-            return serviceNsUsage != null && !serviceNsUsage.isEmpty();
+            return isSetServiceNsUsage();
         case NsdPackage.APPLICABLE_SERVICE_NS__DATE:
-            return DATE_EDEFAULT == null ? date != null : !DATE_EDEFAULT.equals( date );
+            return isSetDate();
         case NsdPackage.APPLICABLE_SERVICE_NS__VERSION:
             return isSetVersion();
         }
@@ -326,7 +398,10 @@ public class ApplicableServiceNSImpl extends CopyrightedImpl implements Applicab
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (date: " );
-        result.append( date );
+        if( dateESet )
+            result.append( date );
+        else
+            result.append( "<unset>" );
         result.append( ", version: " );
         if( versionESet )
             result.append( version );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ApplicableServicesImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ApplicableServicesImpl.java
index c6bc7b7..35b88cc 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ApplicableServicesImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ApplicableServicesImpl.java
@@ -21,11 +21,13 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType;
 
 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;
@@ -33,9 +35,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -48,6 +51,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ApplicableServicesImpl#getService <em>Service</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ApplicableServicesImpl#getDataSetMemberOf <em>Data Set Member Of</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ApplicableServicesImpl#getFunctionalConstraint <em>Functional Constraint</em>}</li>
  * </ul>
  *
  * @generated
@@ -100,12 +104,32 @@ public class ApplicableServicesImpl extends MinimalEObjectImpl.Container impleme
     @Override
     public EList< ServiceType > getService() {
         if( service == null ) {
-            service = new EObjectContainmentEList< ServiceType >( ServiceType.class, this,
-                    NsdPackage.APPLICABLE_SERVICES__SERVICE );
+            service = new EObjectContainmentWithInverseEList.Unsettable< ServiceType >( ServiceType.class, this,
+                    NsdPackage.APPLICABLE_SERVICES__SERVICE, NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES );
         }
         return service;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetService() {
+        if( service != null ) ( ( InternalEList.Unsettable< ? > ) service ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetService() {
+        return service != null && ( ( InternalEList.Unsettable< ? > ) service ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -114,12 +138,103 @@ public class ApplicableServicesImpl extends MinimalEObjectImpl.Container impleme
     @Override
     public EList< DataSetMemberOf > getDataSetMemberOf() {
         if( dataSetMemberOf == null ) {
-            dataSetMemberOf = new EObjectContainmentEList< DataSetMemberOf >( DataSetMemberOf.class, this,
-                    NsdPackage.APPLICABLE_SERVICES__DATA_SET_MEMBER_OF );
+            dataSetMemberOf = new EObjectContainmentWithInverseEList.Unsettable< DataSetMemberOf >(
+                    DataSetMemberOf.class, this, NsdPackage.APPLICABLE_SERVICES__DATA_SET_MEMBER_OF,
+                    NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES );
         }
         return dataSetMemberOf;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDataSetMemberOf() {
+        if( dataSetMemberOf != null ) ( ( InternalEList.Unsettable< ? > ) dataSetMemberOf ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDataSetMemberOf() {
+        return dataSetMemberOf != null && ( ( InternalEList.Unsettable< ? > ) dataSetMemberOf ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public FunctionalConstraint getFunctionalConstraint() {
+        if( eContainerFeatureID() != NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT ) return null;
+        return ( FunctionalConstraint ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetFunctionalConstraint( FunctionalConstraint newFunctionalConstraint,
+            NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newFunctionalConstraint,
+                NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setFunctionalConstraint( FunctionalConstraint newFunctionalConstraint ) {
+        if( newFunctionalConstraint != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT
+                        && newFunctionalConstraint != null ) ) {
+            if( EcoreUtil.isAncestor( this, newFunctionalConstraint ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newFunctionalConstraint != null )
+                msgs = ( ( InternalEObject ) newFunctionalConstraint ).eInverseAdd( this,
+                        NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES, FunctionalConstraint.class, msgs );
+            msgs = basicSetFunctionalConstraint( newFunctionalConstraint, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT,
+                        newFunctionalConstraint, newFunctionalConstraint ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.APPLICABLE_SERVICES__SERVICE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getService() ).basicAdd( otherEnd,
+                    msgs );
+        case NsdPackage.APPLICABLE_SERVICES__DATA_SET_MEMBER_OF:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getDataSetMemberOf() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetFunctionalConstraint( ( FunctionalConstraint ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -132,10 +247,27 @@ public class ApplicableServicesImpl extends MinimalEObjectImpl.Container impleme
             return ( ( InternalEList< ? > ) getService() ).basicRemove( otherEnd, msgs );
         case NsdPackage.APPLICABLE_SERVICES__DATA_SET_MEMBER_OF:
             return ( ( InternalEList< ? > ) getDataSetMemberOf() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT:
+            return basicSetFunctionalConstraint( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES,
+                    FunctionalConstraint.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -148,6 +280,8 @@ public class ApplicableServicesImpl extends MinimalEObjectImpl.Container impleme
             return getService();
         case NsdPackage.APPLICABLE_SERVICES__DATA_SET_MEMBER_OF:
             return getDataSetMemberOf();
+        case NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT:
+            return getFunctionalConstraint();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -169,6 +303,9 @@ public class ApplicableServicesImpl extends MinimalEObjectImpl.Container impleme
             getDataSetMemberOf().clear();
             getDataSetMemberOf().addAll( ( Collection< ? extends DataSetMemberOf > ) newValue );
             return;
+        case NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT:
+            setFunctionalConstraint( ( FunctionalConstraint ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -182,10 +319,13 @@ public class ApplicableServicesImpl extends MinimalEObjectImpl.Container impleme
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.APPLICABLE_SERVICES__SERVICE:
-            getService().clear();
+            unsetService();
             return;
         case NsdPackage.APPLICABLE_SERVICES__DATA_SET_MEMBER_OF:
-            getDataSetMemberOf().clear();
+            unsetDataSetMemberOf();
+            return;
+        case NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT:
+            setFunctionalConstraint( ( FunctionalConstraint ) null );
             return;
         }
         super.eUnset( featureID );
@@ -200,9 +340,11 @@ public class ApplicableServicesImpl extends MinimalEObjectImpl.Container impleme
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.APPLICABLE_SERVICES__SERVICE:
-            return service != null && !service.isEmpty();
+            return isSetService();
         case NsdPackage.APPLICABLE_SERVICES__DATA_SET_MEMBER_OF:
-            return dataSetMemberOf != null && !dataSetMemberOf.isEmpty();
+            return isSetDataSetMemberOf();
+        case NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT:
+            return getFunctionalConstraint() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AppliesToTypeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AppliesToTypeImpl.java
index 6192b05..f197d78 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AppliesToTypeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AppliesToTypeImpl.java
@@ -23,11 +23,15 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage;
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -40,6 +44,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AppliesToTypeImpl#getId <em>Id</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AppliesToTypeImpl#getPublicationStage <em>Publication Stage</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AppliesToTypeImpl#getRevision <em>Revision</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AppliesToTypeImpl#getServiceNsUsage <em>Service Ns Usage</em>}</li>
  * </ul>
  *
  * @generated
@@ -65,6 +70,15 @@ public class AppliesToTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
      */
     protected String id = ID_EDEFAULT;
 
+    /**
+     * This is true if the Id attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean idESet;
+
     /**
      * The default value of the '{@link #getPublicationStage() <em>Publication Stage</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -161,8 +175,35 @@ public class AppliesToTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
     public void setId( String newId ) {
         String oldId = id;
         id = newId;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.APPLIES_TO_TYPE__ID, oldId, id ) );
+        boolean oldIdESet = idESet;
+        idESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.APPLIES_TO_TYPE__ID, oldId, id, !oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetId() {
+        String oldId = id;
+        boolean oldIdESet = idESet;
+        id = ID_EDEFAULT;
+        idESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.APPLIES_TO_TYPE__ID, oldId, ID_EDEFAULT, oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetId() {
+        return idESet;
     }
 
     /**
@@ -267,6 +308,95 @@ public class AppliesToTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
         return revisionESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceNsUsage getServiceNsUsage() {
+        if( eContainerFeatureID() != NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE ) return null;
+        return ( ServiceNsUsage ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceNsUsage( ServiceNsUsage newServiceNsUsage, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceNsUsage, NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE,
+                msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceNsUsage( ServiceNsUsage newServiceNsUsage ) {
+        if( newServiceNsUsage != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE
+                        && newServiceNsUsage != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceNsUsage ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceNsUsage != null ) msgs = ( ( InternalEObject ) newServiceNsUsage ).eInverseAdd( this,
+                    NsdPackage.SERVICE_NS_USAGE__APPLIES_TO, ServiceNsUsage.class, msgs );
+            msgs = basicSetServiceNsUsage( newServiceNsUsage, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE, newServiceNsUsage, newServiceNsUsage ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceNsUsage( ( ServiceNsUsage ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE:
+            return basicSetServiceNsUsage( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.SERVICE_NS_USAGE__APPLIES_TO,
+                    ServiceNsUsage.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -281,6 +411,8 @@ public class AppliesToTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
             return getPublicationStage();
         case NsdPackage.APPLIES_TO_TYPE__REVISION:
             return getRevision();
+        case NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE:
+            return getServiceNsUsage();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -302,6 +434,9 @@ public class AppliesToTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
         case NsdPackage.APPLIES_TO_TYPE__REVISION:
             setRevision( ( String ) newValue );
             return;
+        case NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE:
+            setServiceNsUsage( ( ServiceNsUsage ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -315,7 +450,7 @@ public class AppliesToTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.APPLIES_TO_TYPE__ID:
-            setId( ID_EDEFAULT );
+            unsetId();
             return;
         case NsdPackage.APPLIES_TO_TYPE__PUBLICATION_STAGE:
             unsetPublicationStage();
@@ -323,6 +458,9 @@ public class AppliesToTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
         case NsdPackage.APPLIES_TO_TYPE__REVISION:
             unsetRevision();
             return;
+        case NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE:
+            setServiceNsUsage( ( ServiceNsUsage ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -336,11 +474,13 @@ public class AppliesToTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.APPLIES_TO_TYPE__ID:
-            return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals( id );
+            return isSetId();
         case NsdPackage.APPLIES_TO_TYPE__PUBLICATION_STAGE:
             return isSetPublicationStage();
         case NsdPackage.APPLIES_TO_TYPE__REVISION:
             return isSetRevision();
+        case NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE:
+            return getServiceNsUsage() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -356,7 +496,10 @@ public class AppliesToTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (id: " );
-        result.append( id );
+        if( idESet )
+            result.append( id );
+        else
+            result.append( "<unset>" );
         result.append( ", publicationStage: " );
         if( publicationStageESet )
             result.append( publicationStage );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/BasicTypeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/BasicTypeImpl.java
index 4503d56..36f8087 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/BasicTypeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/BasicTypeImpl.java
@@ -20,14 +20,18 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 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.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -39,6 +43,7 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.BasicTypeImpl#getDescID <em>Desc ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.BasicTypeImpl#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.BasicTypeImpl#getBasicTypes <em>Basic Types</em>}</li>
  * </ul>
  *
  * @generated
@@ -64,6 +69,15 @@ public class BasicTypeImpl extends MinimalEObjectImpl.Container implements Basic
      */
     protected String descID = DESC_ID_EDEFAULT;
 
+    /**
+     * This is true if the Desc ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean descIDESet;
+
     /**
      * The default value of the '{@link #getName() <em>Name</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -84,6 +98,15 @@ public class BasicTypeImpl extends MinimalEObjectImpl.Container implements Basic
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -122,8 +145,35 @@ public class BasicTypeImpl extends MinimalEObjectImpl.Container implements Basic
     public void setDescID( String newDescID ) {
         String oldDescID = descID;
         descID = newDescID;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.BASIC_TYPE__DESC_ID, oldDescID, descID ) );
+        boolean oldDescIDESet = descIDESet;
+        descIDESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.BASIC_TYPE__DESC_ID, oldDescID, descID, !oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDescID() {
+        String oldDescID = descID;
+        boolean oldDescIDESet = descIDESet;
+        descID = DESC_ID_EDEFAULT;
+        descIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.BASIC_TYPE__DESC_ID, oldDescID, DESC_ID_EDEFAULT, oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDescID() {
+        return descIDESet;
     }
 
     /**
@@ -145,8 +195,122 @@ public class BasicTypeImpl extends MinimalEObjectImpl.Container implements Basic
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.BASIC_TYPE__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.BASIC_TYPE__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.BASIC_TYPE__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public BasicTypes getBasicTypes() {
+        if( eContainerFeatureID() != NsdPackage.BASIC_TYPE__BASIC_TYPES ) return null;
+        return ( BasicTypes ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetBasicTypes( BasicTypes newBasicTypes, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newBasicTypes, NsdPackage.BASIC_TYPE__BASIC_TYPES, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setBasicTypes( BasicTypes newBasicTypes ) {
+        if( newBasicTypes != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.BASIC_TYPE__BASIC_TYPES && newBasicTypes != null ) ) {
+            if( EcoreUtil.isAncestor( this, newBasicTypes ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newBasicTypes != null ) msgs = ( ( InternalEObject ) newBasicTypes ).eInverseAdd( this,
+                    NsdPackage.BASIC_TYPES__BASIC_TYPE, BasicTypes.class, msgs );
+            msgs = basicSetBasicTypes( newBasicTypes, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.BASIC_TYPE__BASIC_TYPES, newBasicTypes, newBasicTypes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.BASIC_TYPE__BASIC_TYPES:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetBasicTypes( ( BasicTypes ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.BASIC_TYPE__BASIC_TYPES:
+            return basicSetBasicTypes( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.BASIC_TYPE__BASIC_TYPES:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.BASIC_TYPES__BASIC_TYPE, BasicTypes.class,
+                    msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
     }
 
     /**
@@ -161,6 +325,8 @@ public class BasicTypeImpl extends MinimalEObjectImpl.Container implements Basic
             return getDescID();
         case NsdPackage.BASIC_TYPE__NAME:
             return getName();
+        case NsdPackage.BASIC_TYPE__BASIC_TYPES:
+            return getBasicTypes();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -179,6 +345,9 @@ public class BasicTypeImpl extends MinimalEObjectImpl.Container implements Basic
         case NsdPackage.BASIC_TYPE__NAME:
             setName( ( String ) newValue );
             return;
+        case NsdPackage.BASIC_TYPE__BASIC_TYPES:
+            setBasicTypes( ( BasicTypes ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -192,10 +361,13 @@ public class BasicTypeImpl extends MinimalEObjectImpl.Container implements Basic
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.BASIC_TYPE__DESC_ID:
-            setDescID( DESC_ID_EDEFAULT );
+            unsetDescID();
             return;
         case NsdPackage.BASIC_TYPE__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
+            return;
+        case NsdPackage.BASIC_TYPE__BASIC_TYPES:
+            setBasicTypes( ( BasicTypes ) null );
             return;
         }
         super.eUnset( featureID );
@@ -210,9 +382,11 @@ public class BasicTypeImpl extends MinimalEObjectImpl.Container implements Basic
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.BASIC_TYPE__DESC_ID:
-            return DESC_ID_EDEFAULT == null ? descID != null : !DESC_ID_EDEFAULT.equals( descID );
+            return isSetDescID();
         case NsdPackage.BASIC_TYPE__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
+        case NsdPackage.BASIC_TYPE__BASIC_TYPES:
+            return getBasicTypes() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -228,9 +402,15 @@ public class BasicTypeImpl extends MinimalEObjectImpl.Container implements Basic
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (descID: " );
-        result.append( descID );
+        if( descIDESet )
+            result.append( descID );
+        else
+            result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/BasicTypesImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/BasicTypesImpl.java
index cf65af5..a2e9ecf 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/BasicTypesImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/BasicTypesImpl.java
@@ -21,10 +21,12 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 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;
@@ -32,9 +34,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -46,6 +49,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.BasicTypesImpl#getBasicType <em>Basic Type</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.BasicTypesImpl#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -88,12 +92,94 @@ public class BasicTypesImpl extends MinimalEObjectImpl.Container implements Basi
     @Override
     public EList< BasicType > getBasicType() {
         if( basicType == null ) {
-            basicType = new EObjectContainmentEList< BasicType >( BasicType.class, this,
-                    NsdPackage.BASIC_TYPES__BASIC_TYPE );
+            basicType = new EObjectContainmentWithInverseEList.Unsettable< BasicType >( BasicType.class, this,
+                    NsdPackage.BASIC_TYPES__BASIC_TYPE, NsdPackage.BASIC_TYPE__BASIC_TYPES );
         }
         return basicType;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetBasicType() {
+        if( basicType != null ) ( ( InternalEList.Unsettable< ? > ) basicType ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetBasicType() {
+        return basicType != null && ( ( InternalEList.Unsettable< ? > ) basicType ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NS getNS() {
+        if( eContainerFeatureID() != NsdPackage.BASIC_TYPES__NS ) return null;
+        return ( NS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNS( NS newNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNS, NsdPackage.BASIC_TYPES__NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNS( NS newNS ) {
+        if( newNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.BASIC_TYPES__NS && newNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNS != null )
+                msgs = ( ( InternalEObject ) newNS ).eInverseAdd( this, NsdPackage.NS__BASIC_TYPES, NS.class, msgs );
+            msgs = basicSetNS( newNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.BASIC_TYPES__NS, newNS, newNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.BASIC_TYPES__BASIC_TYPE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getBasicType() ).basicAdd( otherEnd,
+                    msgs );
+        case NsdPackage.BASIC_TYPES__NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNS( ( NS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -104,10 +190,26 @@ public class BasicTypesImpl extends MinimalEObjectImpl.Container implements Basi
         switch( featureID ) {
         case NsdPackage.BASIC_TYPES__BASIC_TYPE:
             return ( ( InternalEList< ? > ) getBasicType() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.BASIC_TYPES__NS:
+            return basicSetNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.BASIC_TYPES__NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS__BASIC_TYPES, NS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -118,6 +220,8 @@ public class BasicTypesImpl extends MinimalEObjectImpl.Container implements Basi
         switch( featureID ) {
         case NsdPackage.BASIC_TYPES__BASIC_TYPE:
             return getBasicType();
+        case NsdPackage.BASIC_TYPES__NS:
+            return getNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -135,6 +239,9 @@ public class BasicTypesImpl extends MinimalEObjectImpl.Container implements Basi
             getBasicType().clear();
             getBasicType().addAll( ( Collection< ? extends BasicType > ) newValue );
             return;
+        case NsdPackage.BASIC_TYPES__NS:
+            setNS( ( NS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -148,7 +255,10 @@ public class BasicTypesImpl extends MinimalEObjectImpl.Container implements Basi
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.BASIC_TYPES__BASIC_TYPE:
-            getBasicType().clear();
+            unsetBasicType();
+            return;
+        case NsdPackage.BASIC_TYPES__NS:
+            setNS( ( NS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -163,7 +273,9 @@ public class BasicTypesImpl extends MinimalEObjectImpl.Container implements Basi
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.BASIC_TYPES__BASIC_TYPE:
-            return basicType != null && !basicType.isEmpty();
+            return isSetBasicType();
+        case NsdPackage.BASIC_TYPES__NS:
+            return getNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCImpl.java
index 517c5e9..389b0af 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCImpl.java
@@ -20,6 +20,7 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter;
@@ -36,8 +37,8 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -56,6 +57,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCImpl#isStatistics <em>Statistics</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCImpl#isTypeKindParameterized <em>Type Kind Parameterized</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCImpl#getVariant <em>Variant</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCImpl#getCDCs <em>CD Cs</em>}</li>
  * </ul>
  *
  * @generated
@@ -91,6 +93,15 @@ public class CDCImpl extends TitledClassImpl implements CDC {
      */
     protected ServiceParameter serviceParameter;
 
+    /**
+     * This is true if the Service Parameter containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean serviceParameterESet;
+
     /**
      * The default value of the '{@link #isEnumParameterized() <em>Enum Parameterized</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -140,6 +151,15 @@ public class CDCImpl extends TitledClassImpl implements CDC {
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * The default value of the '{@link #isStatistics() <em>Statistics</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -218,6 +238,15 @@ public class CDCImpl extends TitledClassImpl implements CDC {
      */
     protected String variant = VARIANT_EDEFAULT;
 
+    /**
+     * This is true if the Variant attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean variantESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -245,12 +274,32 @@ public class CDCImpl extends TitledClassImpl implements CDC {
     @Override
     public EList< SubDataObject > getSubDataObject() {
         if( subDataObject == null ) {
-            subDataObject = new EObjectContainmentEList< SubDataObject >( SubDataObject.class, this,
-                    NsdPackage.CDC__SUB_DATA_OBJECT );
+            subDataObject = new EObjectContainmentWithInverseEList.Unsettable< SubDataObject >( SubDataObject.class,
+                    this, NsdPackage.CDC__SUB_DATA_OBJECT, NsdPackage.SUB_DATA_OBJECT__CDC );
         }
         return subDataObject;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetSubDataObject() {
+        if( subDataObject != null ) ( ( InternalEList.Unsettable< ? > ) subDataObject ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetSubDataObject() {
+        return subDataObject != null && ( ( InternalEList.Unsettable< ? > ) subDataObject ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -259,12 +308,32 @@ public class CDCImpl extends TitledClassImpl implements CDC {
     @Override
     public EList< DataAttribute > getDataAttribute() {
         if( dataAttribute == null ) {
-            dataAttribute = new EObjectContainmentEList< DataAttribute >( DataAttribute.class, this,
-                    NsdPackage.CDC__DATA_ATTRIBUTE );
+            dataAttribute = new EObjectContainmentWithInverseEList.Unsettable< DataAttribute >( DataAttribute.class,
+                    this, NsdPackage.CDC__DATA_ATTRIBUTE, NsdPackage.DATA_ATTRIBUTE__CDC );
         }
         return dataAttribute;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDataAttribute() {
+        if( dataAttribute != null ) ( ( InternalEList.Unsettable< ? > ) dataAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDataAttribute() {
+        return dataAttribute != null && ( ( InternalEList.Unsettable< ? > ) dataAttribute ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -283,9 +352,12 @@ public class CDCImpl extends TitledClassImpl implements CDC {
     public NotificationChain basicSetServiceParameter( ServiceParameter newServiceParameter, NotificationChain msgs ) {
         ServiceParameter oldServiceParameter = serviceParameter;
         serviceParameter = newServiceParameter;
+        boolean oldServiceParameterESet = serviceParameterESet;
+        serviceParameterESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.CDC__SERVICE_PARAMETER, oldServiceParameter, newServiceParameter );
+                    NsdPackage.CDC__SERVICE_PARAMETER, oldServiceParameter, newServiceParameter,
+                    !oldServiceParameterESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -304,14 +376,72 @@ public class CDCImpl extends TitledClassImpl implements CDC {
         if( newServiceParameter != serviceParameter ) {
             NotificationChain msgs = null;
             if( serviceParameter != null ) msgs = ( ( InternalEObject ) serviceParameter ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.CDC__SERVICE_PARAMETER, null, msgs );
+                    NsdPackage.SERVICE_PARAMETER__CDC, ServiceParameter.class, msgs );
             if( newServiceParameter != null ) msgs = ( ( InternalEObject ) newServiceParameter ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.CDC__SERVICE_PARAMETER, null, msgs );
+                    NsdPackage.SERVICE_PARAMETER__CDC, ServiceParameter.class, msgs );
             msgs = basicSetServiceParameter( newServiceParameter, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.CDC__SERVICE_PARAMETER, newServiceParameter, newServiceParameter ) );
+        else {
+            boolean oldServiceParameterESet = serviceParameterESet;
+            serviceParameterESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.CDC__SERVICE_PARAMETER,
+                        newServiceParameter, newServiceParameter, !oldServiceParameterESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetServiceParameter( NotificationChain msgs ) {
+        ServiceParameter oldServiceParameter = serviceParameter;
+        serviceParameter = null;
+        boolean oldServiceParameterESet = serviceParameterESet;
+        serviceParameterESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.CDC__SERVICE_PARAMETER, oldServiceParameter, null, oldServiceParameterESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetServiceParameter() {
+        if( serviceParameter != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) serviceParameter ).eInverseRemove( this, NsdPackage.SERVICE_PARAMETER__CDC,
+                    ServiceParameter.class, msgs );
+            msgs = basicUnsetServiceParameter( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldServiceParameterESet = serviceParameterESet;
+            serviceParameterESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.CDC__SERVICE_PARAMETER, null, null, oldServiceParameterESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetServiceParameter() {
+        return serviceParameterESet;
     }
 
     /**
@@ -385,8 +515,35 @@ public class CDCImpl extends TitledClassImpl implements CDC {
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.CDC__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.CDC__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.CDC__NAME,
+                oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
     }
 
     /**
@@ -510,8 +667,103 @@ public class CDCImpl extends TitledClassImpl implements CDC {
     public void setVariant( String newVariant ) {
         String oldVariant = variant;
         variant = newVariant;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.CDC__VARIANT, oldVariant, variant ) );
+        boolean oldVariantESet = variantESet;
+        variantESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.CDC__VARIANT,
+                oldVariant, variant, !oldVariantESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetVariant() {
+        String oldVariant = variant;
+        boolean oldVariantESet = variantESet;
+        variant = VARIANT_EDEFAULT;
+        variantESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.CDC__VARIANT,
+                oldVariant, VARIANT_EDEFAULT, oldVariantESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetVariant() {
+        return variantESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public CDCs getCDCs() {
+        if( eContainerFeatureID() != NsdPackage.CDC__CD_CS ) return null;
+        return ( CDCs ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetCDCs( CDCs newCDCs, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newCDCs, NsdPackage.CDC__CD_CS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setCDCs( CDCs newCDCs ) {
+        if( newCDCs != eInternalContainer() || ( eContainerFeatureID() != NsdPackage.CDC__CD_CS && newCDCs != null ) ) {
+            if( EcoreUtil.isAncestor( this, newCDCs ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newCDCs != null )
+                msgs = ( ( InternalEObject ) newCDCs ).eInverseAdd( this, NsdPackage.CD_CS__CDC, CDCs.class, msgs );
+            msgs = basicSetCDCs( newCDCs, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.CDC__CD_CS, newCDCs, newCDCs ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.CDC__SUB_DATA_OBJECT:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getSubDataObject() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.CDC__DATA_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getDataAttribute() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.CDC__SERVICE_PARAMETER:
+            if( serviceParameter != null ) msgs = ( ( InternalEObject ) serviceParameter ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.CDC__SERVICE_PARAMETER, null, msgs );
+            return basicSetServiceParameter( ( ServiceParameter ) otherEnd, msgs );
+        case NsdPackage.CDC__CD_CS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetCDCs( ( CDCs ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -527,11 +779,27 @@ public class CDCImpl extends TitledClassImpl implements CDC {
         case NsdPackage.CDC__DATA_ATTRIBUTE:
             return ( ( InternalEList< ? > ) getDataAttribute() ).basicRemove( otherEnd, msgs );
         case NsdPackage.CDC__SERVICE_PARAMETER:
-            return basicSetServiceParameter( null, msgs );
+            return basicUnsetServiceParameter( msgs );
+        case NsdPackage.CDC__CD_CS:
+            return basicSetCDCs( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.CDC__CD_CS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.CD_CS__CDC, CDCs.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -556,6 +824,8 @@ public class CDCImpl extends TitledClassImpl implements CDC {
             return isTypeKindParameterized();
         case NsdPackage.CDC__VARIANT:
             return getVariant();
+        case NsdPackage.CDC__CD_CS:
+            return getCDCs();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -595,6 +865,9 @@ public class CDCImpl extends TitledClassImpl implements CDC {
         case NsdPackage.CDC__VARIANT:
             setVariant( ( String ) newValue );
             return;
+        case NsdPackage.CDC__CD_CS:
+            setCDCs( ( CDCs ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -608,19 +881,19 @@ public class CDCImpl extends TitledClassImpl implements CDC {
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.CDC__SUB_DATA_OBJECT:
-            getSubDataObject().clear();
+            unsetSubDataObject();
             return;
         case NsdPackage.CDC__DATA_ATTRIBUTE:
-            getDataAttribute().clear();
+            unsetDataAttribute();
             return;
         case NsdPackage.CDC__SERVICE_PARAMETER:
-            setServiceParameter( ( ServiceParameter ) null );
+            unsetServiceParameter();
             return;
         case NsdPackage.CDC__ENUM_PARAMETERIZED:
             unsetEnumParameterized();
             return;
         case NsdPackage.CDC__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
             return;
         case NsdPackage.CDC__STATISTICS:
             unsetStatistics();
@@ -629,7 +902,10 @@ public class CDCImpl extends TitledClassImpl implements CDC {
             unsetTypeKindParameterized();
             return;
         case NsdPackage.CDC__VARIANT:
-            setVariant( VARIANT_EDEFAULT );
+            unsetVariant();
+            return;
+        case NsdPackage.CDC__CD_CS:
+            setCDCs( ( CDCs ) null );
             return;
         }
         super.eUnset( featureID );
@@ -644,21 +920,23 @@ public class CDCImpl extends TitledClassImpl implements CDC {
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.CDC__SUB_DATA_OBJECT:
-            return subDataObject != null && !subDataObject.isEmpty();
+            return isSetSubDataObject();
         case NsdPackage.CDC__DATA_ATTRIBUTE:
-            return dataAttribute != null && !dataAttribute.isEmpty();
+            return isSetDataAttribute();
         case NsdPackage.CDC__SERVICE_PARAMETER:
-            return serviceParameter != null;
+            return isSetServiceParameter();
         case NsdPackage.CDC__ENUM_PARAMETERIZED:
             return isSetEnumParameterized();
         case NsdPackage.CDC__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
         case NsdPackage.CDC__STATISTICS:
             return isSetStatistics();
         case NsdPackage.CDC__TYPE_KIND_PARAMETERIZED:
             return isSetTypeKindParameterized();
         case NsdPackage.CDC__VARIANT:
-            return VARIANT_EDEFAULT == null ? variant != null : !VARIANT_EDEFAULT.equals( variant );
+            return isSetVariant();
+        case NsdPackage.CDC__CD_CS:
+            return getCDCs() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -679,7 +957,10 @@ public class CDCImpl extends TitledClassImpl implements CDC {
         else
             result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ", statistics: " );
         if( statisticsESet )
             result.append( statistics );
@@ -691,7 +972,10 @@ public class CDCImpl extends TitledClassImpl implements CDC {
         else
             result.append( "<unset>" );
         result.append( ", variant: " );
-        result.append( variant );
+        if( variantESet )
+            result.append( variant );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCsImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCsImpl.java
index b7ff1ef..07e2836 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCsImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCsImpl.java
@@ -21,10 +21,12 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 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;
@@ -32,9 +34,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -46,6 +49,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCsImpl#getCDC <em>CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCsImpl#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -88,11 +92,92 @@ public class CDCsImpl extends MinimalEObjectImpl.Container implements CDCs {
     @Override
     public EList< CDC > getCDC() {
         if( cDC == null ) {
-            cDC = new EObjectContainmentEList< CDC >( CDC.class, this, NsdPackage.CD_CS__CDC );
+            cDC = new EObjectContainmentWithInverseEList.Unsettable< CDC >( CDC.class, this, NsdPackage.CD_CS__CDC,
+                    NsdPackage.CDC__CD_CS );
         }
         return cDC;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetCDC() {
+        if( cDC != null ) ( ( InternalEList.Unsettable< ? > ) cDC ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetCDC() {
+        return cDC != null && ( ( InternalEList.Unsettable< ? > ) cDC ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NS getNS() {
+        if( eContainerFeatureID() != NsdPackage.CD_CS__NS ) return null;
+        return ( NS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNS( NS newNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNS, NsdPackage.CD_CS__NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNS( NS newNS ) {
+        if( newNS != eInternalContainer() || ( eContainerFeatureID() != NsdPackage.CD_CS__NS && newNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNS != null )
+                msgs = ( ( InternalEObject ) newNS ).eInverseAdd( this, NsdPackage.NS__CD_CS, NS.class, msgs );
+            msgs = basicSetNS( newNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.CD_CS__NS, newNS, newNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.CD_CS__CDC:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getCDC() ).basicAdd( otherEnd, msgs );
+        case NsdPackage.CD_CS__NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNS( ( NS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -103,10 +188,26 @@ public class CDCsImpl extends MinimalEObjectImpl.Container implements CDCs {
         switch( featureID ) {
         case NsdPackage.CD_CS__CDC:
             return ( ( InternalEList< ? > ) getCDC() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.CD_CS__NS:
+            return basicSetNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.CD_CS__NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS__CD_CS, NS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -117,6 +218,8 @@ public class CDCsImpl extends MinimalEObjectImpl.Container implements CDCs {
         switch( featureID ) {
         case NsdPackage.CD_CS__CDC:
             return getCDC();
+        case NsdPackage.CD_CS__NS:
+            return getNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -134,6 +237,9 @@ public class CDCsImpl extends MinimalEObjectImpl.Container implements CDCs {
             getCDC().clear();
             getCDC().addAll( ( Collection< ? extends CDC > ) newValue );
             return;
+        case NsdPackage.CD_CS__NS:
+            setNS( ( NS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -147,7 +253,10 @@ public class CDCsImpl extends MinimalEObjectImpl.Container implements CDCs {
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.CD_CS__CDC:
-            getCDC().clear();
+            unsetCDC();
+            return;
+        case NsdPackage.CD_CS__NS:
+            setNS( ( NS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -162,7 +271,9 @@ public class CDCsImpl extends MinimalEObjectImpl.Container implements CDCs {
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.CD_CS__CDC:
-            return cDC != null && !cDC.isEmpty();
+            return isSetCDC();
+        case NsdPackage.CD_CS__NS:
+            return getNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ChangesImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ChangesImpl.java
index 5da44d4..6981951 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ChangesImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ChangesImpl.java
@@ -20,15 +20,20 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS;
 import javax.xml.datatype.XMLGregorianCalendar;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -42,6 +47,8 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ChangesImpl#getDate <em>Date</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ChangesImpl#getRevision <em>Revision</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ChangesImpl#getTissues <em>Tissues</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ChangesImpl#getNS <em>NS</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ChangesImpl#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -67,6 +74,15 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
      */
     protected String changesID = CHANGES_ID_EDEFAULT;
 
+    /**
+     * This is true if the Changes ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean changesIDESet;
+
     /**
      * The default value of the '{@link #getDate() <em>Date</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -87,6 +103,15 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
      */
     protected XMLGregorianCalendar date = DATE_EDEFAULT;
 
+    /**
+     * This is true if the Date attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean dateESet;
+
     /**
      * The default value of the '{@link #getRevision() <em>Revision</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -136,6 +161,15 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
      */
     protected String tissues = TISSUES_EDEFAULT;
 
+    /**
+     * This is true if the Tissues attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean tissuesESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -174,8 +208,35 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
     public void setChangesID( String newChangesID ) {
         String oldChangesID = changesID;
         changesID = newChangesID;
+        boolean oldChangesIDESet = changesIDESet;
+        changesIDESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.CHANGES__CHANGES_ID, oldChangesID, changesID ) );
+                NsdPackage.CHANGES__CHANGES_ID, oldChangesID, changesID, !oldChangesIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetChangesID() {
+        String oldChangesID = changesID;
+        boolean oldChangesIDESet = changesIDESet;
+        changesID = CHANGES_ID_EDEFAULT;
+        changesIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.CHANGES__CHANGES_ID, oldChangesID, CHANGES_ID_EDEFAULT, oldChangesIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetChangesID() {
+        return changesIDESet;
     }
 
     /**
@@ -197,8 +258,35 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
     public void setDate( XMLGregorianCalendar newDate ) {
         XMLGregorianCalendar oldDate = date;
         date = newDate;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.CHANGES__DATE, oldDate, date ) );
+        boolean oldDateESet = dateESet;
+        dateESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.CHANGES__DATE,
+                oldDate, date, !oldDateESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDate() {
+        XMLGregorianCalendar oldDate = date;
+        boolean oldDateESet = dateESet;
+        date = DATE_EDEFAULT;
+        dateESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.CHANGES__DATE, oldDate, DATE_EDEFAULT, oldDateESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDate() {
+        return dateESet;
     }
 
     /**
@@ -270,8 +358,170 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
     public void setTissues( String newTissues ) {
         String oldTissues = tissues;
         tissues = newTissues;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.CHANGES__TISSUES, oldTissues, tissues ) );
+        boolean oldTissuesESet = tissuesESet;
+        tissuesESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.CHANGES__TISSUES, oldTissues, tissues, !oldTissuesESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetTissues() {
+        String oldTissues = tissues;
+        boolean oldTissuesESet = tissuesESet;
+        tissues = TISSUES_EDEFAULT;
+        tissuesESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.CHANGES__TISSUES, oldTissues, TISSUES_EDEFAULT, oldTissuesESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetTissues() {
+        return tissuesESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NS getNS() {
+        if( eContainerFeatureID() != NsdPackage.CHANGES__NS ) return null;
+        return ( NS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNS( NS newNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNS, NsdPackage.CHANGES__NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNS( NS newNS ) {
+        if( newNS != eInternalContainer() || ( eContainerFeatureID() != NsdPackage.CHANGES__NS && newNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNS != null )
+                msgs = ( ( InternalEObject ) newNS ).eInverseAdd( this, NsdPackage.NS__CHANGES, NS.class, msgs );
+            msgs = basicSetNS( newNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.CHANGES__NS, newNS, newNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceNS getServiceNS() {
+        if( eContainerFeatureID() != NsdPackage.CHANGES__SERVICE_NS ) return null;
+        return ( ServiceNS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceNS( ServiceNS newServiceNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceNS, NsdPackage.CHANGES__SERVICE_NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceNS( ServiceNS newServiceNS ) {
+        if( newServiceNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.CHANGES__SERVICE_NS && newServiceNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceNS != null ) msgs = ( ( InternalEObject ) newServiceNS ).eInverseAdd( this,
+                    NsdPackage.SERVICE_NS__CHANGES, ServiceNS.class, msgs );
+            msgs = basicSetServiceNS( newServiceNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.CHANGES__SERVICE_NS, newServiceNS, newServiceNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.CHANGES__NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNS( ( NS ) otherEnd, msgs );
+        case NsdPackage.CHANGES__SERVICE_NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceNS( ( ServiceNS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.CHANGES__NS:
+            return basicSetNS( null, msgs );
+        case NsdPackage.CHANGES__SERVICE_NS:
+            return basicSetServiceNS( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.CHANGES__NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS__CHANGES, NS.class, msgs );
+        case NsdPackage.CHANGES__SERVICE_NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.SERVICE_NS__CHANGES, ServiceNS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
     }
 
     /**
@@ -290,6 +540,10 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
             return getRevision();
         case NsdPackage.CHANGES__TISSUES:
             return getTissues();
+        case NsdPackage.CHANGES__NS:
+            return getNS();
+        case NsdPackage.CHANGES__SERVICE_NS:
+            return getServiceNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -314,6 +568,12 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
         case NsdPackage.CHANGES__TISSUES:
             setTissues( ( String ) newValue );
             return;
+        case NsdPackage.CHANGES__NS:
+            setNS( ( NS ) newValue );
+            return;
+        case NsdPackage.CHANGES__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -327,16 +587,22 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.CHANGES__CHANGES_ID:
-            setChangesID( CHANGES_ID_EDEFAULT );
+            unsetChangesID();
             return;
         case NsdPackage.CHANGES__DATE:
-            setDate( DATE_EDEFAULT );
+            unsetDate();
             return;
         case NsdPackage.CHANGES__REVISION:
             unsetRevision();
             return;
         case NsdPackage.CHANGES__TISSUES:
-            setTissues( TISSUES_EDEFAULT );
+            unsetTissues();
+            return;
+        case NsdPackage.CHANGES__NS:
+            setNS( ( NS ) null );
+            return;
+        case NsdPackage.CHANGES__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -351,13 +617,17 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.CHANGES__CHANGES_ID:
-            return CHANGES_ID_EDEFAULT == null ? changesID != null : !CHANGES_ID_EDEFAULT.equals( changesID );
+            return isSetChangesID();
         case NsdPackage.CHANGES__DATE:
-            return DATE_EDEFAULT == null ? date != null : !DATE_EDEFAULT.equals( date );
+            return isSetDate();
         case NsdPackage.CHANGES__REVISION:
             return isSetRevision();
         case NsdPackage.CHANGES__TISSUES:
-            return TISSUES_EDEFAULT == null ? tissues != null : !TISSUES_EDEFAULT.equals( tissues );
+            return isSetTissues();
+        case NsdPackage.CHANGES__NS:
+            return getNS() != null;
+        case NsdPackage.CHANGES__SERVICE_NS:
+            return getServiceNS() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -373,16 +643,25 @@ public class ChangesImpl extends NSDObjectWithVersionAndReleaseImpl implements C
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (changesID: " );
-        result.append( changesID );
+        if( changesIDESet )
+            result.append( changesID );
+        else
+            result.append( "<unset>" );
         result.append( ", date: " );
-        result.append( date );
+        if( dateESet )
+            result.append( date );
+        else
+            result.append( "<unset>" );
         result.append( ", revision: " );
         if( revisionESet )
             result.append( revision );
         else
             result.append( "<unset>" );
         result.append( ", tissues: " );
-        result.append( tissues );
+        if( tissuesESet )
+            result.append( tissues );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ConstructedAttributeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ConstructedAttributeImpl.java
index fefd231..a661954 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ConstructedAttributeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ConstructedAttributeImpl.java
@@ -20,7 +20,9 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute;
 
 import java.util.Collection;
@@ -34,8 +36,8 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -48,6 +50,8 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributeImpl#getSubDataAttribute <em>Sub Data Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributeImpl#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributeImpl#getConstructedAttributes <em>Constructed Attributes</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributeImpl#getServiceTypeRealizations <em>Service Type Realizations</em>}</li>
  * </ul>
  *
  * @generated
@@ -83,6 +87,15 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -110,12 +123,33 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
     @Override
     public EList< SubDataAttribute > getSubDataAttribute() {
         if( subDataAttribute == null ) {
-            subDataAttribute = new EObjectContainmentEList< SubDataAttribute >( SubDataAttribute.class, this,
-                    NsdPackage.CONSTRUCTED_ATTRIBUTE__SUB_DATA_ATTRIBUTE );
+            subDataAttribute = new EObjectContainmentWithInverseEList.Unsettable< SubDataAttribute >(
+                    SubDataAttribute.class, this, NsdPackage.CONSTRUCTED_ATTRIBUTE__SUB_DATA_ATTRIBUTE,
+                    NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE );
         }
         return subDataAttribute;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetSubDataAttribute() {
+        if( subDataAttribute != null ) ( ( InternalEList.Unsettable< ? > ) subDataAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetSubDataAttribute() {
+        return subDataAttribute != null && ( ( InternalEList.Unsettable< ? > ) subDataAttribute ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -135,8 +169,154 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
+        boolean oldNameESet = nameESet;
+        nameESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.CONSTRUCTED_ATTRIBUTE__NAME, oldName, name ) );
+                NsdPackage.CONSTRUCTED_ATTRIBUTE__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.CONSTRUCTED_ATTRIBUTE__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ConstructedAttributes getConstructedAttributes() {
+        if( eContainerFeatureID() != NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES ) return null;
+        return ( ConstructedAttributes ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetConstructedAttributes( ConstructedAttributes newConstructedAttributes,
+            NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newConstructedAttributes,
+                NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setConstructedAttributes( ConstructedAttributes newConstructedAttributes ) {
+        if( newConstructedAttributes != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES
+                        && newConstructedAttributes != null ) ) {
+            if( EcoreUtil.isAncestor( this, newConstructedAttributes ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newConstructedAttributes != null )
+                msgs = ( ( InternalEObject ) newConstructedAttributes ).eInverseAdd( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE, ConstructedAttributes.class, msgs );
+            msgs = basicSetConstructedAttributes( newConstructedAttributes, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES,
+                        newConstructedAttributes, newConstructedAttributes ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceTypeRealizations getServiceTypeRealizations() {
+        if( eContainerFeatureID() != NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS ) return null;
+        return ( ServiceTypeRealizations ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceTypeRealizations( ServiceTypeRealizations newServiceTypeRealizations,
+            NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceTypeRealizations,
+                NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceTypeRealizations( ServiceTypeRealizations newServiceTypeRealizations ) {
+        if( newServiceTypeRealizations != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS
+                        && newServiceTypeRealizations != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceTypeRealizations ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceTypeRealizations != null )
+                msgs = ( ( InternalEObject ) newServiceTypeRealizations ).eInverseAdd( this,
+                        NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION, ServiceTypeRealizations.class,
+                        msgs );
+            msgs = basicSetServiceTypeRealizations( newServiceTypeRealizations, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS, newServiceTypeRealizations,
+                newServiceTypeRealizations ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__SUB_DATA_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getSubDataAttribute() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetConstructedAttributes( ( ConstructedAttributes ) otherEnd, msgs );
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceTypeRealizations( ( ServiceTypeRealizations ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -149,10 +329,33 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
         switch( featureID ) {
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__SUB_DATA_ATTRIBUTE:
             return ( ( InternalEList< ? > ) getSubDataAttribute() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES:
+            return basicSetConstructedAttributes( null, msgs );
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS:
+            return basicSetServiceTypeRealizations( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE,
+                    ConstructedAttributes.class, msgs );
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS:
+            return eInternalContainer().eInverseRemove( this,
+                    NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION, ServiceTypeRealizations.class,
+                    msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -165,6 +368,10 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
             return getSubDataAttribute();
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__NAME:
             return getName();
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES:
+            return getConstructedAttributes();
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS:
+            return getServiceTypeRealizations();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -185,6 +392,12 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__NAME:
             setName( ( String ) newValue );
             return;
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES:
+            setConstructedAttributes( ( ConstructedAttributes ) newValue );
+            return;
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS:
+            setServiceTypeRealizations( ( ServiceTypeRealizations ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -198,10 +411,16 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__SUB_DATA_ATTRIBUTE:
-            getSubDataAttribute().clear();
+            unsetSubDataAttribute();
             return;
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
+            return;
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES:
+            setConstructedAttributes( ( ConstructedAttributes ) null );
+            return;
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS:
+            setServiceTypeRealizations( ( ServiceTypeRealizations ) null );
             return;
         }
         super.eUnset( featureID );
@@ -216,9 +435,13 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__SUB_DATA_ATTRIBUTE:
-            return subDataAttribute != null && !subDataAttribute.isEmpty();
+            return isSetSubDataAttribute();
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES:
+            return getConstructedAttributes() != null;
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS:
+            return getServiceTypeRealizations() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -234,7 +457,10 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ConstructedAttributesImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ConstructedAttributesImpl.java
index 0772915..b3a60f2 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ConstructedAttributesImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ConstructedAttributesImpl.java
@@ -21,10 +21,12 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 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;
@@ -32,9 +34,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -46,6 +49,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributesImpl#getConstructedAttribute <em>Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributesImpl#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -88,12 +92,95 @@ public class ConstructedAttributesImpl extends MinimalEObjectImpl.Container impl
     @Override
     public EList< ConstructedAttribute > getConstructedAttribute() {
         if( constructedAttribute == null ) {
-            constructedAttribute = new EObjectContainmentEList< ConstructedAttribute >( ConstructedAttribute.class,
-                    this, NsdPackage.CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE );
+            constructedAttribute = new EObjectContainmentWithInverseEList.Unsettable< ConstructedAttribute >(
+                    ConstructedAttribute.class, this, NsdPackage.CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE,
+                    NsdPackage.CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES );
         }
         return constructedAttribute;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetConstructedAttribute() {
+        if( constructedAttribute != null ) ( ( InternalEList.Unsettable< ? > ) constructedAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetConstructedAttribute() {
+        return constructedAttribute != null && ( ( InternalEList.Unsettable< ? > ) constructedAttribute ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NS getNS() {
+        if( eContainerFeatureID() != NsdPackage.CONSTRUCTED_ATTRIBUTES__NS ) return null;
+        return ( NS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNS( NS newNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNS, NsdPackage.CONSTRUCTED_ATTRIBUTES__NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNS( NS newNS ) {
+        if( newNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.CONSTRUCTED_ATTRIBUTES__NS && newNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNS != null ) msgs = ( ( InternalEObject ) newNS ).eInverseAdd( this,
+                    NsdPackage.NS__CONSTRUCTED_ATTRIBUTES, NS.class, msgs );
+            msgs = basicSetNS( newNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.CONSTRUCTED_ATTRIBUTES__NS, newNS, newNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getConstructedAttribute() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.CONSTRUCTED_ATTRIBUTES__NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNS( ( NS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -104,10 +191,26 @@ public class ConstructedAttributesImpl extends MinimalEObjectImpl.Container impl
         switch( featureID ) {
         case NsdPackage.CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE:
             return ( ( InternalEList< ? > ) getConstructedAttribute() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.CONSTRUCTED_ATTRIBUTES__NS:
+            return basicSetNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.CONSTRUCTED_ATTRIBUTES__NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS__CONSTRUCTED_ATTRIBUTES, NS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -118,6 +221,8 @@ public class ConstructedAttributesImpl extends MinimalEObjectImpl.Container impl
         switch( featureID ) {
         case NsdPackage.CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE:
             return getConstructedAttribute();
+        case NsdPackage.CONSTRUCTED_ATTRIBUTES__NS:
+            return getNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -135,6 +240,9 @@ public class ConstructedAttributesImpl extends MinimalEObjectImpl.Container impl
             getConstructedAttribute().clear();
             getConstructedAttribute().addAll( ( Collection< ? extends ConstructedAttribute > ) newValue );
             return;
+        case NsdPackage.CONSTRUCTED_ATTRIBUTES__NS:
+            setNS( ( NS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -148,7 +256,10 @@ public class ConstructedAttributesImpl extends MinimalEObjectImpl.Container impl
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE:
-            getConstructedAttribute().clear();
+            unsetConstructedAttribute();
+            return;
+        case NsdPackage.CONSTRUCTED_ATTRIBUTES__NS:
+            setNS( ( NS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -163,7 +274,9 @@ public class ConstructedAttributesImpl extends MinimalEObjectImpl.Container impl
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE:
-            return constructedAttribute != null && !constructedAttribute.isEmpty();
+            return isSetConstructedAttribute();
+        case NsdPackage.CONSTRUCTED_ATTRIBUTES__NS:
+            return getNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CopyrightNoticeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CopyrightNoticeImpl.java
index c98b424..ebaa5d9 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CopyrightNoticeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CopyrightNoticeImpl.java
@@ -20,6 +20,7 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Copyrighted;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.License;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Notice;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
@@ -32,6 +33,7 @@ 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.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -43,6 +45,7 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CopyrightNoticeImpl#getNotice <em>Notice</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CopyrightNoticeImpl#getLicense <em>License</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CopyrightNoticeImpl#getCopyrighted <em>Copyrighted</em>}</li>
  * </ul>
  *
  * @generated
@@ -58,6 +61,15 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
      */
     protected Notice notice;
 
+    /**
+     * This is true if the Notice containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean noticeESet;
+
     /**
      * The cached value of the '{@link #getLicense() <em>License</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -68,6 +80,15 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
      */
     protected License license;
 
+    /**
+     * This is true if the License containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean licenseESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -105,9 +126,11 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
     public NotificationChain basicSetNotice( Notice newNotice, NotificationChain msgs ) {
         Notice oldNotice = notice;
         notice = newNotice;
+        boolean oldNoticeESet = noticeESet;
+        noticeESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.COPYRIGHT_NOTICE__NOTICE, oldNotice, newNotice );
+                    NsdPackage.COPYRIGHT_NOTICE__NOTICE, oldNotice, newNotice, !oldNoticeESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -126,14 +149,71 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
         if( newNotice != notice ) {
             NotificationChain msgs = null;
             if( notice != null ) msgs = ( ( InternalEObject ) notice ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.COPYRIGHT_NOTICE__NOTICE, null, msgs );
+                    NsdPackage.NOTICE__COPYRIGHT_NOTICE, Notice.class, msgs );
             if( newNotice != null ) msgs = ( ( InternalEObject ) newNotice ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.COPYRIGHT_NOTICE__NOTICE, null, msgs );
+                    NsdPackage.NOTICE__COPYRIGHT_NOTICE, Notice.class, msgs );
             msgs = basicSetNotice( newNotice, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.COPYRIGHT_NOTICE__NOTICE, newNotice, newNotice ) );
+        else {
+            boolean oldNoticeESet = noticeESet;
+            noticeESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.COPYRIGHT_NOTICE__NOTICE, newNotice, newNotice, !oldNoticeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetNotice( NotificationChain msgs ) {
+        Notice oldNotice = notice;
+        notice = null;
+        boolean oldNoticeESet = noticeESet;
+        noticeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.COPYRIGHT_NOTICE__NOTICE, oldNotice, null, oldNoticeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetNotice() {
+        if( notice != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) notice ).eInverseRemove( this, NsdPackage.NOTICE__COPYRIGHT_NOTICE,
+                    Notice.class, msgs );
+            msgs = basicUnsetNotice( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldNoticeESet = noticeESet;
+            noticeESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.COPYRIGHT_NOTICE__NOTICE, null, null, oldNoticeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetNotice() {
+        return noticeESet;
     }
 
     /**
@@ -154,9 +234,11 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
     public NotificationChain basicSetLicense( License newLicense, NotificationChain msgs ) {
         License oldLicense = license;
         license = newLicense;
+        boolean oldLicenseESet = licenseESet;
+        licenseESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.COPYRIGHT_NOTICE__LICENSE, oldLicense, newLicense );
+                    NsdPackage.COPYRIGHT_NOTICE__LICENSE, oldLicense, newLicense, !oldLicenseESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -175,14 +257,137 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
         if( newLicense != license ) {
             NotificationChain msgs = null;
             if( license != null ) msgs = ( ( InternalEObject ) license ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.COPYRIGHT_NOTICE__LICENSE, null, msgs );
+                    NsdPackage.LICENSE__COPYRIGHT_NOTICE, License.class, msgs );
             if( newLicense != null ) msgs = ( ( InternalEObject ) newLicense ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.COPYRIGHT_NOTICE__LICENSE, null, msgs );
+                    NsdPackage.LICENSE__COPYRIGHT_NOTICE, License.class, msgs );
             msgs = basicSetLicense( newLicense, msgs );
             if( msgs != null ) msgs.dispatch();
         }
+        else {
+            boolean oldLicenseESet = licenseESet;
+            licenseESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.COPYRIGHT_NOTICE__LICENSE, newLicense, newLicense, !oldLicenseESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetLicense( NotificationChain msgs ) {
+        License oldLicense = license;
+        license = null;
+        boolean oldLicenseESet = licenseESet;
+        licenseESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.COPYRIGHT_NOTICE__LICENSE, oldLicense, null, oldLicenseESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetLicense() {
+        if( license != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) license ).eInverseRemove( this, NsdPackage.LICENSE__COPYRIGHT_NOTICE,
+                    License.class, msgs );
+            msgs = basicUnsetLicense( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldLicenseESet = licenseESet;
+            licenseESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.COPYRIGHT_NOTICE__LICENSE, null, null, oldLicenseESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetLicense() {
+        return licenseESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Copyrighted getCopyrighted() {
+        if( eContainerFeatureID() != NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED ) return null;
+        return ( Copyrighted ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetCopyrighted( Copyrighted newCopyrighted, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newCopyrighted, NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setCopyrighted( Copyrighted newCopyrighted ) {
+        if( newCopyrighted != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED && newCopyrighted != null ) ) {
+            if( EcoreUtil.isAncestor( this, newCopyrighted ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newCopyrighted != null ) msgs = ( ( InternalEObject ) newCopyrighted ).eInverseAdd( this,
+                    NsdPackage.COPYRIGHTED__COPYRIGHT, Copyrighted.class, msgs );
+            msgs = basicSetCopyrighted( newCopyrighted, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
         else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.COPYRIGHT_NOTICE__LICENSE, newLicense, newLicense ) );
+                NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED, newCopyrighted, newCopyrighted ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.COPYRIGHT_NOTICE__NOTICE:
+            if( notice != null ) msgs = ( ( InternalEObject ) notice ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.COPYRIGHT_NOTICE__NOTICE, null, msgs );
+            return basicSetNotice( ( Notice ) otherEnd, msgs );
+        case NsdPackage.COPYRIGHT_NOTICE__LICENSE:
+            if( license != null ) msgs = ( ( InternalEObject ) license ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.COPYRIGHT_NOTICE__LICENSE, null, msgs );
+            return basicSetLicense( ( License ) otherEnd, msgs );
+        case NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetCopyrighted( ( Copyrighted ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -194,13 +399,30 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
     public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
         switch( featureID ) {
         case NsdPackage.COPYRIGHT_NOTICE__NOTICE:
-            return basicSetNotice( null, msgs );
+            return basicUnsetNotice( msgs );
         case NsdPackage.COPYRIGHT_NOTICE__LICENSE:
-            return basicSetLicense( null, msgs );
+            return basicUnsetLicense( msgs );
+        case NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED:
+            return basicSetCopyrighted( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.COPYRIGHTED__COPYRIGHT, Copyrighted.class,
+                    msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -213,6 +435,8 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
             return getNotice();
         case NsdPackage.COPYRIGHT_NOTICE__LICENSE:
             return getLicense();
+        case NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED:
+            return getCopyrighted();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -231,6 +455,9 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
         case NsdPackage.COPYRIGHT_NOTICE__LICENSE:
             setLicense( ( License ) newValue );
             return;
+        case NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED:
+            setCopyrighted( ( Copyrighted ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -244,10 +471,13 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.COPYRIGHT_NOTICE__NOTICE:
-            setNotice( ( Notice ) null );
+            unsetNotice();
             return;
         case NsdPackage.COPYRIGHT_NOTICE__LICENSE:
-            setLicense( ( License ) null );
+            unsetLicense();
+            return;
+        case NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED:
+            setCopyrighted( ( Copyrighted ) null );
             return;
         }
         super.eUnset( featureID );
@@ -262,9 +492,11 @@ public class CopyrightNoticeImpl extends MinimalEObjectImpl.Container implements
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.COPYRIGHT_NOTICE__NOTICE:
-            return notice != null;
+            return isSetNotice();
         case NsdPackage.COPYRIGHT_NOTICE__LICENSE:
-            return license != null;
+            return isSetLicense();
+        case NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED:
+            return getCopyrighted() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CopyrightedImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CopyrightedImpl.java
index 8e1ebbc..d1b4ba6 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CopyrightedImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CopyrightedImpl.java
@@ -56,6 +56,15 @@ public class CopyrightedImpl extends MinimalEObjectImpl.Container implements Cop
      */
     protected CopyrightNotice copyright;
 
+    /**
+     * This is true if the Copyright containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean copyrightESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -93,9 +102,11 @@ public class CopyrightedImpl extends MinimalEObjectImpl.Container implements Cop
     public NotificationChain basicSetCopyright( CopyrightNotice newCopyright, NotificationChain msgs ) {
         CopyrightNotice oldCopyright = copyright;
         copyright = newCopyright;
+        boolean oldCopyrightESet = copyrightESet;
+        copyrightESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.COPYRIGHTED__COPYRIGHT, oldCopyright, newCopyright );
+                    NsdPackage.COPYRIGHTED__COPYRIGHT, oldCopyright, newCopyright, !oldCopyrightESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -114,14 +125,87 @@ public class CopyrightedImpl extends MinimalEObjectImpl.Container implements Cop
         if( newCopyright != copyright ) {
             NotificationChain msgs = null;
             if( copyright != null ) msgs = ( ( InternalEObject ) copyright ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.COPYRIGHTED__COPYRIGHT, null, msgs );
+                    NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED, CopyrightNotice.class, msgs );
             if( newCopyright != null ) msgs = ( ( InternalEObject ) newCopyright ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.COPYRIGHTED__COPYRIGHT, null, msgs );
+                    NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED, CopyrightNotice.class, msgs );
             msgs = basicSetCopyright( newCopyright, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.COPYRIGHTED__COPYRIGHT, newCopyright, newCopyright ) );
+        else {
+            boolean oldCopyrightESet = copyrightESet;
+            copyrightESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.COPYRIGHTED__COPYRIGHT, newCopyright, newCopyright, !oldCopyrightESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetCopyright( NotificationChain msgs ) {
+        CopyrightNotice oldCopyright = copyright;
+        copyright = null;
+        boolean oldCopyrightESet = copyrightESet;
+        copyrightESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.COPYRIGHTED__COPYRIGHT, oldCopyright, null, oldCopyrightESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetCopyright() {
+        if( copyright != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) copyright ).eInverseRemove( this, NsdPackage.COPYRIGHT_NOTICE__COPYRIGHTED,
+                    CopyrightNotice.class, msgs );
+            msgs = basicUnsetCopyright( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldCopyrightESet = copyrightESet;
+            copyrightESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.COPYRIGHTED__COPYRIGHT, null, null, oldCopyrightESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetCopyright() {
+        return copyrightESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.COPYRIGHTED__COPYRIGHT:
+            if( copyright != null ) msgs = ( ( InternalEObject ) copyright ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.COPYRIGHTED__COPYRIGHT, null, msgs );
+            return basicSetCopyright( ( CopyrightNotice ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -133,7 +217,7 @@ public class CopyrightedImpl extends MinimalEObjectImpl.Container implements Cop
     public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
         switch( featureID ) {
         case NsdPackage.COPYRIGHTED__COPYRIGHT:
-            return basicSetCopyright( null, msgs );
+            return basicUnsetCopyright( msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -176,7 +260,7 @@ public class CopyrightedImpl extends MinimalEObjectImpl.Container implements Cop
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.COPYRIGHTED__COPYRIGHT:
-            setCopyright( ( CopyrightNotice ) null );
+            unsetCopyright();
             return;
         }
         super.eUnset( featureID );
@@ -191,7 +275,7 @@ public class CopyrightedImpl extends MinimalEObjectImpl.Container implements Cop
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.COPYRIGHTED__COPYRIGHT:
-            return copyright != null;
+            return isSetCopyright();
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataAttributeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataAttributeImpl.java
index a11aaf9..aff3388 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataAttributeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataAttributeImpl.java
@@ -19,6 +19,7 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
@@ -27,11 +28,14 @@ import java.math.BigDecimal;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.Enumerator;
 
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -58,6 +62,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getSizeAttribute <em>Size Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getTypeKind <em>Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getCDC <em>CDC</em>}</li>
  * </ul>
  *
  * @generated
@@ -112,6 +117,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected String defaultValue = DEFAULT_VALUE_EDEFAULT;
 
+    /**
+     * This is true if the Default Value attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean defaultValueESet;
+
     /**
      * The default value of the '{@link #isDupd() <em>Dupd</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -161,6 +175,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected String fc = FC_EDEFAULT;
 
+    /**
+     * This is true if the Fc attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean fcESet;
+
     /**
      * The default value of the '{@link #isIsArray() <em>Is Array</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -210,6 +233,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected String maxIndexAttribute = MAX_INDEX_ATTRIBUTE_EDEFAULT;
 
+    /**
+     * This is true if the Max Index Attribute attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean maxIndexAttributeESet;
+
     /**
      * The default value of the '{@link #getMaxValue() <em>Max Value</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -230,6 +262,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected BigDecimal maxValue = MAX_VALUE_EDEFAULT;
 
+    /**
+     * This is true if the Max Value attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean maxValueESet;
+
     /**
      * The default value of the '{@link #getMinIndex() <em>Min Index</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -279,6 +320,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected BigDecimal minValue = MIN_VALUE_EDEFAULT;
 
+    /**
+     * This is true if the Min Value attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean minValueESet;
+
     /**
      * The default value of the '{@link #getName() <em>Name</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -299,6 +349,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * The default value of the '{@link #getPresCond() <em>Pres Cond</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -348,6 +407,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected String presCondArgs = PRES_COND_ARGS_EDEFAULT;
 
+    /**
+     * This is true if the Pres Cond Args attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presCondArgsESet;
+
     /**
      * The default value of the '{@link #getPresCondArgsID() <em>Pres Cond Args ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -368,6 +436,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected String presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
 
+    /**
+     * This is true if the Pres Cond Args ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presCondArgsIDESet;
+
     /**
      * The default value of the '{@link #isQchg() <em>Qchg</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -417,6 +494,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected String sizeAttribute = SIZE_ATTRIBUTE_EDEFAULT;
 
+    /**
+     * This is true if the Size Attribute attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean sizeAttributeESet;
+
     /**
      * The default value of the '{@link #getType() <em>Type</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -437,6 +523,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected String type = TYPE_EDEFAULT;
 
+    /**
+     * This is true if the Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean typeESet;
+
     /**
      * The default value of the '{@link #getTypeKind() <em>Type Kind</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -555,8 +650,36 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
     public void setDefaultValue( String newDefaultValue ) {
         String oldDefaultValue = defaultValue;
         defaultValue = newDefaultValue;
+        boolean oldDefaultValueESet = defaultValueESet;
+        defaultValueESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_ATTRIBUTE__DEFAULT_VALUE, oldDefaultValue, defaultValue ) );
+                NsdPackage.DATA_ATTRIBUTE__DEFAULT_VALUE, oldDefaultValue, defaultValue, !oldDefaultValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDefaultValue() {
+        String oldDefaultValue = defaultValue;
+        boolean oldDefaultValueESet = defaultValueESet;
+        defaultValue = DEFAULT_VALUE_EDEFAULT;
+        defaultValueESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DATA_ATTRIBUTE__DEFAULT_VALUE,
+                    oldDefaultValue, DEFAULT_VALUE_EDEFAULT, oldDefaultValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDefaultValue() {
+        return defaultValueESet;
     }
 
     /**
@@ -628,8 +751,35 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
     public void setFc( String newFc ) {
         String oldFc = fc;
         fc = newFc;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_ATTRIBUTE__FC, oldFc, fc ) );
+        boolean oldFcESet = fcESet;
+        fcESet = true;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_ATTRIBUTE__FC, oldFc, fc, !oldFcESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetFc() {
+        String oldFc = fc;
+        boolean oldFcESet = fcESet;
+        fc = FC_EDEFAULT;
+        fcESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.DATA_ATTRIBUTE__FC, oldFc, FC_EDEFAULT, oldFcESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetFc() {
+        return fcESet;
     }
 
     /**
@@ -701,8 +851,37 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
     public void setMaxIndexAttribute( String newMaxIndexAttribute ) {
         String oldMaxIndexAttribute = maxIndexAttribute;
         maxIndexAttribute = newMaxIndexAttribute;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_ATTRIBUTE__MAX_INDEX_ATTRIBUTE, oldMaxIndexAttribute, maxIndexAttribute ) );
+        boolean oldMaxIndexAttributeESet = maxIndexAttributeESet;
+        maxIndexAttributeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_ATTRIBUTE__MAX_INDEX_ATTRIBUTE,
+                    oldMaxIndexAttribute, maxIndexAttribute, !oldMaxIndexAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetMaxIndexAttribute() {
+        String oldMaxIndexAttribute = maxIndexAttribute;
+        boolean oldMaxIndexAttributeESet = maxIndexAttributeESet;
+        maxIndexAttribute = MAX_INDEX_ATTRIBUTE_EDEFAULT;
+        maxIndexAttributeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DATA_ATTRIBUTE__MAX_INDEX_ATTRIBUTE,
+                    oldMaxIndexAttribute, MAX_INDEX_ATTRIBUTE_EDEFAULT, oldMaxIndexAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetMaxIndexAttribute() {
+        return maxIndexAttributeESet;
     }
 
     /**
@@ -724,8 +903,35 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
     public void setMaxValue( BigDecimal newMaxValue ) {
         BigDecimal oldMaxValue = maxValue;
         maxValue = newMaxValue;
+        boolean oldMaxValueESet = maxValueESet;
+        maxValueESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_ATTRIBUTE__MAX_VALUE, oldMaxValue, maxValue ) );
+                NsdPackage.DATA_ATTRIBUTE__MAX_VALUE, oldMaxValue, maxValue, !oldMaxValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetMaxValue() {
+        BigDecimal oldMaxValue = maxValue;
+        boolean oldMaxValueESet = maxValueESet;
+        maxValue = MAX_VALUE_EDEFAULT;
+        maxValueESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.DATA_ATTRIBUTE__MAX_VALUE, oldMaxValue, MAX_VALUE_EDEFAULT, oldMaxValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetMaxValue() {
+        return maxValueESet;
     }
 
     /**
@@ -797,8 +1003,35 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
     public void setMinValue( BigDecimal newMinValue ) {
         BigDecimal oldMinValue = minValue;
         minValue = newMinValue;
+        boolean oldMinValueESet = minValueESet;
+        minValueESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_ATTRIBUTE__MIN_VALUE, oldMinValue, minValue ) );
+                NsdPackage.DATA_ATTRIBUTE__MIN_VALUE, oldMinValue, minValue, !oldMinValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetMinValue() {
+        BigDecimal oldMinValue = minValue;
+        boolean oldMinValueESet = minValueESet;
+        minValue = MIN_VALUE_EDEFAULT;
+        minValueESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.DATA_ATTRIBUTE__MIN_VALUE, oldMinValue, MIN_VALUE_EDEFAULT, oldMinValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetMinValue() {
+        return minValueESet;
     }
 
     /**
@@ -820,8 +1053,35 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_ATTRIBUTE__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.DATA_ATTRIBUTE__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.DATA_ATTRIBUTE__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
     }
 
     /**
@@ -893,8 +1153,36 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
     public void setPresCondArgs( String newPresCondArgs ) {
         String oldPresCondArgs = presCondArgs;
         presCondArgs = newPresCondArgs;
+        boolean oldPresCondArgsESet = presCondArgsESet;
+        presCondArgsESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_ATTRIBUTE__PRES_COND_ARGS, oldPresCondArgs, presCondArgs ) );
+                NsdPackage.DATA_ATTRIBUTE__PRES_COND_ARGS, oldPresCondArgs, presCondArgs, !oldPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresCondArgs() {
+        String oldPresCondArgs = presCondArgs;
+        boolean oldPresCondArgsESet = presCondArgsESet;
+        presCondArgs = PRES_COND_ARGS_EDEFAULT;
+        presCondArgsESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DATA_ATTRIBUTE__PRES_COND_ARGS,
+                    oldPresCondArgs, PRES_COND_ARGS_EDEFAULT, oldPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresCondArgs() {
+        return presCondArgsESet;
     }
 
     /**
@@ -916,8 +1204,37 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
     public void setPresCondArgsID( String newPresCondArgsID ) {
         String oldPresCondArgsID = presCondArgsID;
         presCondArgsID = newPresCondArgsID;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_ATTRIBUTE__PRES_COND_ARGS_ID, oldPresCondArgsID, presCondArgsID ) );
+        boolean oldPresCondArgsIDESet = presCondArgsIDESet;
+        presCondArgsIDESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_ATTRIBUTE__PRES_COND_ARGS_ID,
+                    oldPresCondArgsID, presCondArgsID, !oldPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresCondArgsID() {
+        String oldPresCondArgsID = presCondArgsID;
+        boolean oldPresCondArgsIDESet = presCondArgsIDESet;
+        presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
+        presCondArgsIDESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DATA_ATTRIBUTE__PRES_COND_ARGS_ID,
+                    oldPresCondArgsID, PRES_COND_ARGS_ID_EDEFAULT, oldPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresCondArgsID() {
+        return presCondArgsIDESet;
     }
 
     /**
@@ -989,8 +1306,36 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
     public void setSizeAttribute( String newSizeAttribute ) {
         String oldSizeAttribute = sizeAttribute;
         sizeAttribute = newSizeAttribute;
+        boolean oldSizeAttributeESet = sizeAttributeESet;
+        sizeAttributeESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_ATTRIBUTE__SIZE_ATTRIBUTE, oldSizeAttribute, sizeAttribute ) );
+                NsdPackage.DATA_ATTRIBUTE__SIZE_ATTRIBUTE, oldSizeAttribute, sizeAttribute, !oldSizeAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetSizeAttribute() {
+        String oldSizeAttribute = sizeAttribute;
+        boolean oldSizeAttributeESet = sizeAttributeESet;
+        sizeAttribute = SIZE_ATTRIBUTE_EDEFAULT;
+        sizeAttributeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DATA_ATTRIBUTE__SIZE_ATTRIBUTE,
+                    oldSizeAttribute, SIZE_ATTRIBUTE_EDEFAULT, oldSizeAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetSizeAttribute() {
+        return sizeAttributeESet;
     }
 
     /**
@@ -1012,8 +1357,35 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
     public void setType( String newType ) {
         String oldType = type;
         type = newType;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_ATTRIBUTE__TYPE, oldType, type ) );
+        boolean oldTypeESet = typeESet;
+        typeESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.DATA_ATTRIBUTE__TYPE, oldType, type, !oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetType() {
+        String oldType = type;
+        boolean oldTypeESet = typeESet;
+        type = TYPE_EDEFAULT;
+        typeESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.DATA_ATTRIBUTE__TYPE, oldType, TYPE_EDEFAULT, oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetType() {
+        return typeESet;
     }
 
     /**
@@ -1066,6 +1438,92 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         return typeKindESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public CDC getCDC() {
+        if( eContainerFeatureID() != NsdPackage.DATA_ATTRIBUTE__CDC ) return null;
+        return ( CDC ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetCDC( CDC newCDC, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newCDC, NsdPackage.DATA_ATTRIBUTE__CDC, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setCDC( CDC newCDC ) {
+        if( newCDC != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.DATA_ATTRIBUTE__CDC && newCDC != null ) ) {
+            if( EcoreUtil.isAncestor( this, newCDC ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newCDC != null ) msgs = ( ( InternalEObject ) newCDC ).eInverseAdd( this,
+                    NsdPackage.CDC__DATA_ATTRIBUTE, CDC.class, msgs );
+            msgs = basicSetCDC( newCDC, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_ATTRIBUTE__CDC, newCDC, newCDC ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.DATA_ATTRIBUTE__CDC:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetCDC( ( CDC ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.DATA_ATTRIBUTE__CDC:
+            return basicSetCDC( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.DATA_ATTRIBUTE__CDC:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.CDC__DATA_ATTRIBUTE, CDC.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1108,6 +1566,8 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             return getType();
         case NsdPackage.DATA_ATTRIBUTE__TYPE_KIND:
             return getTypeKind();
+        case NsdPackage.DATA_ATTRIBUTE__CDC:
+            return getCDC();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -1171,6 +1631,9 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__TYPE_KIND:
             setTypeKind( ( Enumerator ) newValue );
             return;
+        case NsdPackage.DATA_ATTRIBUTE__CDC:
+            setCDC( ( CDC ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -1187,53 +1650,56 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             unsetDchg();
             return;
         case NsdPackage.DATA_ATTRIBUTE__DEFAULT_VALUE:
-            setDefaultValue( DEFAULT_VALUE_EDEFAULT );
+            unsetDefaultValue();
             return;
         case NsdPackage.DATA_ATTRIBUTE__DUPD:
             unsetDupd();
             return;
         case NsdPackage.DATA_ATTRIBUTE__FC:
-            setFc( FC_EDEFAULT );
+            unsetFc();
             return;
         case NsdPackage.DATA_ATTRIBUTE__IS_ARRAY:
             unsetIsArray();
             return;
         case NsdPackage.DATA_ATTRIBUTE__MAX_INDEX_ATTRIBUTE:
-            setMaxIndexAttribute( MAX_INDEX_ATTRIBUTE_EDEFAULT );
+            unsetMaxIndexAttribute();
             return;
         case NsdPackage.DATA_ATTRIBUTE__MAX_VALUE:
-            setMaxValue( MAX_VALUE_EDEFAULT );
+            unsetMaxValue();
             return;
         case NsdPackage.DATA_ATTRIBUTE__MIN_INDEX:
             unsetMinIndex();
             return;
         case NsdPackage.DATA_ATTRIBUTE__MIN_VALUE:
-            setMinValue( MIN_VALUE_EDEFAULT );
+            unsetMinValue();
             return;
         case NsdPackage.DATA_ATTRIBUTE__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
             return;
         case NsdPackage.DATA_ATTRIBUTE__PRES_COND:
             unsetPresCond();
             return;
         case NsdPackage.DATA_ATTRIBUTE__PRES_COND_ARGS:
-            setPresCondArgs( PRES_COND_ARGS_EDEFAULT );
+            unsetPresCondArgs();
             return;
         case NsdPackage.DATA_ATTRIBUTE__PRES_COND_ARGS_ID:
-            setPresCondArgsID( PRES_COND_ARGS_ID_EDEFAULT );
+            unsetPresCondArgsID();
             return;
         case NsdPackage.DATA_ATTRIBUTE__QCHG:
             unsetQchg();
             return;
         case NsdPackage.DATA_ATTRIBUTE__SIZE_ATTRIBUTE:
-            setSizeAttribute( SIZE_ATTRIBUTE_EDEFAULT );
+            unsetSizeAttribute();
             return;
         case NsdPackage.DATA_ATTRIBUTE__TYPE:
-            setType( TYPE_EDEFAULT );
+            unsetType();
             return;
         case NsdPackage.DATA_ATTRIBUTE__TYPE_KIND:
             unsetTypeKind();
             return;
+        case NsdPackage.DATA_ATTRIBUTE__CDC:
+            setCDC( ( CDC ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -1249,42 +1715,39 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__DCHG:
             return isSetDchg();
         case NsdPackage.DATA_ATTRIBUTE__DEFAULT_VALUE:
-            return DEFAULT_VALUE_EDEFAULT == null ? defaultValue != null
-                    : !DEFAULT_VALUE_EDEFAULT.equals( defaultValue );
+            return isSetDefaultValue();
         case NsdPackage.DATA_ATTRIBUTE__DUPD:
             return isSetDupd();
         case NsdPackage.DATA_ATTRIBUTE__FC:
-            return FC_EDEFAULT == null ? fc != null : !FC_EDEFAULT.equals( fc );
+            return isSetFc();
         case NsdPackage.DATA_ATTRIBUTE__IS_ARRAY:
             return isSetIsArray();
         case NsdPackage.DATA_ATTRIBUTE__MAX_INDEX_ATTRIBUTE:
-            return MAX_INDEX_ATTRIBUTE_EDEFAULT == null ? maxIndexAttribute != null
-                    : !MAX_INDEX_ATTRIBUTE_EDEFAULT.equals( maxIndexAttribute );
+            return isSetMaxIndexAttribute();
         case NsdPackage.DATA_ATTRIBUTE__MAX_VALUE:
-            return MAX_VALUE_EDEFAULT == null ? maxValue != null : !MAX_VALUE_EDEFAULT.equals( maxValue );
+            return isSetMaxValue();
         case NsdPackage.DATA_ATTRIBUTE__MIN_INDEX:
             return isSetMinIndex();
         case NsdPackage.DATA_ATTRIBUTE__MIN_VALUE:
-            return MIN_VALUE_EDEFAULT == null ? minValue != null : !MIN_VALUE_EDEFAULT.equals( minValue );
+            return isSetMinValue();
         case NsdPackage.DATA_ATTRIBUTE__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
         case NsdPackage.DATA_ATTRIBUTE__PRES_COND:
             return isSetPresCond();
         case NsdPackage.DATA_ATTRIBUTE__PRES_COND_ARGS:
-            return PRES_COND_ARGS_EDEFAULT == null ? presCondArgs != null
-                    : !PRES_COND_ARGS_EDEFAULT.equals( presCondArgs );
+            return isSetPresCondArgs();
         case NsdPackage.DATA_ATTRIBUTE__PRES_COND_ARGS_ID:
-            return PRES_COND_ARGS_ID_EDEFAULT == null ? presCondArgsID != null
-                    : !PRES_COND_ARGS_ID_EDEFAULT.equals( presCondArgsID );
+            return isSetPresCondArgsID();
         case NsdPackage.DATA_ATTRIBUTE__QCHG:
             return isSetQchg();
         case NsdPackage.DATA_ATTRIBUTE__SIZE_ATTRIBUTE:
-            return SIZE_ATTRIBUTE_EDEFAULT == null ? sizeAttribute != null
-                    : !SIZE_ATTRIBUTE_EDEFAULT.equals( sizeAttribute );
+            return isSetSizeAttribute();
         case NsdPackage.DATA_ATTRIBUTE__TYPE:
-            return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals( type );
+            return isSetType();
         case NsdPackage.DATA_ATTRIBUTE__TYPE_KIND:
             return isSetTypeKind();
+        case NsdPackage.DATA_ATTRIBUTE__CDC:
+            return getCDC() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -1305,50 +1768,80 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         else
             result.append( "<unset>" );
         result.append( ", defaultValue: " );
-        result.append( defaultValue );
+        if( defaultValueESet )
+            result.append( defaultValue );
+        else
+            result.append( "<unset>" );
         result.append( ", dupd: " );
         if( dupdESet )
             result.append( dupd );
         else
             result.append( "<unset>" );
         result.append( ", fc: " );
-        result.append( fc );
+        if( fcESet )
+            result.append( fc );
+        else
+            result.append( "<unset>" );
         result.append( ", isArray: " );
         if( isArrayESet )
             result.append( isArray );
         else
             result.append( "<unset>" );
         result.append( ", maxIndexAttribute: " );
-        result.append( maxIndexAttribute );
+        if( maxIndexAttributeESet )
+            result.append( maxIndexAttribute );
+        else
+            result.append( "<unset>" );
         result.append( ", maxValue: " );
-        result.append( maxValue );
+        if( maxValueESet )
+            result.append( maxValue );
+        else
+            result.append( "<unset>" );
         result.append( ", minIndex: " );
         if( minIndexESet )
             result.append( minIndex );
         else
             result.append( "<unset>" );
         result.append( ", minValue: " );
-        result.append( minValue );
+        if( minValueESet )
+            result.append( minValue );
+        else
+            result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ", presCond: " );
         if( presCondESet )
             result.append( presCond );
         else
             result.append( "<unset>" );
         result.append( ", presCondArgs: " );
-        result.append( presCondArgs );
+        if( presCondArgsESet )
+            result.append( presCondArgs );
+        else
+            result.append( "<unset>" );
         result.append( ", presCondArgsID: " );
-        result.append( presCondArgsID );
+        if( presCondArgsIDESet )
+            result.append( presCondArgsID );
+        else
+            result.append( "<unset>" );
         result.append( ", qchg: " );
         if( qchgESet )
             result.append( qchg );
         else
             result.append( "<unset>" );
         result.append( ", sizeAttribute: " );
-        result.append( sizeAttribute );
+        if( sizeAttributeESet )
+            result.append( sizeAttribute );
+        else
+            result.append( "<unset>" );
         result.append( ", type: " );
-        result.append( type );
+        if( typeESet )
+            result.append( type );
+        else
+            result.append( "<unset>" );
         result.append( ", typeKind: " );
         if( typeKindESet )
             result.append( typeKind );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java
index 29900d5..0225757 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java
@@ -19,15 +19,19 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -48,6 +52,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl#getUnderlyingType <em>Underlying Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl#getUnderlyingTypeKind <em>Underlying Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl#getAnyLNClass <em>Any LN Class</em>}</li>
  * </ul>
  *
  * @generated
@@ -102,6 +107,15 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
      */
     protected String dsPresCondArgs = DS_PRES_COND_ARGS_EDEFAULT;
 
+    /**
+     * This is true if the Ds Pres Cond Args attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean dsPresCondArgsESet;
+
     /**
      * The default value of the '{@link #getDsPresCondArgsID() <em>Ds Pres Cond Args ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -122,6 +136,15 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
      */
     protected String dsPresCondArgsID = DS_PRES_COND_ARGS_ID_EDEFAULT;
 
+    /**
+     * This is true if the Ds Pres Cond Args ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean dsPresCondArgsIDESet;
+
     /**
      * The default value of the '{@link #getName() <em>Name</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -142,6 +165,15 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * The default value of the '{@link #getPresCond() <em>Pres Cond</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -191,6 +223,15 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
      */
     protected String presCondArgs = PRES_COND_ARGS_EDEFAULT;
 
+    /**
+     * This is true if the Pres Cond Args attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presCondArgsESet;
+
     /**
      * The default value of the '{@link #getPresCondArgsID() <em>Pres Cond Args ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -211,6 +252,15 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
      */
     protected String presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
 
+    /**
+     * This is true if the Pres Cond Args ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presCondArgsIDESet;
+
     /**
      * The default value of the '{@link #isTransient() <em>Transient</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -260,6 +310,15 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
      */
     protected String type = TYPE_EDEFAULT;
 
+    /**
+     * This is true if the Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean typeESet;
+
     /**
      * The default value of the '{@link #getUnderlyingType() <em>Underlying Type</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -280,6 +339,15 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
      */
     protected String underlyingType = UNDERLYING_TYPE_EDEFAULT;
 
+    /**
+     * This is true if the Underlying Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean underlyingTypeESet;
+
     /**
      * The default value of the '{@link #getUnderlyingTypeKind() <em>Underlying Type Kind</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -397,8 +465,37 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
     public void setDsPresCondArgs( String newDsPresCondArgs ) {
         String oldDsPresCondArgs = dsPresCondArgs;
         dsPresCondArgs = newDsPresCondArgs;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_OBJECT__DS_PRES_COND_ARGS, oldDsPresCondArgs, dsPresCondArgs ) );
+        boolean oldDsPresCondArgsESet = dsPresCondArgsESet;
+        dsPresCondArgsESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_OBJECT__DS_PRES_COND_ARGS,
+                    oldDsPresCondArgs, dsPresCondArgs, !oldDsPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDsPresCondArgs() {
+        String oldDsPresCondArgs = dsPresCondArgs;
+        boolean oldDsPresCondArgsESet = dsPresCondArgsESet;
+        dsPresCondArgs = DS_PRES_COND_ARGS_EDEFAULT;
+        dsPresCondArgsESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DATA_OBJECT__DS_PRES_COND_ARGS,
+                    oldDsPresCondArgs, DS_PRES_COND_ARGS_EDEFAULT, oldDsPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDsPresCondArgs() {
+        return dsPresCondArgsESet;
     }
 
     /**
@@ -420,8 +517,37 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
     public void setDsPresCondArgsID( String newDsPresCondArgsID ) {
         String oldDsPresCondArgsID = dsPresCondArgsID;
         dsPresCondArgsID = newDsPresCondArgsID;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_OBJECT__DS_PRES_COND_ARGS_ID, oldDsPresCondArgsID, dsPresCondArgsID ) );
+        boolean oldDsPresCondArgsIDESet = dsPresCondArgsIDESet;
+        dsPresCondArgsIDESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_OBJECT__DS_PRES_COND_ARGS_ID,
+                    oldDsPresCondArgsID, dsPresCondArgsID, !oldDsPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDsPresCondArgsID() {
+        String oldDsPresCondArgsID = dsPresCondArgsID;
+        boolean oldDsPresCondArgsIDESet = dsPresCondArgsIDESet;
+        dsPresCondArgsID = DS_PRES_COND_ARGS_ID_EDEFAULT;
+        dsPresCondArgsIDESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DATA_OBJECT__DS_PRES_COND_ARGS_ID,
+                    oldDsPresCondArgsID, DS_PRES_COND_ARGS_ID_EDEFAULT, oldDsPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDsPresCondArgsID() {
+        return dsPresCondArgsIDESet;
     }
 
     /**
@@ -443,8 +569,35 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_OBJECT__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.DATA_OBJECT__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.DATA_OBJECT__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
     }
 
     /**
@@ -516,8 +669,36 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
     public void setPresCondArgs( String newPresCondArgs ) {
         String oldPresCondArgs = presCondArgs;
         presCondArgs = newPresCondArgs;
+        boolean oldPresCondArgsESet = presCondArgsESet;
+        presCondArgsESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_OBJECT__PRES_COND_ARGS, oldPresCondArgs, presCondArgs ) );
+                NsdPackage.DATA_OBJECT__PRES_COND_ARGS, oldPresCondArgs, presCondArgs, !oldPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresCondArgs() {
+        String oldPresCondArgs = presCondArgs;
+        boolean oldPresCondArgsESet = presCondArgsESet;
+        presCondArgs = PRES_COND_ARGS_EDEFAULT;
+        presCondArgsESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DATA_OBJECT__PRES_COND_ARGS,
+                    oldPresCondArgs, PRES_COND_ARGS_EDEFAULT, oldPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresCondArgs() {
+        return presCondArgsESet;
     }
 
     /**
@@ -539,8 +720,37 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
     public void setPresCondArgsID( String newPresCondArgsID ) {
         String oldPresCondArgsID = presCondArgsID;
         presCondArgsID = newPresCondArgsID;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_OBJECT__PRES_COND_ARGS_ID, oldPresCondArgsID, presCondArgsID ) );
+        boolean oldPresCondArgsIDESet = presCondArgsIDESet;
+        presCondArgsIDESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_OBJECT__PRES_COND_ARGS_ID,
+                    oldPresCondArgsID, presCondArgsID, !oldPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresCondArgsID() {
+        String oldPresCondArgsID = presCondArgsID;
+        boolean oldPresCondArgsIDESet = presCondArgsIDESet;
+        presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
+        presCondArgsIDESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DATA_OBJECT__PRES_COND_ARGS_ID,
+                    oldPresCondArgsID, PRES_COND_ARGS_ID_EDEFAULT, oldPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresCondArgsID() {
+        return presCondArgsIDESet;
     }
 
     /**
@@ -612,8 +822,35 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
     public void setType( String newType ) {
         String oldType = type;
         type = newType;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_OBJECT__TYPE, oldType, type ) );
+        boolean oldTypeESet = typeESet;
+        typeESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.DATA_OBJECT__TYPE, oldType, type, !oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetType() {
+        String oldType = type;
+        boolean oldTypeESet = typeESet;
+        type = TYPE_EDEFAULT;
+        typeESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.DATA_OBJECT__TYPE, oldType, TYPE_EDEFAULT, oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetType() {
+        return typeESet;
     }
 
     /**
@@ -635,8 +872,36 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
     public void setUnderlyingType( String newUnderlyingType ) {
         String oldUnderlyingType = underlyingType;
         underlyingType = newUnderlyingType;
+        boolean oldUnderlyingTypeESet = underlyingTypeESet;
+        underlyingTypeESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DATA_OBJECT__UNDERLYING_TYPE, oldUnderlyingType, underlyingType ) );
+                NsdPackage.DATA_OBJECT__UNDERLYING_TYPE, oldUnderlyingType, underlyingType, !oldUnderlyingTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetUnderlyingType() {
+        String oldUnderlyingType = underlyingType;
+        boolean oldUnderlyingTypeESet = underlyingTypeESet;
+        underlyingType = UNDERLYING_TYPE_EDEFAULT;
+        underlyingTypeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DATA_OBJECT__UNDERLYING_TYPE,
+                    oldUnderlyingType, UNDERLYING_TYPE_EDEFAULT, oldUnderlyingTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetUnderlyingType() {
+        return underlyingTypeESet;
     }
 
     /**
@@ -691,6 +956,93 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         return underlyingTypeKindESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public AnyLNClass getAnyLNClass() {
+        if( eContainerFeatureID() != NsdPackage.DATA_OBJECT__ANY_LN_CLASS ) return null;
+        return ( AnyLNClass ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetAnyLNClass( AnyLNClass newAnyLNClass, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newAnyLNClass, NsdPackage.DATA_OBJECT__ANY_LN_CLASS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setAnyLNClass( AnyLNClass newAnyLNClass ) {
+        if( newAnyLNClass != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.DATA_OBJECT__ANY_LN_CLASS && newAnyLNClass != null ) ) {
+            if( EcoreUtil.isAncestor( this, newAnyLNClass ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newAnyLNClass != null ) msgs = ( ( InternalEObject ) newAnyLNClass ).eInverseAdd( this,
+                    NsdPackage.ANY_LN_CLASS__DATA_OBJECT, AnyLNClass.class, msgs );
+            msgs = basicSetAnyLNClass( newAnyLNClass, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.DATA_OBJECT__ANY_LN_CLASS, newAnyLNClass, newAnyLNClass ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetAnyLNClass( ( AnyLNClass ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
+            return basicSetAnyLNClass( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.ANY_LN_CLASS__DATA_OBJECT, AnyLNClass.class,
+                    msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -721,6 +1073,8 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
             return getUnderlyingType();
         case NsdPackage.DATA_OBJECT__UNDERLYING_TYPE_KIND:
             return getUnderlyingTypeKind();
+        case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
+            return getAnyLNClass();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -766,6 +1120,9 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         case NsdPackage.DATA_OBJECT__UNDERLYING_TYPE_KIND:
             setUnderlyingTypeKind( ( DefinedAttributeTypeKind ) newValue );
             return;
+        case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
+            setAnyLNClass( ( AnyLNClass ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -782,35 +1139,38 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
             unsetDsPresCond();
             return;
         case NsdPackage.DATA_OBJECT__DS_PRES_COND_ARGS:
-            setDsPresCondArgs( DS_PRES_COND_ARGS_EDEFAULT );
+            unsetDsPresCondArgs();
             return;
         case NsdPackage.DATA_OBJECT__DS_PRES_COND_ARGS_ID:
-            setDsPresCondArgsID( DS_PRES_COND_ARGS_ID_EDEFAULT );
+            unsetDsPresCondArgsID();
             return;
         case NsdPackage.DATA_OBJECT__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
             return;
         case NsdPackage.DATA_OBJECT__PRES_COND:
             unsetPresCond();
             return;
         case NsdPackage.DATA_OBJECT__PRES_COND_ARGS:
-            setPresCondArgs( PRES_COND_ARGS_EDEFAULT );
+            unsetPresCondArgs();
             return;
         case NsdPackage.DATA_OBJECT__PRES_COND_ARGS_ID:
-            setPresCondArgsID( PRES_COND_ARGS_ID_EDEFAULT );
+            unsetPresCondArgsID();
             return;
         case NsdPackage.DATA_OBJECT__TRANSIENT:
             unsetTransient();
             return;
         case NsdPackage.DATA_OBJECT__TYPE:
-            setType( TYPE_EDEFAULT );
+            unsetType();
             return;
         case NsdPackage.DATA_OBJECT__UNDERLYING_TYPE:
-            setUnderlyingType( UNDERLYING_TYPE_EDEFAULT );
+            unsetUnderlyingType();
             return;
         case NsdPackage.DATA_OBJECT__UNDERLYING_TYPE_KIND:
             unsetUnderlyingTypeKind();
             return;
+        case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
+            setAnyLNClass( ( AnyLNClass ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -826,30 +1186,27 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         case NsdPackage.DATA_OBJECT__DS_PRES_COND:
             return isSetDsPresCond();
         case NsdPackage.DATA_OBJECT__DS_PRES_COND_ARGS:
-            return DS_PRES_COND_ARGS_EDEFAULT == null ? dsPresCondArgs != null
-                    : !DS_PRES_COND_ARGS_EDEFAULT.equals( dsPresCondArgs );
+            return isSetDsPresCondArgs();
         case NsdPackage.DATA_OBJECT__DS_PRES_COND_ARGS_ID:
-            return DS_PRES_COND_ARGS_ID_EDEFAULT == null ? dsPresCondArgsID != null
-                    : !DS_PRES_COND_ARGS_ID_EDEFAULT.equals( dsPresCondArgsID );
+            return isSetDsPresCondArgsID();
         case NsdPackage.DATA_OBJECT__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
         case NsdPackage.DATA_OBJECT__PRES_COND:
             return isSetPresCond();
         case NsdPackage.DATA_OBJECT__PRES_COND_ARGS:
-            return PRES_COND_ARGS_EDEFAULT == null ? presCondArgs != null
-                    : !PRES_COND_ARGS_EDEFAULT.equals( presCondArgs );
+            return isSetPresCondArgs();
         case NsdPackage.DATA_OBJECT__PRES_COND_ARGS_ID:
-            return PRES_COND_ARGS_ID_EDEFAULT == null ? presCondArgsID != null
-                    : !PRES_COND_ARGS_ID_EDEFAULT.equals( presCondArgsID );
+            return isSetPresCondArgsID();
         case NsdPackage.DATA_OBJECT__TRANSIENT:
             return isSetTransient();
         case NsdPackage.DATA_OBJECT__TYPE:
-            return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals( type );
+            return isSetType();
         case NsdPackage.DATA_OBJECT__UNDERLYING_TYPE:
-            return UNDERLYING_TYPE_EDEFAULT == null ? underlyingType != null
-                    : !UNDERLYING_TYPE_EDEFAULT.equals( underlyingType );
+            return isSetUnderlyingType();
         case NsdPackage.DATA_OBJECT__UNDERLYING_TYPE_KIND:
             return isSetUnderlyingTypeKind();
+        case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
+            return getAnyLNClass() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -870,29 +1227,50 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         else
             result.append( "<unset>" );
         result.append( ", dsPresCondArgs: " );
-        result.append( dsPresCondArgs );
+        if( dsPresCondArgsESet )
+            result.append( dsPresCondArgs );
+        else
+            result.append( "<unset>" );
         result.append( ", dsPresCondArgsID: " );
-        result.append( dsPresCondArgsID );
+        if( dsPresCondArgsIDESet )
+            result.append( dsPresCondArgsID );
+        else
+            result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ", presCond: " );
         if( presCondESet )
             result.append( presCond );
         else
             result.append( "<unset>" );
         result.append( ", presCondArgs: " );
-        result.append( presCondArgs );
+        if( presCondArgsESet )
+            result.append( presCondArgs );
+        else
+            result.append( "<unset>" );
         result.append( ", presCondArgsID: " );
-        result.append( presCondArgsID );
+        if( presCondArgsIDESet )
+            result.append( presCondArgsID );
+        else
+            result.append( "<unset>" );
         result.append( ", transient: " );
         if( transientESet )
             result.append( transient_ );
         else
             result.append( "<unset>" );
         result.append( ", type: " );
-        result.append( type );
+        if( typeESet )
+            result.append( type );
+        else
+            result.append( "<unset>" );
         result.append( ", underlyingType: " );
-        result.append( underlyingType );
+        if( underlyingTypeESet )
+            result.append( underlyingType );
+        else
+            result.append( "<unset>" );
         result.append( ", underlyingTypeKind: " );
         if( underlyingTypeKindESet )
             result.append( underlyingTypeKind );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataSetMemberOfImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataSetMemberOfImpl.java
index b93c683..2593023 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataSetMemberOfImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataSetMemberOfImpl.java
@@ -19,16 +19,20 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CBKind;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 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.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -39,6 +43,7 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataSetMemberOfImpl#getCb <em>Cb</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataSetMemberOfImpl#getApplicableServices <em>Applicable Services</em>}</li>
  * </ul>
  *
  * @generated
@@ -142,6 +147,96 @@ public class DataSetMemberOfImpl extends MinimalEObjectImpl.Container implements
         return cbESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ApplicableServices getApplicableServices() {
+        if( eContainerFeatureID() != NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES ) return null;
+        return ( ApplicableServices ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetApplicableServices( ApplicableServices newApplicableServices,
+            NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newApplicableServices,
+                NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setApplicableServices( ApplicableServices newApplicableServices ) {
+        if( newApplicableServices != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES
+                        && newApplicableServices != null ) ) {
+            if( EcoreUtil.isAncestor( this, newApplicableServices ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newApplicableServices != null ) msgs = ( ( InternalEObject ) newApplicableServices ).eInverseAdd( this,
+                    NsdPackage.APPLICABLE_SERVICES__DATA_SET_MEMBER_OF, ApplicableServices.class, msgs );
+            msgs = basicSetApplicableServices( newApplicableServices, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES, newApplicableServices, newApplicableServices ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetApplicableServices( ( ApplicableServices ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES:
+            return basicSetApplicableServices( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.APPLICABLE_SERVICES__DATA_SET_MEMBER_OF,
+                    ApplicableServices.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -152,6 +247,8 @@ public class DataSetMemberOfImpl extends MinimalEObjectImpl.Container implements
         switch( featureID ) {
         case NsdPackage.DATA_SET_MEMBER_OF__CB:
             return getCb();
+        case NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES:
+            return getApplicableServices();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -167,6 +264,9 @@ public class DataSetMemberOfImpl extends MinimalEObjectImpl.Container implements
         case NsdPackage.DATA_SET_MEMBER_OF__CB:
             setCb( ( CBKind ) newValue );
             return;
+        case NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES:
+            setApplicableServices( ( ApplicableServices ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -182,6 +282,9 @@ public class DataSetMemberOfImpl extends MinimalEObjectImpl.Container implements
         case NsdPackage.DATA_SET_MEMBER_OF__CB:
             unsetCb();
             return;
+        case NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES:
+            setApplicableServices( ( ApplicableServices ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -196,6 +299,8 @@ public class DataSetMemberOfImpl extends MinimalEObjectImpl.Container implements
         switch( featureID ) {
         case NsdPackage.DATA_SET_MEMBER_OF__CB:
             return isSetCb();
+        case NsdPackage.DATA_SET_MEMBER_OF__APPLICABLE_SERVICES:
+            return getApplicableServices() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DependsOnTypeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DependsOnImpl.java
similarity index 60%
rename from fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DependsOnTypeImpl.java
rename to fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DependsOnImpl.java
index d7ac589..da2c099 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DependsOnTypeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DependsOnImpl.java
@@ -19,32 +19,38 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage;
 
 import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
 
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
 /**
  * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Depends On Type</b></em>'.
+ * An implementation of the model object '<em><b>Depends On</b></em>'.
  * <!-- end-user-doc -->
  * <p>
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnTypeImpl#getId <em>Id</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnTypeImpl#getPublicationStage <em>Publication Stage</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnTypeImpl#getRevision <em>Revision</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnImpl#getId <em>Id</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnImpl#getPublicationStage <em>Publication Stage</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnImpl#getRevision <em>Revision</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DependsOnImpl#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @generated
  */
-public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implements DependsOnType {
+public class DependsOnImpl extends NSDObjectWithVersionAndReleaseImpl implements DependsOn {
     /**
      * The default value of the '{@link #getId() <em>Id</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -65,6 +71,15 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
      */
     protected String id = ID_EDEFAULT;
 
+    /**
+     * This is true if the Id attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean idESet;
+
     /**
      * The default value of the '{@link #getPublicationStage() <em>Publication Stage</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -128,7 +143,7 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
      * <!-- end-user-doc -->
      * @generated
      */
-    protected DependsOnTypeImpl() {
+    protected DependsOnImpl() {
         super();
     }
 
@@ -139,7 +154,7 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
      */
     @Override
     protected EClass eStaticClass() {
-        return NsdPackage.Literals.DEPENDS_ON_TYPE;
+        return NsdPackage.Literals.DEPENDS_ON;
     }
 
     /**
@@ -161,8 +176,35 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
     public void setId( String newId ) {
         String oldId = id;
         id = newId;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DEPENDS_ON_TYPE__ID, oldId, id ) );
+        boolean oldIdESet = idESet;
+        idESet = true;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.DEPENDS_ON__ID, oldId, id, !oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetId() {
+        String oldId = id;
+        boolean oldIdESet = idESet;
+        id = ID_EDEFAULT;
+        idESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.DEPENDS_ON__ID, oldId, ID_EDEFAULT, oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetId() {
+        return idESet;
     }
 
     /**
@@ -187,7 +229,7 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
         boolean oldPublicationStageESet = publicationStageESet;
         publicationStageESet = true;
         if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DEPENDS_ON_TYPE__PUBLICATION_STAGE,
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DEPENDS_ON__PUBLICATION_STAGE,
                     oldPublicationStage, publicationStage, !oldPublicationStageESet ) );
     }
 
@@ -203,7 +245,7 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
         publicationStage = PUBLICATION_STAGE_EDEFAULT;
         publicationStageESet = false;
         if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DEPENDS_ON_TYPE__PUBLICATION_STAGE,
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.DEPENDS_ON__PUBLICATION_STAGE,
                     oldPublicationStage, PUBLICATION_STAGE_EDEFAULT, oldPublicationStageESet ) );
     }
 
@@ -239,7 +281,7 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
         boolean oldRevisionESet = revisionESet;
         revisionESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DEPENDS_ON_TYPE__REVISION, oldRevision, revision, !oldRevisionESet ) );
+                NsdPackage.DEPENDS_ON__REVISION, oldRevision, revision, !oldRevisionESet ) );
     }
 
     /**
@@ -254,7 +296,7 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
         revision = REVISION_EDEFAULT;
         revisionESet = false;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
-                NsdPackage.DEPENDS_ON_TYPE__REVISION, oldRevision, REVISION_EDEFAULT, oldRevisionESet ) );
+                NsdPackage.DEPENDS_ON__REVISION, oldRevision, REVISION_EDEFAULT, oldRevisionESet ) );
     }
 
     /**
@@ -267,6 +309,91 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
         return revisionESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NS getNS() {
+        if( eContainerFeatureID() != NsdPackage.DEPENDS_ON__NS ) return null;
+        return ( NS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNS( NS newNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNS, NsdPackage.DEPENDS_ON__NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNS( NS newNS ) {
+        if( newNS != eInternalContainer() || ( eContainerFeatureID() != NsdPackage.DEPENDS_ON__NS && newNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNS != null )
+                msgs = ( ( InternalEObject ) newNS ).eInverseAdd( this, NsdPackage.NS__DEPENDS_ON, NS.class, msgs );
+            msgs = basicSetNS( newNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DEPENDS_ON__NS, newNS, newNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.DEPENDS_ON__NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNS( ( NS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.DEPENDS_ON__NS:
+            return basicSetNS( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.DEPENDS_ON__NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS__DEPENDS_ON, NS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -275,12 +402,14 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
     @Override
     public Object eGet( int featureID, boolean resolve, boolean coreType ) {
         switch( featureID ) {
-        case NsdPackage.DEPENDS_ON_TYPE__ID:
+        case NsdPackage.DEPENDS_ON__ID:
             return getId();
-        case NsdPackage.DEPENDS_ON_TYPE__PUBLICATION_STAGE:
+        case NsdPackage.DEPENDS_ON__PUBLICATION_STAGE:
             return getPublicationStage();
-        case NsdPackage.DEPENDS_ON_TYPE__REVISION:
+        case NsdPackage.DEPENDS_ON__REVISION:
             return getRevision();
+        case NsdPackage.DEPENDS_ON__NS:
+            return getNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -293,15 +422,18 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
     @Override
     public void eSet( int featureID, Object newValue ) {
         switch( featureID ) {
-        case NsdPackage.DEPENDS_ON_TYPE__ID:
+        case NsdPackage.DEPENDS_ON__ID:
             setId( ( String ) newValue );
             return;
-        case NsdPackage.DEPENDS_ON_TYPE__PUBLICATION_STAGE:
+        case NsdPackage.DEPENDS_ON__PUBLICATION_STAGE:
             setPublicationStage( ( PubStage ) newValue );
             return;
-        case NsdPackage.DEPENDS_ON_TYPE__REVISION:
+        case NsdPackage.DEPENDS_ON__REVISION:
             setRevision( ( String ) newValue );
             return;
+        case NsdPackage.DEPENDS_ON__NS:
+            setNS( ( NS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -314,15 +446,18 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
     @Override
     public void eUnset( int featureID ) {
         switch( featureID ) {
-        case NsdPackage.DEPENDS_ON_TYPE__ID:
-            setId( ID_EDEFAULT );
+        case NsdPackage.DEPENDS_ON__ID:
+            unsetId();
             return;
-        case NsdPackage.DEPENDS_ON_TYPE__PUBLICATION_STAGE:
+        case NsdPackage.DEPENDS_ON__PUBLICATION_STAGE:
             unsetPublicationStage();
             return;
-        case NsdPackage.DEPENDS_ON_TYPE__REVISION:
+        case NsdPackage.DEPENDS_ON__REVISION:
             unsetRevision();
             return;
+        case NsdPackage.DEPENDS_ON__NS:
+            setNS( ( NS ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -335,12 +470,14 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
     @Override
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
-        case NsdPackage.DEPENDS_ON_TYPE__ID:
-            return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals( id );
-        case NsdPackage.DEPENDS_ON_TYPE__PUBLICATION_STAGE:
+        case NsdPackage.DEPENDS_ON__ID:
+            return isSetId();
+        case NsdPackage.DEPENDS_ON__PUBLICATION_STAGE:
             return isSetPublicationStage();
-        case NsdPackage.DEPENDS_ON_TYPE__REVISION:
+        case NsdPackage.DEPENDS_ON__REVISION:
             return isSetRevision();
+        case NsdPackage.DEPENDS_ON__NS:
+            return getNS() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -356,7 +493,10 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (id: " );
-        result.append( id );
+        if( idESet )
+            result.append( id );
+        else
+            result.append( "<unset>" );
         result.append( ", publicationStage: " );
         if( publicationStageESet )
             result.append( publicationStage );
@@ -371,4 +511,4 @@ public class DependsOnTypeImpl extends NSDObjectWithVersionAndReleaseImpl implem
         return result.toString();
     }
 
-} //DependsOnTypeImpl
+} //DependsOnImpl
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocImpl.java
index 4604c9d..d7a4e31 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocImpl.java
@@ -20,6 +20,7 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 import org.eclipse.emf.common.notify.Notification;
@@ -32,6 +33,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import org.eclipse.emf.ecore.util.BasicFeatureMap;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.FeatureMap;
 import org.eclipse.emf.ecore.util.InternalEList;
 
@@ -47,6 +49,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocImpl#getGroup <em>Group</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocImpl#getAny <em>Any</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocImpl#getId <em>Id</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocImpl#getNSDoc <em>NS Doc</em>}</li>
  * </ul>
  *
  * @generated
@@ -82,6 +85,15 @@ public class DocImpl extends MinimalEObjectImpl.Container implements Doc {
      */
     protected String id = ID_EDEFAULT;
 
+    /**
+     * This is true if the Id attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean idESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -153,8 +165,93 @@ public class DocImpl extends MinimalEObjectImpl.Container implements Doc {
     public void setId( String newId ) {
         String oldId = id;
         id = newId;
+        boolean oldIdESet = idESet;
+        idESet = true;
         if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DOC__ID, oldId, id ) );
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DOC__ID, oldId, id, !oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetId() {
+        String oldId = id;
+        boolean oldIdESet = idESet;
+        id = ID_EDEFAULT;
+        idESet = false;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.UNSET, NsdPackage.DOC__ID, oldId, ID_EDEFAULT, oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetId() {
+        return idESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NSDoc getNSDoc() {
+        if( eContainerFeatureID() != NsdPackage.DOC__NS_DOC ) return null;
+        return ( NSDoc ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNSDoc( NSDoc newNSDoc, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNSDoc, NsdPackage.DOC__NS_DOC, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNSDoc( NSDoc newNSDoc ) {
+        if( newNSDoc != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.DOC__NS_DOC && newNSDoc != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNSDoc ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNSDoc != null )
+                msgs = ( ( InternalEObject ) newNSDoc ).eInverseAdd( this, NsdPackage.NS_DOC__DOC, NSDoc.class, msgs );
+            msgs = basicSetNSDoc( newNSDoc, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.DOC__NS_DOC, newNSDoc, newNSDoc ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.DOC__NS_DOC:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNSDoc( ( NSDoc ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -171,10 +268,26 @@ public class DocImpl extends MinimalEObjectImpl.Container implements Doc {
             return ( ( InternalEList< ? > ) getGroup() ).basicRemove( otherEnd, msgs );
         case NsdPackage.DOC__ANY:
             return ( ( InternalEList< ? > ) getAny() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.DOC__NS_DOC:
+            return basicSetNSDoc( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.DOC__NS_DOC:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS_DOC__DOC, NSDoc.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -194,6 +307,8 @@ public class DocImpl extends MinimalEObjectImpl.Container implements Doc {
             return ( ( FeatureMap.Internal ) getAny() ).getWrapper();
         case NsdPackage.DOC__ID:
             return getId();
+        case NsdPackage.DOC__NS_DOC:
+            return getNSDoc();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -218,6 +333,9 @@ public class DocImpl extends MinimalEObjectImpl.Container implements Doc {
         case NsdPackage.DOC__ID:
             setId( ( String ) newValue );
             return;
+        case NsdPackage.DOC__NS_DOC:
+            setNSDoc( ( NSDoc ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -240,7 +358,10 @@ public class DocImpl extends MinimalEObjectImpl.Container implements Doc {
             getAny().clear();
             return;
         case NsdPackage.DOC__ID:
-            setId( ID_EDEFAULT );
+            unsetId();
+            return;
+        case NsdPackage.DOC__NS_DOC:
+            setNSDoc( ( NSDoc ) null );
             return;
         }
         super.eUnset( featureID );
@@ -261,7 +382,9 @@ public class DocImpl extends MinimalEObjectImpl.Container implements Doc {
         case NsdPackage.DOC__ANY:
             return !getAny().isEmpty();
         case NsdPackage.DOC__ID:
-            return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals( id );
+            return isSetId();
+        case NsdPackage.DOC__NS_DOC:
+            return getNSDoc() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -279,7 +402,10 @@ public class DocImpl extends MinimalEObjectImpl.Container implements Doc {
         result.append( " (mixed: " );
         result.append( mixed );
         result.append( ", id: " );
-        result.append( id );
+        if( idESet )
+            result.append( id );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocumentRootImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocumentRootImpl.java
index 378f499..ad9377d 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocumentRootImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocumentRootImpl.java
@@ -20,7 +20,6 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServiceNS;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc;
@@ -56,7 +55,6 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocumentRootImpl#getXMLNSPrefixMap <em>XMLNS Prefix Map</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocumentRootImpl#getXSISchemaLocation <em>XSI Schema Location</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocumentRootImpl#getApplicableServiceNS <em>Applicable Service NS</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocumentRootImpl#getCopyright <em>Copyright</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocumentRootImpl#getNS <em>NS</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocumentRootImpl#getNSDoc <em>NS Doc</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DocumentRootImpl#getServiceNS <em>Service NS</em>}</li>
@@ -192,9 +190,13 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
      * <!-- end-user-doc -->
      * @generated
      */
-    @Override
-    public CopyrightNotice getCopyright() {
-        return ( CopyrightNotice ) getMixed().get( NsdPackage.Literals.DOCUMENT_ROOT__COPYRIGHT, true );
+    public NotificationChain basicUnsetApplicableServiceNS( NotificationChain msgs ) {
+        // TODO: implement this method to unset the contained 'Applicable Service NS' containment reference
+        // -> this method is automatically invoked to keep the containment relationship in synch
+        // -> do not modify other features
+        // -> return msgs, after adding any generated Notification to it (if it is null, a NotificationChain object must be created first)
+        // Ensure that you remove @generated or mark it @generated NOT
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -202,9 +204,9 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
      * <!-- end-user-doc -->
      * @generated
      */
-    public NotificationChain basicSetCopyright( CopyrightNotice newCopyright, NotificationChain msgs ) {
-        return ( ( FeatureMap.Internal ) getMixed() ).basicAdd( NsdPackage.Literals.DOCUMENT_ROOT__COPYRIGHT,
-                newCopyright, msgs );
+    @Override
+    public void unsetApplicableServiceNS() {
+        ( ( FeatureMap.Internal ) getMixed() ).clear( NsdPackage.Literals.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS );
     }
 
     /**
@@ -213,8 +215,9 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
      * @generated
      */
     @Override
-    public void setCopyright( CopyrightNotice newCopyright ) {
-        ( ( FeatureMap.Internal ) getMixed() ).set( NsdPackage.Literals.DOCUMENT_ROOT__COPYRIGHT, newCopyright );
+    public boolean isSetApplicableServiceNS() {
+        return !( ( FeatureMap.Internal ) getMixed() )
+                .isEmpty( NsdPackage.Literals.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS );
     }
 
     /**
@@ -246,6 +249,40 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
         ( ( FeatureMap.Internal ) getMixed() ).set( NsdPackage.Literals.DOCUMENT_ROOT__NS, newNS );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetNS( NotificationChain msgs ) {
+        // TODO: implement this method to unset the contained 'NS' containment reference
+        // -> this method is automatically invoked to keep the containment relationship in synch
+        // -> do not modify other features
+        // -> return msgs, after adding any generated Notification to it (if it is null, a NotificationChain object must be created first)
+        // Ensure that you remove @generated or mark it @generated NOT
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetNS() {
+        ( ( FeatureMap.Internal ) getMixed() ).clear( NsdPackage.Literals.DOCUMENT_ROOT__NS );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetNS() {
+        return !( ( FeatureMap.Internal ) getMixed() ).isEmpty( NsdPackage.Literals.DOCUMENT_ROOT__NS );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -276,6 +313,40 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
         ( ( FeatureMap.Internal ) getMixed() ).set( NsdPackage.Literals.DOCUMENT_ROOT__NS_DOC, newNSDoc );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetNSDoc( NotificationChain msgs ) {
+        // TODO: implement this method to unset the contained 'NS Doc' containment reference
+        // -> this method is automatically invoked to keep the containment relationship in synch
+        // -> do not modify other features
+        // -> return msgs, after adding any generated Notification to it (if it is null, a NotificationChain object must be created first)
+        // Ensure that you remove @generated or mark it @generated NOT
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetNSDoc() {
+        ( ( FeatureMap.Internal ) getMixed() ).clear( NsdPackage.Literals.DOCUMENT_ROOT__NS_DOC );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetNSDoc() {
+        return !( ( FeatureMap.Internal ) getMixed() ).isEmpty( NsdPackage.Literals.DOCUMENT_ROOT__NS_DOC );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -306,6 +377,40 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
         ( ( FeatureMap.Internal ) getMixed() ).set( NsdPackage.Literals.DOCUMENT_ROOT__SERVICE_NS, newServiceNS );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetServiceNS( NotificationChain msgs ) {
+        // TODO: implement this method to unset the contained 'Service NS' containment reference
+        // -> this method is automatically invoked to keep the containment relationship in synch
+        // -> do not modify other features
+        // -> return msgs, after adding any generated Notification to it (if it is null, a NotificationChain object must be created first)
+        // Ensure that you remove @generated or mark it @generated NOT
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetServiceNS() {
+        ( ( FeatureMap.Internal ) getMixed() ).clear( NsdPackage.Literals.DOCUMENT_ROOT__SERVICE_NS );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetServiceNS() {
+        return !( ( FeatureMap.Internal ) getMixed() ).isEmpty( NsdPackage.Literals.DOCUMENT_ROOT__SERVICE_NS );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -321,15 +426,13 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
         case NsdPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION:
             return ( ( InternalEList< ? > ) getXSISchemaLocation() ).basicRemove( otherEnd, msgs );
         case NsdPackage.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS:
-            return basicSetApplicableServiceNS( null, msgs );
-        case NsdPackage.DOCUMENT_ROOT__COPYRIGHT:
-            return basicSetCopyright( null, msgs );
+            return basicUnsetApplicableServiceNS( msgs );
         case NsdPackage.DOCUMENT_ROOT__NS:
-            return basicSetNS( null, msgs );
+            return basicUnsetNS( msgs );
         case NsdPackage.DOCUMENT_ROOT__NS_DOC:
-            return basicSetNSDoc( null, msgs );
+            return basicUnsetNSDoc( msgs );
         case NsdPackage.DOCUMENT_ROOT__SERVICE_NS:
-            return basicSetServiceNS( null, msgs );
+            return basicUnsetServiceNS( msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -357,8 +460,6 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
                 return getXSISchemaLocation().map();
         case NsdPackage.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS:
             return getApplicableServiceNS();
-        case NsdPackage.DOCUMENT_ROOT__COPYRIGHT:
-            return getCopyright();
         case NsdPackage.DOCUMENT_ROOT__NS:
             return getNS();
         case NsdPackage.DOCUMENT_ROOT__NS_DOC:
@@ -389,9 +490,6 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
         case NsdPackage.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS:
             setApplicableServiceNS( ( ApplicableServiceNS ) newValue );
             return;
-        case NsdPackage.DOCUMENT_ROOT__COPYRIGHT:
-            setCopyright( ( CopyrightNotice ) newValue );
-            return;
         case NsdPackage.DOCUMENT_ROOT__NS:
             setNS( ( NS ) newValue );
             return;
@@ -423,19 +521,16 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
             getXSISchemaLocation().clear();
             return;
         case NsdPackage.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS:
-            setApplicableServiceNS( ( ApplicableServiceNS ) null );
-            return;
-        case NsdPackage.DOCUMENT_ROOT__COPYRIGHT:
-            setCopyright( ( CopyrightNotice ) null );
+            unsetApplicableServiceNS();
             return;
         case NsdPackage.DOCUMENT_ROOT__NS:
-            setNS( ( NS ) null );
+            unsetNS();
             return;
         case NsdPackage.DOCUMENT_ROOT__NS_DOC:
-            setNSDoc( ( NSDoc ) null );
+            unsetNSDoc();
             return;
         case NsdPackage.DOCUMENT_ROOT__SERVICE_NS:
-            setServiceNS( ( ServiceNS ) null );
+            unsetServiceNS();
             return;
         }
         super.eUnset( featureID );
@@ -456,15 +551,13 @@ public class DocumentRootImpl extends MinimalEObjectImpl.Container implements Do
         case NsdPackage.DOCUMENT_ROOT__XSI_SCHEMA_LOCATION:
             return xSISchemaLocation != null && !xSISchemaLocation.isEmpty();
         case NsdPackage.DOCUMENT_ROOT__APPLICABLE_SERVICE_NS:
-            return getApplicableServiceNS() != null;
-        case NsdPackage.DOCUMENT_ROOT__COPYRIGHT:
-            return getCopyright() != null;
+            return isSetApplicableServiceNS();
         case NsdPackage.DOCUMENT_ROOT__NS:
-            return getNS() != null;
+            return isSetNS();
         case NsdPackage.DOCUMENT_ROOT__NS_DOC:
-            return getNSDoc() != null;
+            return isSetNSDoc();
         case NsdPackage.DOCUMENT_ROOT__SERVICE_NS:
-            return getServiceNS() != null;
+            return isSetServiceNS();
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocumentedClassImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocumentedClassImpl.java
index 22f3768..439cc88 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocumentedClassImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DocumentedClassImpl.java
@@ -94,6 +94,15 @@ public class DocumentedClassImpl extends MinimalEObjectImpl.Container implements
      */
     protected String descID = DESC_ID_EDEFAULT;
 
+    /**
+     * This is true if the Desc ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean descIDESet;
+
     /**
      * The default value of the '{@link #isInformative() <em>Informative</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -211,8 +220,35 @@ public class DocumentedClassImpl extends MinimalEObjectImpl.Container implements
     public void setDescID( String newDescID ) {
         String oldDescID = descID;
         descID = newDescID;
+        boolean oldDescIDESet = descIDESet;
+        descIDESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.DOCUMENTED_CLASS__DESC_ID, oldDescID, descID ) );
+                NsdPackage.DOCUMENTED_CLASS__DESC_ID, oldDescID, descID, !oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDescID() {
+        String oldDescID = descID;
+        boolean oldDescIDESet = descIDESet;
+        descID = DESC_ID_EDEFAULT;
+        descIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.DOCUMENTED_CLASS__DESC_ID, oldDescID, DESC_ID_EDEFAULT, oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDescID() {
+        return descIDESet;
     }
 
     /**
@@ -316,7 +352,7 @@ public class DocumentedClassImpl extends MinimalEObjectImpl.Container implements
             unsetDeprecated();
             return;
         case NsdPackage.DOCUMENTED_CLASS__DESC_ID:
-            setDescID( DESC_ID_EDEFAULT );
+            unsetDescID();
             return;
         case NsdPackage.DOCUMENTED_CLASS__INFORMATIVE:
             unsetInformative();
@@ -336,7 +372,7 @@ public class DocumentedClassImpl extends MinimalEObjectImpl.Container implements
         case NsdPackage.DOCUMENTED_CLASS__DEPRECATED:
             return isSetDeprecated();
         case NsdPackage.DOCUMENTED_CLASS__DESC_ID:
-            return DESC_ID_EDEFAULT == null ? descID != null : !DESC_ID_EDEFAULT.equals( descID );
+            return isSetDescID();
         case NsdPackage.DOCUMENTED_CLASS__INFORMATIVE:
             return isSetInformative();
         }
@@ -359,7 +395,10 @@ public class DocumentedClassImpl extends MinimalEObjectImpl.Container implements
         else
             result.append( "<unset>" );
         result.append( ", descID: " );
-        result.append( descID );
+        if( descIDESet )
+            result.append( descID );
+        else
+            result.append( "<unset>" );
         result.append( ", informative: " );
         if( informativeESet )
             result.append( informative );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java
index 18160b9..4ba0bc4 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java
@@ -20,6 +20,7 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
@@ -34,8 +35,8 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -49,6 +50,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getLiteral <em>Literal</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getInheritedFrom <em>Inherited From</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getEnumerations <em>Enumerations</em>}</li>
  * </ul>
  *
  * @generated
@@ -84,6 +86,15 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
      */
     protected String inheritedFrom = INHERITED_FROM_EDEFAULT;
 
+    /**
+     * This is true if the Inherited From attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean inheritedFromESet;
+
     /**
      * The default value of the '{@link #getName() <em>Name</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -104,6 +115,15 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -131,11 +151,32 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
     @Override
     public EList< Literal > getLiteral() {
         if( literal == null ) {
-            literal = new EObjectContainmentEList< Literal >( Literal.class, this, NsdPackage.ENUMERATION__LITERAL );
+            literal = new EObjectContainmentWithInverseEList.Unsettable< Literal >( Literal.class, this,
+                    NsdPackage.ENUMERATION__LITERAL, NsdPackage.LITERAL__ENUMERATION );
         }
         return literal;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetLiteral() {
+        if( literal != null ) ( ( InternalEList.Unsettable< ? > ) literal ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetLiteral() {
+        return literal != null && ( ( InternalEList.Unsettable< ? > ) literal ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -155,8 +196,36 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
     public void setInheritedFrom( String newInheritedFrom ) {
         String oldInheritedFrom = inheritedFrom;
         inheritedFrom = newInheritedFrom;
+        boolean oldInheritedFromESet = inheritedFromESet;
+        inheritedFromESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.ENUMERATION__INHERITED_FROM, oldInheritedFrom, inheritedFrom ) );
+                NsdPackage.ENUMERATION__INHERITED_FROM, oldInheritedFrom, inheritedFrom, !oldInheritedFromESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetInheritedFrom() {
+        String oldInheritedFrom = inheritedFrom;
+        boolean oldInheritedFromESet = inheritedFromESet;
+        inheritedFrom = INHERITED_FROM_EDEFAULT;
+        inheritedFromESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.ENUMERATION__INHERITED_FROM,
+                    oldInheritedFrom, INHERITED_FROM_EDEFAULT, oldInheritedFromESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetInheritedFrom() {
+        return inheritedFromESet;
     }
 
     /**
@@ -178,8 +247,97 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.ENUMERATION__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.ENUMERATION__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.ENUMERATION__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Enumerations getEnumerations() {
+        if( eContainerFeatureID() != NsdPackage.ENUMERATION__ENUMERATIONS ) return null;
+        return ( Enumerations ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetEnumerations( Enumerations newEnumerations, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newEnumerations, NsdPackage.ENUMERATION__ENUMERATIONS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setEnumerations( Enumerations newEnumerations ) {
+        if( newEnumerations != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.ENUMERATION__ENUMERATIONS && newEnumerations != null ) ) {
+            if( EcoreUtil.isAncestor( this, newEnumerations ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newEnumerations != null ) msgs = ( ( InternalEObject ) newEnumerations ).eInverseAdd( this,
+                    NsdPackage.ENUMERATIONS__ENUMERATION, Enumerations.class, msgs );
+            msgs = basicSetEnumerations( newEnumerations, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.ENUMERATION__ENUMERATIONS, newEnumerations, newEnumerations ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.ENUMERATION__LITERAL:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getLiteral() ).basicAdd( otherEnd,
+                    msgs );
+        case NsdPackage.ENUMERATION__ENUMERATIONS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetEnumerations( ( Enumerations ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -192,10 +350,27 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
         switch( featureID ) {
         case NsdPackage.ENUMERATION__LITERAL:
             return ( ( InternalEList< ? > ) getLiteral() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.ENUMERATION__ENUMERATIONS:
+            return basicSetEnumerations( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.ENUMERATION__ENUMERATIONS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.ENUMERATIONS__ENUMERATION, Enumerations.class,
+                    msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -210,6 +385,8 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
             return getInheritedFrom();
         case NsdPackage.ENUMERATION__NAME:
             return getName();
+        case NsdPackage.ENUMERATION__ENUMERATIONS:
+            return getEnumerations();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -233,6 +410,9 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
         case NsdPackage.ENUMERATION__NAME:
             setName( ( String ) newValue );
             return;
+        case NsdPackage.ENUMERATION__ENUMERATIONS:
+            setEnumerations( ( Enumerations ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -246,13 +426,16 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ENUMERATION__LITERAL:
-            getLiteral().clear();
+            unsetLiteral();
             return;
         case NsdPackage.ENUMERATION__INHERITED_FROM:
-            setInheritedFrom( INHERITED_FROM_EDEFAULT );
+            unsetInheritedFrom();
             return;
         case NsdPackage.ENUMERATION__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
+            return;
+        case NsdPackage.ENUMERATION__ENUMERATIONS:
+            setEnumerations( ( Enumerations ) null );
             return;
         }
         super.eUnset( featureID );
@@ -267,12 +450,13 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ENUMERATION__LITERAL:
-            return literal != null && !literal.isEmpty();
+            return isSetLiteral();
         case NsdPackage.ENUMERATION__INHERITED_FROM:
-            return INHERITED_FROM_EDEFAULT == null ? inheritedFrom != null
-                    : !INHERITED_FROM_EDEFAULT.equals( inheritedFrom );
+            return isSetInheritedFrom();
         case NsdPackage.ENUMERATION__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
+        case NsdPackage.ENUMERATION__ENUMERATIONS:
+            return getEnumerations() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -288,9 +472,15 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (inheritedFrom: " );
-        result.append( inheritedFrom );
+        if( inheritedFromESet )
+            result.append( inheritedFrom );
+        else
+            result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationsImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationsImpl.java
index 468d274..441ce19 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationsImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationsImpl.java
@@ -21,10 +21,12 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 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;
@@ -32,9 +34,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -46,6 +49,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationsImpl#getEnumeration <em>Enumeration</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationsImpl#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -88,12 +92,94 @@ public class EnumerationsImpl extends MinimalEObjectImpl.Container implements En
     @Override
     public EList< Enumeration > getEnumeration() {
         if( enumeration == null ) {
-            enumeration = new EObjectContainmentEList< Enumeration >( Enumeration.class, this,
-                    NsdPackage.ENUMERATIONS__ENUMERATION );
+            enumeration = new EObjectContainmentWithInverseEList.Unsettable< Enumeration >( Enumeration.class, this,
+                    NsdPackage.ENUMERATIONS__ENUMERATION, NsdPackage.ENUMERATION__ENUMERATIONS );
         }
         return enumeration;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetEnumeration() {
+        if( enumeration != null ) ( ( InternalEList.Unsettable< ? > ) enumeration ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetEnumeration() {
+        return enumeration != null && ( ( InternalEList.Unsettable< ? > ) enumeration ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NS getNS() {
+        if( eContainerFeatureID() != NsdPackage.ENUMERATIONS__NS ) return null;
+        return ( NS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNS( NS newNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNS, NsdPackage.ENUMERATIONS__NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNS( NS newNS ) {
+        if( newNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.ENUMERATIONS__NS && newNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNS != null )
+                msgs = ( ( InternalEObject ) newNS ).eInverseAdd( this, NsdPackage.NS__ENUMERATIONS, NS.class, msgs );
+            msgs = basicSetNS( newNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.ENUMERATIONS__NS, newNS, newNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.ENUMERATIONS__ENUMERATION:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getEnumeration() ).basicAdd( otherEnd,
+                    msgs );
+        case NsdPackage.ENUMERATIONS__NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNS( ( NS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -104,10 +190,26 @@ public class EnumerationsImpl extends MinimalEObjectImpl.Container implements En
         switch( featureID ) {
         case NsdPackage.ENUMERATIONS__ENUMERATION:
             return ( ( InternalEList< ? > ) getEnumeration() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.ENUMERATIONS__NS:
+            return basicSetNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.ENUMERATIONS__NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS__ENUMERATIONS, NS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -118,6 +220,8 @@ public class EnumerationsImpl extends MinimalEObjectImpl.Container implements En
         switch( featureID ) {
         case NsdPackage.ENUMERATIONS__ENUMERATION:
             return getEnumeration();
+        case NsdPackage.ENUMERATIONS__NS:
+            return getNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -135,6 +239,9 @@ public class EnumerationsImpl extends MinimalEObjectImpl.Container implements En
             getEnumeration().clear();
             getEnumeration().addAll( ( Collection< ? extends Enumeration > ) newValue );
             return;
+        case NsdPackage.ENUMERATIONS__NS:
+            setNS( ( NS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -148,7 +255,10 @@ public class EnumerationsImpl extends MinimalEObjectImpl.Container implements En
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ENUMERATIONS__ENUMERATION:
-            getEnumeration().clear();
+            unsetEnumeration();
+            return;
+        case NsdPackage.ENUMERATIONS__NS:
+            setNS( ( NS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -163,7 +273,9 @@ public class EnumerationsImpl extends MinimalEObjectImpl.Container implements En
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.ENUMERATIONS__ENUMERATION:
-            return enumeration != null && !enumeration.isEmpty();
+            return isSetEnumeration();
+        case NsdPackage.ENUMERATIONS__NS:
+            return getNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintImpl.java
index 0aeb4eb..3233cb4 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintImpl.java
@@ -21,6 +21,7 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 import org.eclipse.emf.common.notify.Notification;
@@ -31,6 +32,7 @@ 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.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -44,6 +46,7 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintImpl#getAbbreviation <em>Abbreviation</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintImpl#getDescID <em>Desc ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintImpl#getTitleID <em>Title ID</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintImpl#getFunctionalConstraints <em>Functional Constraints</em>}</li>
  * </ul>
  *
  * @generated
@@ -59,6 +62,15 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
      */
     protected ApplicableServices applicableServices;
 
+    /**
+     * This is true if the Applicable Services containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean applicableServicesESet;
+
     /**
      * The default value of the '{@link #getAbbreviation() <em>Abbreviation</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -79,6 +91,15 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
      */
     protected String abbreviation = ABBREVIATION_EDEFAULT;
 
+    /**
+     * This is true if the Abbreviation attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean abbreviationESet;
+
     /**
      * The default value of the '{@link #getDescID() <em>Desc ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -99,6 +120,15 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
      */
     protected String descID = DESC_ID_EDEFAULT;
 
+    /**
+     * This is true if the Desc ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean descIDESet;
+
     /**
      * The default value of the '{@link #getTitleID() <em>Title ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -119,6 +149,15 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
      */
     protected String titleID = TITLE_ID_EDEFAULT;
 
+    /**
+     * This is true if the Title ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean titleIDESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -157,10 +196,12 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
             NotificationChain msgs ) {
         ApplicableServices oldApplicableServices = applicableServices;
         applicableServices = newApplicableServices;
+        boolean oldApplicableServicesESet = applicableServicesESet;
+        applicableServicesESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES, oldApplicableServices,
-                    newApplicableServices );
+                    NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES, oldApplicableServices, newApplicableServices,
+                    !oldApplicableServicesESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -179,14 +220,73 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
         if( newApplicableServices != applicableServices ) {
             NotificationChain msgs = null;
             if( applicableServices != null ) msgs = ( ( InternalEObject ) applicableServices ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES, null, msgs );
+                    NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT, ApplicableServices.class, msgs );
             if( newApplicableServices != null ) msgs = ( ( InternalEObject ) newApplicableServices ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES, null, msgs );
+                    NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT, ApplicableServices.class, msgs );
             msgs = basicSetApplicableServices( newApplicableServices, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES, newApplicableServices, newApplicableServices ) );
+        else {
+            boolean oldApplicableServicesESet = applicableServicesESet;
+            applicableServicesESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES, newApplicableServices, newApplicableServices,
+                    !oldApplicableServicesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetApplicableServices( NotificationChain msgs ) {
+        ApplicableServices oldApplicableServices = applicableServices;
+        applicableServices = null;
+        boolean oldApplicableServicesESet = applicableServicesESet;
+        applicableServicesESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES, oldApplicableServices, null,
+                    oldApplicableServicesESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetApplicableServices() {
+        if( applicableServices != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) applicableServices ).eInverseRemove( this,
+                    NsdPackage.APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT, ApplicableServices.class, msgs );
+            msgs = basicUnsetApplicableServices( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldApplicableServicesESet = applicableServicesESet;
+            applicableServicesESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES, null, null, oldApplicableServicesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetApplicableServices() {
+        return applicableServicesESet;
     }
 
     /**
@@ -208,8 +308,36 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
     public void setAbbreviation( String newAbbreviation ) {
         String oldAbbreviation = abbreviation;
         abbreviation = newAbbreviation;
+        boolean oldAbbreviationESet = abbreviationESet;
+        abbreviationESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.FUNCTIONAL_CONSTRAINT__ABBREVIATION, oldAbbreviation, abbreviation ) );
+                NsdPackage.FUNCTIONAL_CONSTRAINT__ABBREVIATION, oldAbbreviation, abbreviation, !oldAbbreviationESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetAbbreviation() {
+        String oldAbbreviation = abbreviation;
+        boolean oldAbbreviationESet = abbreviationESet;
+        abbreviation = ABBREVIATION_EDEFAULT;
+        abbreviationESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.FUNCTIONAL_CONSTRAINT__ABBREVIATION,
+                    oldAbbreviation, ABBREVIATION_EDEFAULT, oldAbbreviationESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetAbbreviation() {
+        return abbreviationESet;
     }
 
     /**
@@ -231,8 +359,35 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
     public void setDescID( String newDescID ) {
         String oldDescID = descID;
         descID = newDescID;
+        boolean oldDescIDESet = descIDESet;
+        descIDESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.FUNCTIONAL_CONSTRAINT__DESC_ID, oldDescID, descID ) );
+                NsdPackage.FUNCTIONAL_CONSTRAINT__DESC_ID, oldDescID, descID, !oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDescID() {
+        String oldDescID = descID;
+        boolean oldDescIDESet = descIDESet;
+        descID = DESC_ID_EDEFAULT;
+        descIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.FUNCTIONAL_CONSTRAINT__DESC_ID, oldDescID, DESC_ID_EDEFAULT, oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDescID() {
+        return descIDESet;
     }
 
     /**
@@ -254,8 +409,102 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
     public void setTitleID( String newTitleID ) {
         String oldTitleID = titleID;
         titleID = newTitleID;
+        boolean oldTitleIDESet = titleIDESet;
+        titleIDESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.FUNCTIONAL_CONSTRAINT__TITLE_ID, oldTitleID, titleID ) );
+                NsdPackage.FUNCTIONAL_CONSTRAINT__TITLE_ID, oldTitleID, titleID, !oldTitleIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetTitleID() {
+        String oldTitleID = titleID;
+        boolean oldTitleIDESet = titleIDESet;
+        titleID = TITLE_ID_EDEFAULT;
+        titleIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.FUNCTIONAL_CONSTRAINT__TITLE_ID, oldTitleID, TITLE_ID_EDEFAULT, oldTitleIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetTitleID() {
+        return titleIDESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public FunctionalConstraints getFunctionalConstraints() {
+        if( eContainerFeatureID() != NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS ) return null;
+        return ( FunctionalConstraints ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetFunctionalConstraints( FunctionalConstraints newFunctionalConstraints,
+            NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newFunctionalConstraints,
+                NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setFunctionalConstraints( FunctionalConstraints newFunctionalConstraints ) {
+        if( newFunctionalConstraints != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS
+                        && newFunctionalConstraints != null ) ) {
+            if( EcoreUtil.isAncestor( this, newFunctionalConstraints ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newFunctionalConstraints != null )
+                msgs = ( ( InternalEObject ) newFunctionalConstraints ).eInverseAdd( this,
+                        NsdPackage.FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT, FunctionalConstraints.class, msgs );
+            msgs = basicSetFunctionalConstraints( newFunctionalConstraints, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS,
+                        newFunctionalConstraints, newFunctionalConstraints ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES:
+            if( applicableServices != null ) msgs = ( ( InternalEObject ) applicableServices ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES, null, msgs );
+            return basicSetApplicableServices( ( ApplicableServices ) otherEnd, msgs );
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetFunctionalConstraints( ( FunctionalConstraints ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -267,11 +516,28 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
     public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
         switch( featureID ) {
         case NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES:
-            return basicSetApplicableServices( null, msgs );
+            return basicUnsetApplicableServices( msgs );
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
+            return basicSetFunctionalConstraints( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT,
+                    FunctionalConstraints.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -288,6 +554,8 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
             return getDescID();
         case NsdPackage.FUNCTIONAL_CONSTRAINT__TITLE_ID:
             return getTitleID();
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
+            return getFunctionalConstraints();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -312,6 +580,9 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
         case NsdPackage.FUNCTIONAL_CONSTRAINT__TITLE_ID:
             setTitleID( ( String ) newValue );
             return;
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
+            setFunctionalConstraints( ( FunctionalConstraints ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -325,16 +596,19 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES:
-            setApplicableServices( ( ApplicableServices ) null );
+            unsetApplicableServices();
             return;
         case NsdPackage.FUNCTIONAL_CONSTRAINT__ABBREVIATION:
-            setAbbreviation( ABBREVIATION_EDEFAULT );
+            unsetAbbreviation();
             return;
         case NsdPackage.FUNCTIONAL_CONSTRAINT__DESC_ID:
-            setDescID( DESC_ID_EDEFAULT );
+            unsetDescID();
             return;
         case NsdPackage.FUNCTIONAL_CONSTRAINT__TITLE_ID:
-            setTitleID( TITLE_ID_EDEFAULT );
+            unsetTitleID();
+            return;
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
+            setFunctionalConstraints( ( FunctionalConstraints ) null );
             return;
         }
         super.eUnset( featureID );
@@ -349,13 +623,15 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES:
-            return applicableServices != null;
+            return isSetApplicableServices();
         case NsdPackage.FUNCTIONAL_CONSTRAINT__ABBREVIATION:
-            return ABBREVIATION_EDEFAULT == null ? abbreviation != null : !ABBREVIATION_EDEFAULT.equals( abbreviation );
+            return isSetAbbreviation();
         case NsdPackage.FUNCTIONAL_CONSTRAINT__DESC_ID:
-            return DESC_ID_EDEFAULT == null ? descID != null : !DESC_ID_EDEFAULT.equals( descID );
+            return isSetDescID();
         case NsdPackage.FUNCTIONAL_CONSTRAINT__TITLE_ID:
-            return TITLE_ID_EDEFAULT == null ? titleID != null : !TITLE_ID_EDEFAULT.equals( titleID );
+            return isSetTitleID();
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
+            return getFunctionalConstraints() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -371,11 +647,20 @@ public class FunctionalConstraintImpl extends MinimalEObjectImpl.Container imple
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (abbreviation: " );
-        result.append( abbreviation );
+        if( abbreviationESet )
+            result.append( abbreviation );
+        else
+            result.append( "<unset>" );
         result.append( ", descID: " );
-        result.append( descID );
+        if( descIDESet )
+            result.append( descID );
+        else
+            result.append( "<unset>" );
         result.append( ", titleID: " );
-        result.append( titleID );
+        if( titleIDESet )
+            result.append( titleID );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintsImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintsImpl.java
index 661af22..3994ba5 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintsImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintsImpl.java
@@ -21,10 +21,13 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS;
 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;
@@ -32,9 +35,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -46,6 +50,8 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintsImpl#getFunctionalConstraint <em>Functional Constraint</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintsImpl#getNS <em>NS</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintsImpl#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -88,12 +94,143 @@ public class FunctionalConstraintsImpl extends MinimalEObjectImpl.Container impl
     @Override
     public EList< FunctionalConstraint > getFunctionalConstraint() {
         if( functionalConstraint == null ) {
-            functionalConstraint = new EObjectContainmentEList< FunctionalConstraint >( FunctionalConstraint.class,
-                    this, NsdPackage.FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT );
+            functionalConstraint = new EObjectContainmentWithInverseEList.Unsettable< FunctionalConstraint >(
+                    FunctionalConstraint.class, this, NsdPackage.FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT,
+                    NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS );
         }
         return functionalConstraint;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetFunctionalConstraint() {
+        if( functionalConstraint != null ) ( ( InternalEList.Unsettable< ? > ) functionalConstraint ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetFunctionalConstraint() {
+        return functionalConstraint != null && ( ( InternalEList.Unsettable< ? > ) functionalConstraint ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NS getNS() {
+        if( eContainerFeatureID() != NsdPackage.FUNCTIONAL_CONSTRAINTS__NS ) return null;
+        return ( NS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNS( NS newNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNS, NsdPackage.FUNCTIONAL_CONSTRAINTS__NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNS( NS newNS ) {
+        if( newNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.FUNCTIONAL_CONSTRAINTS__NS && newNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNS != null ) msgs = ( ( InternalEObject ) newNS ).eInverseAdd( this,
+                    NsdPackage.NS__FUNCTIONAL_CONSTRAINTS, NS.class, msgs );
+            msgs = basicSetNS( newNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.FUNCTIONAL_CONSTRAINTS__NS, newNS, newNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceNS getServiceNS() {
+        if( eContainerFeatureID() != NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS ) return null;
+        return ( ServiceNS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceNS( ServiceNS newServiceNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceNS, NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS,
+                msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceNS( ServiceNS newServiceNS ) {
+        if( newServiceNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS
+                        && newServiceNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceNS != null ) msgs = ( ( InternalEObject ) newServiceNS ).eInverseAdd( this,
+                    NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS, ServiceNS.class, msgs );
+            msgs = basicSetServiceNS( newServiceNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS, newServiceNS, newServiceNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getFunctionalConstraint() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNS( ( NS ) otherEnd, msgs );
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceNS( ( ServiceNS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -104,10 +241,31 @@ public class FunctionalConstraintsImpl extends MinimalEObjectImpl.Container impl
         switch( featureID ) {
         case NsdPackage.FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT:
             return ( ( InternalEList< ? > ) getFunctionalConstraint() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__NS:
+            return basicSetNS( null, msgs );
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS:
+            return basicSetServiceNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS__FUNCTIONAL_CONSTRAINTS, NS.class, msgs );
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS,
+                    ServiceNS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -118,6 +276,10 @@ public class FunctionalConstraintsImpl extends MinimalEObjectImpl.Container impl
         switch( featureID ) {
         case NsdPackage.FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT:
             return getFunctionalConstraint();
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__NS:
+            return getNS();
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS:
+            return getServiceNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -135,6 +297,12 @@ public class FunctionalConstraintsImpl extends MinimalEObjectImpl.Container impl
             getFunctionalConstraint().clear();
             getFunctionalConstraint().addAll( ( Collection< ? extends FunctionalConstraint > ) newValue );
             return;
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__NS:
+            setNS( ( NS ) newValue );
+            return;
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -148,7 +316,13 @@ public class FunctionalConstraintsImpl extends MinimalEObjectImpl.Container impl
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT:
-            getFunctionalConstraint().clear();
+            unsetFunctionalConstraint();
+            return;
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__NS:
+            setNS( ( NS ) null );
+            return;
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -163,7 +337,11 @@ public class FunctionalConstraintsImpl extends MinimalEObjectImpl.Container impl
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT:
-            return functionalConstraint != null && !functionalConstraint.isEmpty();
+            return isSetFunctionalConstraint();
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__NS:
+            return getNS() != null;
+        case NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS:
+            return getServiceNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LNClassImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LNClassImpl.java
index 21a4baa..65803ce 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LNClassImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LNClassImpl.java
@@ -20,13 +20,17 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -39,6 +43,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LNClassImpl#isCanHaveLOG <em>Can Have LOG</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LNClassImpl#isIsExtension <em>Is Extension</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LNClassImpl#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LNClassImpl#getLNClasses <em>LN Classes</em>}</li>
  * </ul>
  *
  * @generated
@@ -122,6 +127,15 @@ public class LNClassImpl extends AnyLNClassImpl implements LNClass {
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -260,8 +274,121 @@ public class LNClassImpl extends AnyLNClassImpl implements LNClass {
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.LN_CLASS__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.LN_CLASS__NAME,
+                oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.LN_CLASS__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public LNClasses getLNClasses() {
+        if( eContainerFeatureID() != NsdPackage.LN_CLASS__LN_CLASSES ) return null;
+        return ( LNClasses ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetLNClasses( LNClasses newLNClasses, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newLNClasses, NsdPackage.LN_CLASS__LN_CLASSES, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setLNClasses( LNClasses newLNClasses ) {
+        if( newLNClasses != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.LN_CLASS__LN_CLASSES && newLNClasses != null ) ) {
+            if( EcoreUtil.isAncestor( this, newLNClasses ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newLNClasses != null ) msgs = ( ( InternalEObject ) newLNClasses ).eInverseAdd( this,
+                    NsdPackage.LN_CLASSES__LN_CLASS, LNClasses.class, msgs );
+            msgs = basicSetLNClasses( newLNClasses, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.LN_CLASS__LN_CLASSES, newLNClasses, newLNClasses ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.LN_CLASS__LN_CLASSES:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetLNClasses( ( LNClasses ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.LN_CLASS__LN_CLASSES:
+            return basicSetLNClasses( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.LN_CLASS__LN_CLASSES:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.LN_CLASSES__LN_CLASS, LNClasses.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
     }
 
     /**
@@ -278,6 +405,8 @@ public class LNClassImpl extends AnyLNClassImpl implements LNClass {
             return isIsExtension();
         case NsdPackage.LN_CLASS__NAME:
             return getName();
+        case NsdPackage.LN_CLASS__LN_CLASSES:
+            return getLNClasses();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -299,6 +428,9 @@ public class LNClassImpl extends AnyLNClassImpl implements LNClass {
         case NsdPackage.LN_CLASS__NAME:
             setName( ( String ) newValue );
             return;
+        case NsdPackage.LN_CLASS__LN_CLASSES:
+            setLNClasses( ( LNClasses ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -318,7 +450,10 @@ public class LNClassImpl extends AnyLNClassImpl implements LNClass {
             unsetIsExtension();
             return;
         case NsdPackage.LN_CLASS__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
+            return;
+        case NsdPackage.LN_CLASS__LN_CLASSES:
+            setLNClasses( ( LNClasses ) null );
             return;
         }
         super.eUnset( featureID );
@@ -337,7 +472,9 @@ public class LNClassImpl extends AnyLNClassImpl implements LNClass {
         case NsdPackage.LN_CLASS__IS_EXTENSION:
             return isSetIsExtension();
         case NsdPackage.LN_CLASS__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
+        case NsdPackage.LN_CLASS__LN_CLASSES:
+            return getLNClasses() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -363,7 +500,10 @@ public class LNClassImpl extends AnyLNClassImpl implements LNClass {
         else
             result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LNClassesImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LNClassesImpl.java
index fce5ff0..cecf965 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LNClassesImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LNClassesImpl.java
@@ -22,10 +22,12 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AbstractLNClass;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 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;
@@ -33,9 +35,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -48,6 +51,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LNClassesImpl#getAbstractLNClass <em>Abstract LN Class</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LNClassesImpl#getLNClass <em>LN Class</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LNClassesImpl#getNS <em>NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -100,12 +104,33 @@ public class LNClassesImpl extends MinimalEObjectImpl.Container implements LNCla
     @Override
     public EList< AbstractLNClass > getAbstractLNClass() {
         if( abstractLNClass == null ) {
-            abstractLNClass = new EObjectContainmentEList< AbstractLNClass >( AbstractLNClass.class, this,
-                    NsdPackage.LN_CLASSES__ABSTRACT_LN_CLASS );
+            abstractLNClass = new EObjectContainmentWithInverseEList.Unsettable< AbstractLNClass >(
+                    AbstractLNClass.class, this, NsdPackage.LN_CLASSES__ABSTRACT_LN_CLASS,
+                    NsdPackage.ABSTRACT_LN_CLASS__LN_CLASSES );
         }
         return abstractLNClass;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetAbstractLNClass() {
+        if( abstractLNClass != null ) ( ( InternalEList.Unsettable< ? > ) abstractLNClass ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetAbstractLNClass() {
+        return abstractLNClass != null && ( ( InternalEList.Unsettable< ? > ) abstractLNClass ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -114,11 +139,96 @@ public class LNClassesImpl extends MinimalEObjectImpl.Container implements LNCla
     @Override
     public EList< LNClass > getLNClass() {
         if( lNClass == null ) {
-            lNClass = new EObjectContainmentEList< LNClass >( LNClass.class, this, NsdPackage.LN_CLASSES__LN_CLASS );
+            lNClass = new EObjectContainmentWithInverseEList.Unsettable< LNClass >( LNClass.class, this,
+                    NsdPackage.LN_CLASSES__LN_CLASS, NsdPackage.LN_CLASS__LN_CLASSES );
         }
         return lNClass;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetLNClass() {
+        if( lNClass != null ) ( ( InternalEList.Unsettable< ? > ) lNClass ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetLNClass() {
+        return lNClass != null && ( ( InternalEList.Unsettable< ? > ) lNClass ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NS getNS() {
+        if( eContainerFeatureID() != NsdPackage.LN_CLASSES__NS ) return null;
+        return ( NS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNS( NS newNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNS, NsdPackage.LN_CLASSES__NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNS( NS newNS ) {
+        if( newNS != eInternalContainer() || ( eContainerFeatureID() != NsdPackage.LN_CLASSES__NS && newNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNS != null )
+                msgs = ( ( InternalEObject ) newNS ).eInverseAdd( this, NsdPackage.NS__LN_CLASSES, NS.class, msgs );
+            msgs = basicSetNS( newNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.LN_CLASSES__NS, newNS, newNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.LN_CLASSES__ABSTRACT_LN_CLASS:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getAbstractLNClass() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.LN_CLASSES__LN_CLASS:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getLNClass() ).basicAdd( otherEnd,
+                    msgs );
+        case NsdPackage.LN_CLASSES__NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNS( ( NS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -131,10 +241,26 @@ public class LNClassesImpl extends MinimalEObjectImpl.Container implements LNCla
             return ( ( InternalEList< ? > ) getAbstractLNClass() ).basicRemove( otherEnd, msgs );
         case NsdPackage.LN_CLASSES__LN_CLASS:
             return ( ( InternalEList< ? > ) getLNClass() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.LN_CLASSES__NS:
+            return basicSetNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.LN_CLASSES__NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS__LN_CLASSES, NS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -147,6 +273,8 @@ public class LNClassesImpl extends MinimalEObjectImpl.Container implements LNCla
             return getAbstractLNClass();
         case NsdPackage.LN_CLASSES__LN_CLASS:
             return getLNClass();
+        case NsdPackage.LN_CLASSES__NS:
+            return getNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -168,6 +296,9 @@ public class LNClassesImpl extends MinimalEObjectImpl.Container implements LNCla
             getLNClass().clear();
             getLNClass().addAll( ( Collection< ? extends LNClass > ) newValue );
             return;
+        case NsdPackage.LN_CLASSES__NS:
+            setNS( ( NS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -181,10 +312,13 @@ public class LNClassesImpl extends MinimalEObjectImpl.Container implements LNCla
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.LN_CLASSES__ABSTRACT_LN_CLASS:
-            getAbstractLNClass().clear();
+            unsetAbstractLNClass();
             return;
         case NsdPackage.LN_CLASSES__LN_CLASS:
-            getLNClass().clear();
+            unsetLNClass();
+            return;
+        case NsdPackage.LN_CLASSES__NS:
+            setNS( ( NS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -199,9 +333,11 @@ public class LNClassesImpl extends MinimalEObjectImpl.Container implements LNCla
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.LN_CLASSES__ABSTRACT_LN_CLASS:
-            return abstractLNClass != null && !abstractLNClass.isEmpty();
+            return isSetAbstractLNClass();
         case NsdPackage.LN_CLASSES__LN_CLASS:
-            return lNClass != null && !lNClass.isEmpty();
+            return isSetLNClass();
+        case NsdPackage.LN_CLASSES__NS:
+            return getNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LicenseImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LicenseImpl.java
index bfa9cb8..78fe2ad 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LicenseImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LicenseImpl.java
@@ -19,6 +19,7 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.License;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LicenseKind;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
@@ -33,6 +34,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import org.eclipse.emf.ecore.util.BasicFeatureMap;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.FeatureMap;
 import org.eclipse.emf.ecore.util.InternalEList;
 
@@ -47,6 +49,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LicenseImpl#getMixed <em>Mixed</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LicenseImpl#getKind <em>Kind</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LicenseImpl#getUri <em>Uri</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LicenseImpl#getCopyrightNotice <em>Copyright Notice</em>}</li>
  * </ul>
  *
  * @generated
@@ -111,6 +114,15 @@ public class LicenseImpl extends MinimalEObjectImpl.Container implements License
      */
     protected String uri = URI_EDEFAULT;
 
+    /**
+     * This is true if the Uri attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean uriESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -212,8 +224,93 @@ public class LicenseImpl extends MinimalEObjectImpl.Container implements License
     public void setUri( String newUri ) {
         String oldUri = uri;
         uri = newUri;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.LICENSE__URI, oldUri, uri ) );
+        boolean oldUriESet = uriESet;
+        uriESet = true;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.LICENSE__URI, oldUri, uri, !oldUriESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetUri() {
+        String oldUri = uri;
+        boolean oldUriESet = uriESet;
+        uri = URI_EDEFAULT;
+        uriESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.LICENSE__URI,
+                oldUri, URI_EDEFAULT, oldUriESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetUri() {
+        return uriESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public CopyrightNotice getCopyrightNotice() {
+        if( eContainerFeatureID() != NsdPackage.LICENSE__COPYRIGHT_NOTICE ) return null;
+        return ( CopyrightNotice ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetCopyrightNotice( CopyrightNotice newCopyrightNotice, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newCopyrightNotice, NsdPackage.LICENSE__COPYRIGHT_NOTICE, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setCopyrightNotice( CopyrightNotice newCopyrightNotice ) {
+        if( newCopyrightNotice != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.LICENSE__COPYRIGHT_NOTICE && newCopyrightNotice != null ) ) {
+            if( EcoreUtil.isAncestor( this, newCopyrightNotice ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newCopyrightNotice != null ) msgs = ( ( InternalEObject ) newCopyrightNotice ).eInverseAdd( this,
+                    NsdPackage.COPYRIGHT_NOTICE__LICENSE, CopyrightNotice.class, msgs );
+            msgs = basicSetCopyrightNotice( newCopyrightNotice, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.LICENSE__COPYRIGHT_NOTICE, newCopyrightNotice, newCopyrightNotice ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.LICENSE__COPYRIGHT_NOTICE:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetCopyrightNotice( ( CopyrightNotice ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -226,10 +323,27 @@ public class LicenseImpl extends MinimalEObjectImpl.Container implements License
         switch( featureID ) {
         case NsdPackage.LICENSE__MIXED:
             return ( ( InternalEList< ? > ) getMixed() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.LICENSE__COPYRIGHT_NOTICE:
+            return basicSetCopyrightNotice( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.LICENSE__COPYRIGHT_NOTICE:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.COPYRIGHT_NOTICE__LICENSE,
+                    CopyrightNotice.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -245,6 +359,8 @@ public class LicenseImpl extends MinimalEObjectImpl.Container implements License
             return getKind();
         case NsdPackage.LICENSE__URI:
             return getUri();
+        case NsdPackage.LICENSE__COPYRIGHT_NOTICE:
+            return getCopyrightNotice();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -266,6 +382,9 @@ public class LicenseImpl extends MinimalEObjectImpl.Container implements License
         case NsdPackage.LICENSE__URI:
             setUri( ( String ) newValue );
             return;
+        case NsdPackage.LICENSE__COPYRIGHT_NOTICE:
+            setCopyrightNotice( ( CopyrightNotice ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -285,7 +404,10 @@ public class LicenseImpl extends MinimalEObjectImpl.Container implements License
             unsetKind();
             return;
         case NsdPackage.LICENSE__URI:
-            setUri( URI_EDEFAULT );
+            unsetUri();
+            return;
+        case NsdPackage.LICENSE__COPYRIGHT_NOTICE:
+            setCopyrightNotice( ( CopyrightNotice ) null );
             return;
         }
         super.eUnset( featureID );
@@ -304,7 +426,9 @@ public class LicenseImpl extends MinimalEObjectImpl.Container implements License
         case NsdPackage.LICENSE__KIND:
             return isSetKind();
         case NsdPackage.LICENSE__URI:
-            return URI_EDEFAULT == null ? uri != null : !URI_EDEFAULT.equals( uri );
+            return isSetUri();
+        case NsdPackage.LICENSE__COPYRIGHT_NOTICE:
+            return getCopyrightNotice() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -327,7 +451,10 @@ public class LicenseImpl extends MinimalEObjectImpl.Container implements License
         else
             result.append( "<unset>" );
         result.append( ", uri: " );
-        result.append( uri );
+        if( uriESet )
+            result.append( uri );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LiteralImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LiteralImpl.java
index bad0005..e252431 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LiteralImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/LiteralImpl.java
@@ -19,14 +19,18 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -38,6 +42,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LiteralImpl#getLiteralVal <em>Literal Val</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LiteralImpl#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.LiteralImpl#getEnumeration <em>Enumeration</em>}</li>
  * </ul>
  *
  * @generated
@@ -92,6 +97,15 @@ public class LiteralImpl extends DocumentedClassImpl implements Literal {
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -180,8 +194,122 @@ public class LiteralImpl extends DocumentedClassImpl implements Literal {
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.LITERAL__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.LITERAL__NAME,
+                oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.LITERAL__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Enumeration getEnumeration() {
+        if( eContainerFeatureID() != NsdPackage.LITERAL__ENUMERATION ) return null;
+        return ( Enumeration ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetEnumeration( Enumeration newEnumeration, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newEnumeration, NsdPackage.LITERAL__ENUMERATION, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setEnumeration( Enumeration newEnumeration ) {
+        if( newEnumeration != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.LITERAL__ENUMERATION && newEnumeration != null ) ) {
+            if( EcoreUtil.isAncestor( this, newEnumeration ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newEnumeration != null ) msgs = ( ( InternalEObject ) newEnumeration ).eInverseAdd( this,
+                    NsdPackage.ENUMERATION__LITERAL, Enumeration.class, msgs );
+            msgs = basicSetEnumeration( newEnumeration, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.LITERAL__ENUMERATION, newEnumeration, newEnumeration ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.LITERAL__ENUMERATION:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetEnumeration( ( Enumeration ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.LITERAL__ENUMERATION:
+            return basicSetEnumeration( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.LITERAL__ENUMERATION:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.ENUMERATION__LITERAL, Enumeration.class,
+                    msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
     }
 
     /**
@@ -196,6 +324,8 @@ public class LiteralImpl extends DocumentedClassImpl implements Literal {
             return getLiteralVal();
         case NsdPackage.LITERAL__NAME:
             return getName();
+        case NsdPackage.LITERAL__ENUMERATION:
+            return getEnumeration();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -214,6 +344,9 @@ public class LiteralImpl extends DocumentedClassImpl implements Literal {
         case NsdPackage.LITERAL__NAME:
             setName( ( String ) newValue );
             return;
+        case NsdPackage.LITERAL__ENUMERATION:
+            setEnumeration( ( Enumeration ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -230,7 +363,10 @@ public class LiteralImpl extends DocumentedClassImpl implements Literal {
             unsetLiteralVal();
             return;
         case NsdPackage.LITERAL__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
+            return;
+        case NsdPackage.LITERAL__ENUMERATION:
+            setEnumeration( ( Enumeration ) null );
             return;
         }
         super.eUnset( featureID );
@@ -247,7 +383,9 @@ public class LiteralImpl extends DocumentedClassImpl implements Literal {
         case NsdPackage.LITERAL__LITERAL_VAL:
             return isSetLiteralVal();
         case NsdPackage.LITERAL__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
+        case NsdPackage.LITERAL__ENUMERATION:
+            return getEnumeration() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -268,7 +406,10 @@ public class LiteralImpl extends DocumentedClassImpl implements Literal {
         else
             result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSDocImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSDocImpl.java
index 7bb3ad5..ab08a14 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSDocImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSDocImpl.java
@@ -38,8 +38,7 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -152,6 +151,15 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
      */
     protected String id = ID_EDEFAULT;
 
+    /**
+     * This is true if the Id attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean idESet;
+
     /**
      * The default value of the '{@link #getLang() <em>Lang</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -172,6 +180,15 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
      */
     protected String lang = LANG_EDEFAULT;
 
+    /**
+     * This is true if the Lang attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean langESet;
+
     /**
      * The default value of the '{@link #getPublicationStage() <em>Publication Stage</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -250,6 +267,15 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
      */
     protected XMLGregorianCalendar umlDate = UML_DATE_EDEFAULT;
 
+    /**
+     * This is true if the Uml Date attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean umlDateESet;
+
     /**
      * The default value of the '{@link #getUmlVersion() <em>Uml Version</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -270,6 +296,15 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
      */
     protected String umlVersion = UML_VERSION_EDEFAULT;
 
+    /**
+     * This is true if the Uml Version attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean umlVersionESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -297,11 +332,32 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
     @Override
     public EList< Doc > getDoc() {
         if( doc == null ) {
-            doc = new EObjectContainmentEList< Doc >( Doc.class, this, NsdPackage.NS_DOC__DOC );
+            doc = new EObjectContainmentWithInverseEList.Unsettable< Doc >( Doc.class, this, NsdPackage.NS_DOC__DOC,
+                    NsdPackage.DOC__NS_DOC );
         }
         return doc;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDoc() {
+        if( doc != null ) ( ( InternalEList.Unsettable< ? > ) doc ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDoc() {
+        return doc != null && ( ( InternalEList.Unsettable< ? > ) doc ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -321,8 +377,35 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
     public void setId( String newId ) {
         String oldId = id;
         id = newId;
+        boolean oldIdESet = idESet;
+        idESet = true;
         if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS_DOC__ID, oldId, id ) );
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS_DOC__ID, oldId, id, !oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetId() {
+        String oldId = id;
+        boolean oldIdESet = idESet;
+        id = ID_EDEFAULT;
+        idESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.NS_DOC__ID,
+                oldId, ID_EDEFAULT, oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetId() {
+        return idESet;
     }
 
     /**
@@ -344,8 +427,35 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
     public void setLang( String newLang ) {
         String oldLang = lang;
         lang = newLang;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS_DOC__LANG, oldLang, lang ) );
+        boolean oldLangESet = langESet;
+        langESet = true;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.NS_DOC__LANG, oldLang, lang, !oldLangESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetLang() {
+        String oldLang = lang;
+        boolean oldLangESet = langESet;
+        lang = LANG_EDEFAULT;
+        langESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.NS_DOC__LANG,
+                oldLang, LANG_EDEFAULT, oldLangESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetLang() {
+        return langESet;
     }
 
     /**
@@ -519,8 +629,35 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
     public void setUmlDate( XMLGregorianCalendar newUmlDate ) {
         XMLGregorianCalendar oldUmlDate = umlDate;
         umlDate = newUmlDate;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.NS_DOC__UML_DATE, oldUmlDate, umlDate ) );
+        boolean oldUmlDateESet = umlDateESet;
+        umlDateESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.NS_DOC__UML_DATE, oldUmlDate, umlDate, !oldUmlDateESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetUmlDate() {
+        XMLGregorianCalendar oldUmlDate = umlDate;
+        boolean oldUmlDateESet = umlDateESet;
+        umlDate = UML_DATE_EDEFAULT;
+        umlDateESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.NS_DOC__UML_DATE, oldUmlDate, UML_DATE_EDEFAULT, oldUmlDateESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetUmlDate() {
+        return umlDateESet;
     }
 
     /**
@@ -542,8 +679,50 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
     public void setUmlVersion( String newUmlVersion ) {
         String oldUmlVersion = umlVersion;
         umlVersion = newUmlVersion;
+        boolean oldUmlVersionESet = umlVersionESet;
+        umlVersionESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.NS_DOC__UML_VERSION, oldUmlVersion, umlVersion ) );
+                NsdPackage.NS_DOC__UML_VERSION, oldUmlVersion, umlVersion, !oldUmlVersionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetUmlVersion() {
+        String oldUmlVersion = umlVersion;
+        boolean oldUmlVersionESet = umlVersionESet;
+        umlVersion = UML_VERSION_EDEFAULT;
+        umlVersionESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.NS_DOC__UML_VERSION, oldUmlVersion, UML_VERSION_EDEFAULT, oldUmlVersionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetUmlVersion() {
+        return umlVersionESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.NS_DOC__DOC:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getDoc() ).basicAdd( otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -696,13 +875,13 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
             unsetVersion();
             return;
         case NsdPackage.NS_DOC__DOC:
-            getDoc().clear();
+            unsetDoc();
             return;
         case NsdPackage.NS_DOC__ID:
-            setId( ID_EDEFAULT );
+            unsetId();
             return;
         case NsdPackage.NS_DOC__LANG:
-            setLang( LANG_EDEFAULT );
+            unsetLang();
             return;
         case NsdPackage.NS_DOC__PUBLICATION_STAGE:
             unsetPublicationStage();
@@ -711,10 +890,10 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
             unsetRevision();
             return;
         case NsdPackage.NS_DOC__UML_DATE:
-            setUmlDate( UML_DATE_EDEFAULT );
+            unsetUmlDate();
             return;
         case NsdPackage.NS_DOC__UML_VERSION:
-            setUmlVersion( UML_VERSION_EDEFAULT );
+            unsetUmlVersion();
             return;
         }
         super.eUnset( featureID );
@@ -733,19 +912,19 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
         case NsdPackage.NS_DOC__VERSION:
             return isSetVersion();
         case NsdPackage.NS_DOC__DOC:
-            return doc != null && !doc.isEmpty();
+            return isSetDoc();
         case NsdPackage.NS_DOC__ID:
-            return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals( id );
+            return isSetId();
         case NsdPackage.NS_DOC__LANG:
-            return LANG_EDEFAULT == null ? lang != null : !LANG_EDEFAULT.equals( lang );
+            return isSetLang();
         case NsdPackage.NS_DOC__PUBLICATION_STAGE:
             return isSetPublicationStage();
         case NsdPackage.NS_DOC__REVISION:
             return isSetRevision();
         case NsdPackage.NS_DOC__UML_DATE:
-            return UML_DATE_EDEFAULT == null ? umlDate != null : !UML_DATE_EDEFAULT.equals( umlDate );
+            return isSetUmlDate();
         case NsdPackage.NS_DOC__UML_VERSION:
-            return UML_VERSION_EDEFAULT == null ? umlVersion != null : !UML_VERSION_EDEFAULT.equals( umlVersion );
+            return isSetUmlVersion();
         }
         return super.eIsSet( featureID );
     }
@@ -811,9 +990,15 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
         else
             result.append( "<unset>" );
         result.append( ", id: " );
-        result.append( id );
+        if( idESet )
+            result.append( id );
+        else
+            result.append( "<unset>" );
         result.append( ", lang: " );
-        result.append( lang );
+        if( langESet )
+            result.append( lang );
+        else
+            result.append( "<unset>" );
         result.append( ", publicationStage: " );
         if( publicationStageESet )
             result.append( publicationStage );
@@ -825,9 +1010,15 @@ public class NSDocImpl extends CopyrightedImpl implements NSDoc {
         else
             result.append( "<unset>" );
         result.append( ", umlDate: " );
-        result.append( umlDate );
+        if( umlDateESet )
+            result.append( umlDate );
+        else
+            result.append( "<unset>" );
         result.append( ", umlVersion: " );
-        result.append( umlVersion );
+        if( umlVersionESet )
+            result.append( umlVersion );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSImpl.java
index 7895fe7..b5dc050 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSImpl.java
@@ -24,7 +24,7 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses;
@@ -143,6 +143,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected Changes changes;
 
+    /**
+     * This is true if the Changes containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean changesESet;
+
     /**
      * The cached value of the '{@link #getDependsOn() <em>Depends On</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -151,7 +160,16 @@ public class NSImpl extends CopyrightedImpl implements NS {
      * @generated
      * @ordered
      */
-    protected DependsOnType dependsOn;
+    protected DependsOn dependsOn;
+
+    /**
+     * This is true if the Depends On containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean dependsOnESet;
 
     /**
      * The cached value of the '{@link #getBasicTypes() <em>Basic Types</em>}' containment reference.
@@ -163,6 +181,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected BasicTypes basicTypes;
 
+    /**
+     * This is true if the Basic Types containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean basicTypesESet;
+
     /**
      * The cached value of the '{@link #getFunctionalConstraints() <em>Functional Constraints</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -173,6 +200,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected FunctionalConstraints functionalConstraints;
 
+    /**
+     * This is true if the Functional Constraints containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean functionalConstraintsESet;
+
     /**
      * The cached value of the '{@link #getPresenceConditions() <em>Presence Conditions</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -183,6 +219,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected PresenceConditions presenceConditions;
 
+    /**
+     * This is true if the Presence Conditions containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presenceConditionsESet;
+
     /**
      * The cached value of the '{@link #getAbbreviations() <em>Abbreviations</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -193,6 +238,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected Abbreviations abbreviations;
 
+    /**
+     * This is true if the Abbreviations containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean abbreviationsESet;
+
     /**
      * The cached value of the '{@link #getEnumerations() <em>Enumerations</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -203,6 +257,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected Enumerations enumerations;
 
+    /**
+     * This is true if the Enumerations containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean enumerationsESet;
+
     /**
      * The cached value of the '{@link #getConstructedAttributes() <em>Constructed Attributes</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -213,6 +276,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected ConstructedAttributes constructedAttributes;
 
+    /**
+     * This is true if the Constructed Attributes containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean constructedAttributesESet;
+
     /**
      * The cached value of the '{@link #getCDCs() <em>CD Cs</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -223,6 +295,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected CDCs cDCs;
 
+    /**
+     * This is true if the CD Cs containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean cDCsESet;
+
     /**
      * The cached value of the '{@link #getLNClasses() <em>LN Classes</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -233,6 +314,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected LNClasses lNClasses;
 
+    /**
+     * This is true if the LN Classes containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean lNClassesESet;
+
     /**
      * The default value of the '{@link #getDescID() <em>Desc ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -253,6 +343,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected String descID = DESC_ID_EDEFAULT;
 
+    /**
+     * This is true if the Desc ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean descIDESet;
+
     /**
      * The default value of the '{@link #getId() <em>Id</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -273,6 +372,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected String id = ID_EDEFAULT;
 
+    /**
+     * This is true if the Id attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean idESet;
+
     /**
      * The default value of the '{@link #getPublicationStage() <em>Publication Stage</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -351,6 +459,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected XMLGregorianCalendar umlDate = UML_DATE_EDEFAULT;
 
+    /**
+     * This is true if the Uml Date attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean umlDateESet;
+
     /**
      * The default value of the '{@link #getUmlVersion() <em>Uml Version</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -371,6 +488,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     protected String umlVersion = UML_VERSION_EDEFAULT;
 
+    /**
+     * This is true if the Uml Version attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean umlVersionESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -408,9 +534,11 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public NotificationChain basicSetChanges( Changes newChanges, NotificationChain msgs ) {
         Changes oldChanges = changes;
         changes = newChanges;
+        boolean oldChangesESet = changesESet;
+        changesESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET, NsdPackage.NS__CHANGES,
-                    oldChanges, newChanges );
+                    oldChanges, newChanges, !oldChangesESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -428,15 +556,61 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public void setChanges( Changes newChanges ) {
         if( newChanges != changes ) {
             NotificationChain msgs = null;
-            if( changes != null ) msgs = ( ( InternalEObject ) changes ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__CHANGES, null, msgs );
+            if( changes != null ) msgs = ( ( InternalEObject ) changes ).eInverseRemove( this, NsdPackage.CHANGES__NS,
+                    Changes.class, msgs );
             if( newChanges != null ) msgs = ( ( InternalEObject ) newChanges ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__CHANGES, null, msgs );
+                    NsdPackage.CHANGES__NS, Changes.class, msgs );
             msgs = basicSetChanges( newChanges, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__CHANGES, newChanges, newChanges ) );
+        else {
+            boolean oldChangesESet = changesESet;
+            changesESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.NS__CHANGES, newChanges, newChanges, !oldChangesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetChanges( NotificationChain msgs ) {
+        Changes oldChanges = changes;
+        changes = null;
+        boolean oldChangesESet = changesESet;
+        changesESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET, NsdPackage.NS__CHANGES,
+                    oldChanges, null, oldChangesESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetChanges() {
+        if( changes != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) changes ).eInverseRemove( this, NsdPackage.CHANGES__NS, Changes.class, msgs );
+            msgs = basicUnsetChanges( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldChangesESet = changesESet;
+            changesESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__CHANGES, null, null, oldChangesESet ) );
+        }
     }
 
     /**
@@ -445,7 +619,17 @@ public class NSImpl extends CopyrightedImpl implements NS {
      * @generated
      */
     @Override
-    public DependsOnType getDependsOn() {
+    public boolean isSetChanges() {
+        return changesESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public DependsOn getDependsOn() {
         return dependsOn;
     }
 
@@ -454,12 +638,14 @@ public class NSImpl extends CopyrightedImpl implements NS {
      * <!-- end-user-doc -->
      * @generated
      */
-    public NotificationChain basicSetDependsOn( DependsOnType newDependsOn, NotificationChain msgs ) {
-        DependsOnType oldDependsOn = dependsOn;
+    public NotificationChain basicSetDependsOn( DependsOn newDependsOn, NotificationChain msgs ) {
+        DependsOn oldDependsOn = dependsOn;
         dependsOn = newDependsOn;
+        boolean oldDependsOnESet = dependsOnESet;
+        dependsOnESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET, NsdPackage.NS__DEPENDS_ON,
-                    oldDependsOn, newDependsOn );
+                    oldDependsOn, newDependsOn, !oldDependsOnESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -474,18 +660,75 @@ public class NSImpl extends CopyrightedImpl implements NS {
      * @generated
      */
     @Override
-    public void setDependsOn( DependsOnType newDependsOn ) {
+    public void setDependsOn( DependsOn newDependsOn ) {
         if( newDependsOn != dependsOn ) {
             NotificationChain msgs = null;
             if( dependsOn != null ) msgs = ( ( InternalEObject ) dependsOn ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__DEPENDS_ON, null, msgs );
+                    NsdPackage.DEPENDS_ON__NS, DependsOn.class, msgs );
             if( newDependsOn != null ) msgs = ( ( InternalEObject ) newDependsOn ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__DEPENDS_ON, null, msgs );
+                    NsdPackage.DEPENDS_ON__NS, DependsOn.class, msgs );
             msgs = basicSetDependsOn( newDependsOn, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.NS__DEPENDS_ON, newDependsOn, newDependsOn ) );
+        else {
+            boolean oldDependsOnESet = dependsOnESet;
+            dependsOnESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.NS__DEPENDS_ON, newDependsOn, newDependsOn, !oldDependsOnESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetDependsOn( NotificationChain msgs ) {
+        DependsOn oldDependsOn = dependsOn;
+        dependsOn = null;
+        boolean oldDependsOnESet = dependsOnESet;
+        dependsOnESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET, NsdPackage.NS__DEPENDS_ON,
+                    oldDependsOn, null, oldDependsOnESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDependsOn() {
+        if( dependsOn != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) dependsOn ).eInverseRemove( this, NsdPackage.DEPENDS_ON__NS, DependsOn.class,
+                    msgs );
+            msgs = basicUnsetDependsOn( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldDependsOnESet = dependsOnESet;
+            dependsOnESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__DEPENDS_ON, null, null, oldDependsOnESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDependsOn() {
+        return dependsOnESet;
     }
 
     /**
@@ -506,9 +749,11 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public NotificationChain basicSetBasicTypes( BasicTypes newBasicTypes, NotificationChain msgs ) {
         BasicTypes oldBasicTypes = basicTypes;
         basicTypes = newBasicTypes;
+        boolean oldBasicTypesESet = basicTypesESet;
+        basicTypesESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET, NsdPackage.NS__BASIC_TYPES,
-                    oldBasicTypes, newBasicTypes );
+                    oldBasicTypes, newBasicTypes, !oldBasicTypesESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -527,14 +772,71 @@ public class NSImpl extends CopyrightedImpl implements NS {
         if( newBasicTypes != basicTypes ) {
             NotificationChain msgs = null;
             if( basicTypes != null ) msgs = ( ( InternalEObject ) basicTypes ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__BASIC_TYPES, null, msgs );
+                    NsdPackage.BASIC_TYPES__NS, BasicTypes.class, msgs );
             if( newBasicTypes != null ) msgs = ( ( InternalEObject ) newBasicTypes ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__BASIC_TYPES, null, msgs );
+                    NsdPackage.BASIC_TYPES__NS, BasicTypes.class, msgs );
             msgs = basicSetBasicTypes( newBasicTypes, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.NS__BASIC_TYPES, newBasicTypes, newBasicTypes ) );
+        else {
+            boolean oldBasicTypesESet = basicTypesESet;
+            basicTypesESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.NS__BASIC_TYPES, newBasicTypes, newBasicTypes, !oldBasicTypesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetBasicTypes( NotificationChain msgs ) {
+        BasicTypes oldBasicTypes = basicTypes;
+        basicTypes = null;
+        boolean oldBasicTypesESet = basicTypesESet;
+        basicTypesESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__BASIC_TYPES, oldBasicTypes, null, oldBasicTypesESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetBasicTypes() {
+        if( basicTypes != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) basicTypes ).eInverseRemove( this, NsdPackage.BASIC_TYPES__NS,
+                    BasicTypes.class, msgs );
+            msgs = basicUnsetBasicTypes( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldBasicTypesESet = basicTypesESet;
+            basicTypesESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__BASIC_TYPES, null, null, oldBasicTypesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetBasicTypes() {
+        return basicTypesESet;
     }
 
     /**
@@ -556,9 +858,12 @@ public class NSImpl extends CopyrightedImpl implements NS {
             NotificationChain msgs ) {
         FunctionalConstraints oldFunctionalConstraints = functionalConstraints;
         functionalConstraints = newFunctionalConstraints;
+        boolean oldFunctionalConstraintsESet = functionalConstraintsESet;
+        functionalConstraintsESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.NS__FUNCTIONAL_CONSTRAINTS, oldFunctionalConstraints, newFunctionalConstraints );
+                    NsdPackage.NS__FUNCTIONAL_CONSTRAINTS, oldFunctionalConstraints, newFunctionalConstraints,
+                    !oldFunctionalConstraintsESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -577,14 +882,73 @@ public class NSImpl extends CopyrightedImpl implements NS {
         if( newFunctionalConstraints != functionalConstraints ) {
             NotificationChain msgs = null;
             if( functionalConstraints != null ) msgs = ( ( InternalEObject ) functionalConstraints )
-                    .eInverseRemove( this, EOPPOSITE_FEATURE_BASE - NsdPackage.NS__FUNCTIONAL_CONSTRAINTS, null, msgs );
+                    .eInverseRemove( this, NsdPackage.FUNCTIONAL_CONSTRAINTS__NS, FunctionalConstraints.class, msgs );
             if( newFunctionalConstraints != null ) msgs = ( ( InternalEObject ) newFunctionalConstraints )
-                    .eInverseAdd( this, EOPPOSITE_FEATURE_BASE - NsdPackage.NS__FUNCTIONAL_CONSTRAINTS, null, msgs );
+                    .eInverseAdd( this, NsdPackage.FUNCTIONAL_CONSTRAINTS__NS, FunctionalConstraints.class, msgs );
             msgs = basicSetFunctionalConstraints( newFunctionalConstraints, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.NS__FUNCTIONAL_CONSTRAINTS, newFunctionalConstraints, newFunctionalConstraints ) );
+        else {
+            boolean oldFunctionalConstraintsESet = functionalConstraintsESet;
+            functionalConstraintsESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__FUNCTIONAL_CONSTRAINTS,
+                        newFunctionalConstraints, newFunctionalConstraints, !oldFunctionalConstraintsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetFunctionalConstraints( NotificationChain msgs ) {
+        FunctionalConstraints oldFunctionalConstraints = functionalConstraints;
+        functionalConstraints = null;
+        boolean oldFunctionalConstraintsESet = functionalConstraintsESet;
+        functionalConstraintsESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__FUNCTIONAL_CONSTRAINTS, oldFunctionalConstraints, null,
+                    oldFunctionalConstraintsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetFunctionalConstraints() {
+        if( functionalConstraints != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) functionalConstraints ).eInverseRemove( this,
+                    NsdPackage.FUNCTIONAL_CONSTRAINTS__NS, FunctionalConstraints.class, msgs );
+            msgs = basicUnsetFunctionalConstraints( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldFunctionalConstraintsESet = functionalConstraintsESet;
+            functionalConstraintsESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__FUNCTIONAL_CONSTRAINTS, null, null, oldFunctionalConstraintsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetFunctionalConstraints() {
+        return functionalConstraintsESet;
     }
 
     /**
@@ -606,9 +970,12 @@ public class NSImpl extends CopyrightedImpl implements NS {
             NotificationChain msgs ) {
         PresenceConditions oldPresenceConditions = presenceConditions;
         presenceConditions = newPresenceConditions;
+        boolean oldPresenceConditionsESet = presenceConditionsESet;
+        presenceConditionsESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.NS__PRESENCE_CONDITIONS, oldPresenceConditions, newPresenceConditions );
+                    NsdPackage.NS__PRESENCE_CONDITIONS, oldPresenceConditions, newPresenceConditions,
+                    !oldPresenceConditionsESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -627,14 +994,72 @@ public class NSImpl extends CopyrightedImpl implements NS {
         if( newPresenceConditions != presenceConditions ) {
             NotificationChain msgs = null;
             if( presenceConditions != null ) msgs = ( ( InternalEObject ) presenceConditions ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__PRESENCE_CONDITIONS, null, msgs );
+                    NsdPackage.PRESENCE_CONDITIONS__NS, PresenceConditions.class, msgs );
             if( newPresenceConditions != null ) msgs = ( ( InternalEObject ) newPresenceConditions ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__PRESENCE_CONDITIONS, null, msgs );
+                    NsdPackage.PRESENCE_CONDITIONS__NS, PresenceConditions.class, msgs );
             msgs = basicSetPresenceConditions( newPresenceConditions, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.NS__PRESENCE_CONDITIONS, newPresenceConditions, newPresenceConditions ) );
+        else {
+            boolean oldPresenceConditionsESet = presenceConditionsESet;
+            presenceConditionsESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__PRESENCE_CONDITIONS,
+                        newPresenceConditions, newPresenceConditions, !oldPresenceConditionsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetPresenceConditions( NotificationChain msgs ) {
+        PresenceConditions oldPresenceConditions = presenceConditions;
+        presenceConditions = null;
+        boolean oldPresenceConditionsESet = presenceConditionsESet;
+        presenceConditionsESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__PRESENCE_CONDITIONS, oldPresenceConditions, null, oldPresenceConditionsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresenceConditions() {
+        if( presenceConditions != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) presenceConditions ).eInverseRemove( this, NsdPackage.PRESENCE_CONDITIONS__NS,
+                    PresenceConditions.class, msgs );
+            msgs = basicUnsetPresenceConditions( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldPresenceConditionsESet = presenceConditionsESet;
+            presenceConditionsESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__PRESENCE_CONDITIONS, null, null, oldPresenceConditionsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresenceConditions() {
+        return presenceConditionsESet;
     }
 
     /**
@@ -655,9 +1080,11 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public NotificationChain basicSetAbbreviations( Abbreviations newAbbreviations, NotificationChain msgs ) {
         Abbreviations oldAbbreviations = abbreviations;
         abbreviations = newAbbreviations;
+        boolean oldAbbreviationsESet = abbreviationsESet;
+        abbreviationsESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.NS__ABBREVIATIONS, oldAbbreviations, newAbbreviations );
+                    NsdPackage.NS__ABBREVIATIONS, oldAbbreviations, newAbbreviations, !oldAbbreviationsESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -676,14 +1103,71 @@ public class NSImpl extends CopyrightedImpl implements NS {
         if( newAbbreviations != abbreviations ) {
             NotificationChain msgs = null;
             if( abbreviations != null ) msgs = ( ( InternalEObject ) abbreviations ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__ABBREVIATIONS, null, msgs );
+                    NsdPackage.ABBREVIATIONS__NS, Abbreviations.class, msgs );
             if( newAbbreviations != null ) msgs = ( ( InternalEObject ) newAbbreviations ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__ABBREVIATIONS, null, msgs );
+                    NsdPackage.ABBREVIATIONS__NS, Abbreviations.class, msgs );
             msgs = basicSetAbbreviations( newAbbreviations, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.NS__ABBREVIATIONS, newAbbreviations, newAbbreviations ) );
+        else {
+            boolean oldAbbreviationsESet = abbreviationsESet;
+            abbreviationsESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.NS__ABBREVIATIONS, newAbbreviations, newAbbreviations, !oldAbbreviationsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetAbbreviations( NotificationChain msgs ) {
+        Abbreviations oldAbbreviations = abbreviations;
+        abbreviations = null;
+        boolean oldAbbreviationsESet = abbreviationsESet;
+        abbreviationsESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__ABBREVIATIONS, oldAbbreviations, null, oldAbbreviationsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetAbbreviations() {
+        if( abbreviations != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) abbreviations ).eInverseRemove( this, NsdPackage.ABBREVIATIONS__NS,
+                    Abbreviations.class, msgs );
+            msgs = basicUnsetAbbreviations( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldAbbreviationsESet = abbreviationsESet;
+            abbreviationsESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__ABBREVIATIONS, null, null, oldAbbreviationsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetAbbreviations() {
+        return abbreviationsESet;
     }
 
     /**
@@ -701,12 +1185,59 @@ public class NSImpl extends CopyrightedImpl implements NS {
      * <!-- end-user-doc -->
      * @generated
      */
-    public NotificationChain basicSetEnumerations( Enumerations newEnumerations, NotificationChain msgs ) {
+    public NotificationChain basicSetEnumerations( Enumerations newEnumerations, NotificationChain msgs ) {
+        Enumerations oldEnumerations = enumerations;
+        enumerations = newEnumerations;
+        boolean oldEnumerationsESet = enumerationsESet;
+        enumerationsESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET, NsdPackage.NS__ENUMERATIONS,
+                    oldEnumerations, newEnumerations, !oldEnumerationsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setEnumerations( Enumerations newEnumerations ) {
+        if( newEnumerations != enumerations ) {
+            NotificationChain msgs = null;
+            if( enumerations != null ) msgs = ( ( InternalEObject ) enumerations ).eInverseRemove( this,
+                    NsdPackage.ENUMERATIONS__NS, Enumerations.class, msgs );
+            if( newEnumerations != null ) msgs = ( ( InternalEObject ) newEnumerations ).eInverseAdd( this,
+                    NsdPackage.ENUMERATIONS__NS, Enumerations.class, msgs );
+            msgs = basicSetEnumerations( newEnumerations, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldEnumerationsESet = enumerationsESet;
+            enumerationsESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.NS__ENUMERATIONS, newEnumerations, newEnumerations, !oldEnumerationsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetEnumerations( NotificationChain msgs ) {
         Enumerations oldEnumerations = enumerations;
-        enumerations = newEnumerations;
+        enumerations = null;
+        boolean oldEnumerationsESet = enumerationsESet;
+        enumerationsESet = false;
         if( eNotificationRequired() ) {
-            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET, NsdPackage.NS__ENUMERATIONS,
-                    oldEnumerations, newEnumerations );
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__ENUMERATIONS, oldEnumerations, null, oldEnumerationsESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -721,18 +1252,30 @@ public class NSImpl extends CopyrightedImpl implements NS {
      * @generated
      */
     @Override
-    public void setEnumerations( Enumerations newEnumerations ) {
-        if( newEnumerations != enumerations ) {
+    public void unsetEnumerations() {
+        if( enumerations != null ) {
             NotificationChain msgs = null;
-            if( enumerations != null ) msgs = ( ( InternalEObject ) enumerations ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__ENUMERATIONS, null, msgs );
-            if( newEnumerations != null ) msgs = ( ( InternalEObject ) newEnumerations ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__ENUMERATIONS, null, msgs );
-            msgs = basicSetEnumerations( newEnumerations, msgs );
+            msgs = ( ( InternalEObject ) enumerations ).eInverseRemove( this, NsdPackage.ENUMERATIONS__NS,
+                    Enumerations.class, msgs );
+            msgs = basicUnsetEnumerations( msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.NS__ENUMERATIONS, newEnumerations, newEnumerations ) );
+        else {
+            boolean oldEnumerationsESet = enumerationsESet;
+            enumerationsESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__ENUMERATIONS, null, null, oldEnumerationsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetEnumerations() {
+        return enumerationsESet;
     }
 
     /**
@@ -754,9 +1297,12 @@ public class NSImpl extends CopyrightedImpl implements NS {
             NotificationChain msgs ) {
         ConstructedAttributes oldConstructedAttributes = constructedAttributes;
         constructedAttributes = newConstructedAttributes;
+        boolean oldConstructedAttributesESet = constructedAttributesESet;
+        constructedAttributesESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.NS__CONSTRUCTED_ATTRIBUTES, oldConstructedAttributes, newConstructedAttributes );
+                    NsdPackage.NS__CONSTRUCTED_ATTRIBUTES, oldConstructedAttributes, newConstructedAttributes,
+                    !oldConstructedAttributesESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -775,14 +1321,73 @@ public class NSImpl extends CopyrightedImpl implements NS {
         if( newConstructedAttributes != constructedAttributes ) {
             NotificationChain msgs = null;
             if( constructedAttributes != null ) msgs = ( ( InternalEObject ) constructedAttributes )
-                    .eInverseRemove( this, EOPPOSITE_FEATURE_BASE - NsdPackage.NS__CONSTRUCTED_ATTRIBUTES, null, msgs );
+                    .eInverseRemove( this, NsdPackage.CONSTRUCTED_ATTRIBUTES__NS, ConstructedAttributes.class, msgs );
             if( newConstructedAttributes != null ) msgs = ( ( InternalEObject ) newConstructedAttributes )
-                    .eInverseAdd( this, EOPPOSITE_FEATURE_BASE - NsdPackage.NS__CONSTRUCTED_ATTRIBUTES, null, msgs );
+                    .eInverseAdd( this, NsdPackage.CONSTRUCTED_ATTRIBUTES__NS, ConstructedAttributes.class, msgs );
             msgs = basicSetConstructedAttributes( newConstructedAttributes, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.NS__CONSTRUCTED_ATTRIBUTES, newConstructedAttributes, newConstructedAttributes ) );
+        else {
+            boolean oldConstructedAttributesESet = constructedAttributesESet;
+            constructedAttributesESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__CONSTRUCTED_ATTRIBUTES,
+                        newConstructedAttributes, newConstructedAttributes, !oldConstructedAttributesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetConstructedAttributes( NotificationChain msgs ) {
+        ConstructedAttributes oldConstructedAttributes = constructedAttributes;
+        constructedAttributes = null;
+        boolean oldConstructedAttributesESet = constructedAttributesESet;
+        constructedAttributesESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__CONSTRUCTED_ATTRIBUTES, oldConstructedAttributes, null,
+                    oldConstructedAttributesESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetConstructedAttributes() {
+        if( constructedAttributes != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) constructedAttributes ).eInverseRemove( this,
+                    NsdPackage.CONSTRUCTED_ATTRIBUTES__NS, ConstructedAttributes.class, msgs );
+            msgs = basicUnsetConstructedAttributes( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldConstructedAttributesESet = constructedAttributesESet;
+            constructedAttributesESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__CONSTRUCTED_ATTRIBUTES, null, null, oldConstructedAttributesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetConstructedAttributes() {
+        return constructedAttributesESet;
     }
 
     /**
@@ -803,9 +1408,11 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public NotificationChain basicSetCDCs( CDCs newCDCs, NotificationChain msgs ) {
         CDCs oldCDCs = cDCs;
         cDCs = newCDCs;
+        boolean oldCDCsESet = cDCsESet;
+        cDCsESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET, NsdPackage.NS__CD_CS,
-                    oldCDCs, newCDCs );
+                    oldCDCs, newCDCs, !oldCDCsESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -823,15 +1430,71 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public void setCDCs( CDCs newCDCs ) {
         if( newCDCs != cDCs ) {
             NotificationChain msgs = null;
-            if( cDCs != null ) msgs = ( ( InternalEObject ) cDCs ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__CD_CS, null, msgs );
-            if( newCDCs != null ) msgs = ( ( InternalEObject ) newCDCs ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__CD_CS, null, msgs );
+            if( cDCs != null )
+                msgs = ( ( InternalEObject ) cDCs ).eInverseRemove( this, NsdPackage.CD_CS__NS, CDCs.class, msgs );
+            if( newCDCs != null )
+                msgs = ( ( InternalEObject ) newCDCs ).eInverseAdd( this, NsdPackage.CD_CS__NS, CDCs.class, msgs );
             msgs = basicSetCDCs( newCDCs, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__CD_CS, newCDCs, newCDCs ) );
+        else {
+            boolean oldCDCsESet = cDCsESet;
+            cDCsESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__CD_CS,
+                    newCDCs, newCDCs, !oldCDCsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetCDCs( NotificationChain msgs ) {
+        CDCs oldCDCs = cDCs;
+        cDCs = null;
+        boolean oldCDCsESet = cDCsESet;
+        cDCsESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET, NsdPackage.NS__CD_CS,
+                    oldCDCs, null, oldCDCsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetCDCs() {
+        if( cDCs != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) cDCs ).eInverseRemove( this, NsdPackage.CD_CS__NS, CDCs.class, msgs );
+            msgs = basicUnsetCDCs( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldCDCsESet = cDCsESet;
+            cDCsESet = false;
+            if( eNotificationRequired() ) eNotify(
+                    new ENotificationImpl( this, Notification.UNSET, NsdPackage.NS__CD_CS, null, null, oldCDCsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetCDCs() {
+        return cDCsESet;
     }
 
     /**
@@ -852,9 +1515,11 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public NotificationChain basicSetLNClasses( LNClasses newLNClasses, NotificationChain msgs ) {
         LNClasses oldLNClasses = lNClasses;
         lNClasses = newLNClasses;
+        boolean oldLNClassesESet = lNClassesESet;
+        lNClassesESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET, NsdPackage.NS__LN_CLASSES,
-                    oldLNClasses, newLNClasses );
+                    oldLNClasses, newLNClasses, !oldLNClassesESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -873,14 +1538,71 @@ public class NSImpl extends CopyrightedImpl implements NS {
         if( newLNClasses != lNClasses ) {
             NotificationChain msgs = null;
             if( lNClasses != null ) msgs = ( ( InternalEObject ) lNClasses ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__LN_CLASSES, null, msgs );
+                    NsdPackage.LN_CLASSES__NS, LNClasses.class, msgs );
             if( newLNClasses != null ) msgs = ( ( InternalEObject ) newLNClasses ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__LN_CLASSES, null, msgs );
+                    NsdPackage.LN_CLASSES__NS, LNClasses.class, msgs );
             msgs = basicSetLNClasses( newLNClasses, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.NS__LN_CLASSES, newLNClasses, newLNClasses ) );
+        else {
+            boolean oldLNClassesESet = lNClassesESet;
+            lNClassesESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.NS__LN_CLASSES, newLNClasses, newLNClasses, !oldLNClassesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetLNClasses( NotificationChain msgs ) {
+        LNClasses oldLNClasses = lNClasses;
+        lNClasses = null;
+        boolean oldLNClassesESet = lNClassesESet;
+        lNClassesESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET, NsdPackage.NS__LN_CLASSES,
+                    oldLNClasses, null, oldLNClassesESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetLNClasses() {
+        if( lNClasses != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) lNClasses ).eInverseRemove( this, NsdPackage.LN_CLASSES__NS, LNClasses.class,
+                    msgs );
+            msgs = basicUnsetLNClasses( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldLNClassesESet = lNClassesESet;
+            lNClassesESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.NS__LN_CLASSES, null, null, oldLNClassesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetLNClasses() {
+        return lNClassesESet;
     }
 
     /**
@@ -902,8 +1624,35 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public void setDescID( String newDescID ) {
         String oldDescID = descID;
         descID = newDescID;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__DESC_ID, oldDescID, descID ) );
+        boolean oldDescIDESet = descIDESet;
+        descIDESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__DESC_ID,
+                oldDescID, descID, !oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDescID() {
+        String oldDescID = descID;
+        boolean oldDescIDESet = descIDESet;
+        descID = DESC_ID_EDEFAULT;
+        descIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.NS__DESC_ID,
+                oldDescID, DESC_ID_EDEFAULT, oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDescID() {
+        return descIDESet;
     }
 
     /**
@@ -925,8 +1674,35 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public void setId( String newId ) {
         String oldId = id;
         id = newId;
+        boolean oldIdESet = idESet;
+        idESet = true;
         if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__ID, oldId, id ) );
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__ID, oldId, id, !oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetId() {
+        String oldId = id;
+        boolean oldIdESet = idESet;
+        id = ID_EDEFAULT;
+        idESet = false;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.UNSET, NsdPackage.NS__ID, oldId, ID_EDEFAULT, oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetId() {
+        return idESet;
     }
 
     /**
@@ -1099,8 +1875,35 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public void setUmlDate( XMLGregorianCalendar newUmlDate ) {
         XMLGregorianCalendar oldUmlDate = umlDate;
         umlDate = newUmlDate;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__UML_DATE, oldUmlDate, umlDate ) );
+        boolean oldUmlDateESet = umlDateESet;
+        umlDateESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.NS__UML_DATE,
+                oldUmlDate, umlDate, !oldUmlDateESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetUmlDate() {
+        XMLGregorianCalendar oldUmlDate = umlDate;
+        boolean oldUmlDateESet = umlDateESet;
+        umlDate = UML_DATE_EDEFAULT;
+        umlDateESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.NS__UML_DATE,
+                oldUmlDate, UML_DATE_EDEFAULT, oldUmlDateESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetUmlDate() {
+        return umlDateESet;
     }
 
     /**
@@ -1122,8 +1925,87 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public void setUmlVersion( String newUmlVersion ) {
         String oldUmlVersion = umlVersion;
         umlVersion = newUmlVersion;
+        boolean oldUmlVersionESet = umlVersionESet;
+        umlVersionESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.NS__UML_VERSION, oldUmlVersion, umlVersion ) );
+                NsdPackage.NS__UML_VERSION, oldUmlVersion, umlVersion, !oldUmlVersionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetUmlVersion() {
+        String oldUmlVersion = umlVersion;
+        boolean oldUmlVersionESet = umlVersionESet;
+        umlVersion = UML_VERSION_EDEFAULT;
+        umlVersionESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.NS__UML_VERSION, oldUmlVersion, UML_VERSION_EDEFAULT, oldUmlVersionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetUmlVersion() {
+        return umlVersionESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.NS__CHANGES:
+            if( changes != null ) msgs = ( ( InternalEObject ) changes ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__CHANGES, null, msgs );
+            return basicSetChanges( ( Changes ) otherEnd, msgs );
+        case NsdPackage.NS__DEPENDS_ON:
+            if( dependsOn != null ) msgs = ( ( InternalEObject ) dependsOn ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__DEPENDS_ON, null, msgs );
+            return basicSetDependsOn( ( DependsOn ) otherEnd, msgs );
+        case NsdPackage.NS__BASIC_TYPES:
+            if( basicTypes != null ) msgs = ( ( InternalEObject ) basicTypes ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__BASIC_TYPES, null, msgs );
+            return basicSetBasicTypes( ( BasicTypes ) otherEnd, msgs );
+        case NsdPackage.NS__FUNCTIONAL_CONSTRAINTS:
+            if( functionalConstraints != null ) msgs = ( ( InternalEObject ) functionalConstraints )
+                    .eInverseRemove( this, EOPPOSITE_FEATURE_BASE - NsdPackage.NS__FUNCTIONAL_CONSTRAINTS, null, msgs );
+            return basicSetFunctionalConstraints( ( FunctionalConstraints ) otherEnd, msgs );
+        case NsdPackage.NS__PRESENCE_CONDITIONS:
+            if( presenceConditions != null ) msgs = ( ( InternalEObject ) presenceConditions ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__PRESENCE_CONDITIONS, null, msgs );
+            return basicSetPresenceConditions( ( PresenceConditions ) otherEnd, msgs );
+        case NsdPackage.NS__ABBREVIATIONS:
+            if( abbreviations != null ) msgs = ( ( InternalEObject ) abbreviations ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__ABBREVIATIONS, null, msgs );
+            return basicSetAbbreviations( ( Abbreviations ) otherEnd, msgs );
+        case NsdPackage.NS__ENUMERATIONS:
+            if( enumerations != null ) msgs = ( ( InternalEObject ) enumerations ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__ENUMERATIONS, null, msgs );
+            return basicSetEnumerations( ( Enumerations ) otherEnd, msgs );
+        case NsdPackage.NS__CONSTRUCTED_ATTRIBUTES:
+            if( constructedAttributes != null ) msgs = ( ( InternalEObject ) constructedAttributes )
+                    .eInverseRemove( this, EOPPOSITE_FEATURE_BASE - NsdPackage.NS__CONSTRUCTED_ATTRIBUTES, null, msgs );
+            return basicSetConstructedAttributes( ( ConstructedAttributes ) otherEnd, msgs );
+        case NsdPackage.NS__CD_CS:
+            if( cDCs != null ) msgs = ( ( InternalEObject ) cDCs ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__CD_CS, null, msgs );
+            return basicSetCDCs( ( CDCs ) otherEnd, msgs );
+        case NsdPackage.NS__LN_CLASSES:
+            if( lNClasses != null ) msgs = ( ( InternalEObject ) lNClasses ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.NS__LN_CLASSES, null, msgs );
+            return basicSetLNClasses( ( LNClasses ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -1185,25 +2067,25 @@ public class NSImpl extends CopyrightedImpl implements NS {
     public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
         switch( featureID ) {
         case NsdPackage.NS__CHANGES:
-            return basicSetChanges( null, msgs );
+            return basicUnsetChanges( msgs );
         case NsdPackage.NS__DEPENDS_ON:
-            return basicSetDependsOn( null, msgs );
+            return basicUnsetDependsOn( msgs );
         case NsdPackage.NS__BASIC_TYPES:
-            return basicSetBasicTypes( null, msgs );
+            return basicUnsetBasicTypes( msgs );
         case NsdPackage.NS__FUNCTIONAL_CONSTRAINTS:
-            return basicSetFunctionalConstraints( null, msgs );
+            return basicUnsetFunctionalConstraints( msgs );
         case NsdPackage.NS__PRESENCE_CONDITIONS:
-            return basicSetPresenceConditions( null, msgs );
+            return basicUnsetPresenceConditions( msgs );
         case NsdPackage.NS__ABBREVIATIONS:
-            return basicSetAbbreviations( null, msgs );
+            return basicUnsetAbbreviations( msgs );
         case NsdPackage.NS__ENUMERATIONS:
-            return basicSetEnumerations( null, msgs );
+            return basicUnsetEnumerations( msgs );
         case NsdPackage.NS__CONSTRUCTED_ATTRIBUTES:
-            return basicSetConstructedAttributes( null, msgs );
+            return basicUnsetConstructedAttributes( msgs );
         case NsdPackage.NS__CD_CS:
-            return basicSetCDCs( null, msgs );
+            return basicUnsetCDCs( msgs );
         case NsdPackage.NS__LN_CLASSES:
-            return basicSetLNClasses( null, msgs );
+            return basicUnsetLNClasses( msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -1274,7 +2156,7 @@ public class NSImpl extends CopyrightedImpl implements NS {
             setChanges( ( Changes ) newValue );
             return;
         case NsdPackage.NS__DEPENDS_ON:
-            setDependsOn( ( DependsOnType ) newValue );
+            setDependsOn( ( DependsOn ) newValue );
             return;
         case NsdPackage.NS__BASIC_TYPES:
             setBasicTypes( ( BasicTypes ) newValue );
@@ -1337,40 +2219,40 @@ public class NSImpl extends CopyrightedImpl implements NS {
             unsetVersion();
             return;
         case NsdPackage.NS__CHANGES:
-            setChanges( ( Changes ) null );
+            unsetChanges();
             return;
         case NsdPackage.NS__DEPENDS_ON:
-            setDependsOn( ( DependsOnType ) null );
+            unsetDependsOn();
             return;
         case NsdPackage.NS__BASIC_TYPES:
-            setBasicTypes( ( BasicTypes ) null );
+            unsetBasicTypes();
             return;
         case NsdPackage.NS__FUNCTIONAL_CONSTRAINTS:
-            setFunctionalConstraints( ( FunctionalConstraints ) null );
+            unsetFunctionalConstraints();
             return;
         case NsdPackage.NS__PRESENCE_CONDITIONS:
-            setPresenceConditions( ( PresenceConditions ) null );
+            unsetPresenceConditions();
             return;
         case NsdPackage.NS__ABBREVIATIONS:
-            setAbbreviations( ( Abbreviations ) null );
+            unsetAbbreviations();
             return;
         case NsdPackage.NS__ENUMERATIONS:
-            setEnumerations( ( Enumerations ) null );
+            unsetEnumerations();
             return;
         case NsdPackage.NS__CONSTRUCTED_ATTRIBUTES:
-            setConstructedAttributes( ( ConstructedAttributes ) null );
+            unsetConstructedAttributes();
             return;
         case NsdPackage.NS__CD_CS:
-            setCDCs( ( CDCs ) null );
+            unsetCDCs();
             return;
         case NsdPackage.NS__LN_CLASSES:
-            setLNClasses( ( LNClasses ) null );
+            unsetLNClasses();
             return;
         case NsdPackage.NS__DESC_ID:
-            setDescID( DESC_ID_EDEFAULT );
+            unsetDescID();
             return;
         case NsdPackage.NS__ID:
-            setId( ID_EDEFAULT );
+            unsetId();
             return;
         case NsdPackage.NS__PUBLICATION_STAGE:
             unsetPublicationStage();
@@ -1379,10 +2261,10 @@ public class NSImpl extends CopyrightedImpl implements NS {
             unsetRevision();
             return;
         case NsdPackage.NS__UML_DATE:
-            setUmlDate( UML_DATE_EDEFAULT );
+            unsetUmlDate();
             return;
         case NsdPackage.NS__UML_VERSION:
-            setUmlVersion( UML_VERSION_EDEFAULT );
+            unsetUmlVersion();
             return;
         }
         super.eUnset( featureID );
@@ -1401,37 +2283,37 @@ public class NSImpl extends CopyrightedImpl implements NS {
         case NsdPackage.NS__VERSION:
             return isSetVersion();
         case NsdPackage.NS__CHANGES:
-            return changes != null;
+            return isSetChanges();
         case NsdPackage.NS__DEPENDS_ON:
-            return dependsOn != null;
+            return isSetDependsOn();
         case NsdPackage.NS__BASIC_TYPES:
-            return basicTypes != null;
+            return isSetBasicTypes();
         case NsdPackage.NS__FUNCTIONAL_CONSTRAINTS:
-            return functionalConstraints != null;
+            return isSetFunctionalConstraints();
         case NsdPackage.NS__PRESENCE_CONDITIONS:
-            return presenceConditions != null;
+            return isSetPresenceConditions();
         case NsdPackage.NS__ABBREVIATIONS:
-            return abbreviations != null;
+            return isSetAbbreviations();
         case NsdPackage.NS__ENUMERATIONS:
-            return enumerations != null;
+            return isSetEnumerations();
         case NsdPackage.NS__CONSTRUCTED_ATTRIBUTES:
-            return constructedAttributes != null;
+            return isSetConstructedAttributes();
         case NsdPackage.NS__CD_CS:
-            return cDCs != null;
+            return isSetCDCs();
         case NsdPackage.NS__LN_CLASSES:
-            return lNClasses != null;
+            return isSetLNClasses();
         case NsdPackage.NS__DESC_ID:
-            return DESC_ID_EDEFAULT == null ? descID != null : !DESC_ID_EDEFAULT.equals( descID );
+            return isSetDescID();
         case NsdPackage.NS__ID:
-            return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals( id );
+            return isSetId();
         case NsdPackage.NS__PUBLICATION_STAGE:
             return isSetPublicationStage();
         case NsdPackage.NS__REVISION:
             return isSetRevision();
         case NsdPackage.NS__UML_DATE:
-            return UML_DATE_EDEFAULT == null ? umlDate != null : !UML_DATE_EDEFAULT.equals( umlDate );
+            return isSetUmlDate();
         case NsdPackage.NS__UML_VERSION:
-            return UML_VERSION_EDEFAULT == null ? umlVersion != null : !UML_VERSION_EDEFAULT.equals( umlVersion );
+            return isSetUmlVersion();
         }
         return super.eIsSet( featureID );
     }
@@ -1497,9 +2379,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
         else
             result.append( "<unset>" );
         result.append( ", descID: " );
-        result.append( descID );
+        if( descIDESet )
+            result.append( descID );
+        else
+            result.append( "<unset>" );
         result.append( ", id: " );
-        result.append( id );
+        if( idESet )
+            result.append( id );
+        else
+            result.append( "<unset>" );
         result.append( ", publicationStage: " );
         if( publicationStageESet )
             result.append( publicationStage );
@@ -1511,9 +2399,15 @@ public class NSImpl extends CopyrightedImpl implements NS {
         else
             result.append( "<unset>" );
         result.append( ", umlDate: " );
-        result.append( umlDate );
+        if( umlDateESet )
+            result.append( umlDate );
+        else
+            result.append( "<unset>" );
         result.append( ", umlVersion: " );
-        result.append( umlVersion );
+        if( umlVersionESet )
+            result.append( umlVersion );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NoticeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NoticeImpl.java
index 5b0f107..c484594 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NoticeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NoticeImpl.java
@@ -19,17 +19,21 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CopyrightNotice;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Notice;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
+import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 
 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.BasicFeatureMap;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.FeatureMap;
 import org.eclipse.emf.ecore.util.InternalEList;
 
@@ -42,6 +46,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NoticeImpl#getMixed <em>Mixed</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NoticeImpl#getCopyrightNotice <em>Copyright Notice</em>}</li>
  * </ul>
  *
  * @generated
@@ -89,6 +94,64 @@ public class NoticeImpl extends MinimalEObjectImpl.Container implements Notice {
         return mixed;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public CopyrightNotice getCopyrightNotice() {
+        if( eContainerFeatureID() != NsdPackage.NOTICE__COPYRIGHT_NOTICE ) return null;
+        return ( CopyrightNotice ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetCopyrightNotice( CopyrightNotice newCopyrightNotice, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newCopyrightNotice, NsdPackage.NOTICE__COPYRIGHT_NOTICE, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setCopyrightNotice( CopyrightNotice newCopyrightNotice ) {
+        if( newCopyrightNotice != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.NOTICE__COPYRIGHT_NOTICE && newCopyrightNotice != null ) ) {
+            if( EcoreUtil.isAncestor( this, newCopyrightNotice ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newCopyrightNotice != null ) msgs = ( ( InternalEObject ) newCopyrightNotice ).eInverseAdd( this,
+                    NsdPackage.COPYRIGHT_NOTICE__NOTICE, CopyrightNotice.class, msgs );
+            msgs = basicSetCopyrightNotice( newCopyrightNotice, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.NOTICE__COPYRIGHT_NOTICE, newCopyrightNotice, newCopyrightNotice ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.NOTICE__COPYRIGHT_NOTICE:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetCopyrightNotice( ( CopyrightNotice ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -99,10 +162,27 @@ public class NoticeImpl extends MinimalEObjectImpl.Container implements Notice {
         switch( featureID ) {
         case NsdPackage.NOTICE__MIXED:
             return ( ( InternalEList< ? > ) getMixed() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.NOTICE__COPYRIGHT_NOTICE:
+            return basicSetCopyrightNotice( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.NOTICE__COPYRIGHT_NOTICE:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.COPYRIGHT_NOTICE__NOTICE,
+                    CopyrightNotice.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -114,6 +194,8 @@ public class NoticeImpl extends MinimalEObjectImpl.Container implements Notice {
         case NsdPackage.NOTICE__MIXED:
             if( coreType ) return getMixed();
             return ( ( FeatureMap.Internal ) getMixed() ).getWrapper();
+        case NsdPackage.NOTICE__COPYRIGHT_NOTICE:
+            return getCopyrightNotice();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -129,6 +211,9 @@ public class NoticeImpl extends MinimalEObjectImpl.Container implements Notice {
         case NsdPackage.NOTICE__MIXED:
             ( ( FeatureMap.Internal ) getMixed() ).set( newValue );
             return;
+        case NsdPackage.NOTICE__COPYRIGHT_NOTICE:
+            setCopyrightNotice( ( CopyrightNotice ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -144,6 +229,9 @@ public class NoticeImpl extends MinimalEObjectImpl.Container implements Notice {
         case NsdPackage.NOTICE__MIXED:
             getMixed().clear();
             return;
+        case NsdPackage.NOTICE__COPYRIGHT_NOTICE:
+            setCopyrightNotice( ( CopyrightNotice ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -158,6 +246,8 @@ public class NoticeImpl extends MinimalEObjectImpl.Container implements Notice {
         switch( featureID ) {
         case NsdPackage.NOTICE__MIXED:
             return mixed != null && !mixed.isEmpty();
+        case NsdPackage.NOTICE__COPYRIGHT_NOTICE:
+            return getCopyrightNotice() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdFactoryImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdFactoryImpl.java
index d46713b..e85a0d7 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdFactoryImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdFactoryImpl.java
@@ -80,8 +80,8 @@ public class NsdFactoryImpl extends EFactoryImpl implements NsdFactory {
         switch( eClass.getClassifierID() ) {
         case NsdPackage.APPLIES_TO_TYPE:
             return createAppliesToType();
-        case NsdPackage.DEPENDS_ON_TYPE:
-            return createDependsOnType();
+        case NsdPackage.DEPENDS_ON:
+            return createDependsOn();
         case NsdPackage.DOCUMENT_ROOT:
             return createDocumentRoot();
         case NsdPackage.SERVICE_TYPE:
@@ -166,8 +166,6 @@ public class NsdFactoryImpl extends EFactoryImpl implements NsdFactory {
             return createServiceNsUsage();
         case NsdPackage.SERVICE_PARAMETER:
             return createServiceParameter();
-        case NsdPackage.SERVICE_TYPE_REALIZATION:
-            return createServiceTypeRealization();
         case NsdPackage.SERVICE_TYPE_REALIZATIONS:
             return createServiceTypeRealizations();
         case NsdPackage.SUB_DATA_ATTRIBUTE:
@@ -278,9 +276,9 @@ public class NsdFactoryImpl extends EFactoryImpl implements NsdFactory {
      * @generated
      */
     @Override
-    public DependsOnType createDependsOnType() {
-        DependsOnTypeImpl dependsOnType = new DependsOnTypeImpl();
-        return dependsOnType;
+    public DependsOn createDependsOn() {
+        DependsOnImpl dependsOn = new DependsOnImpl();
+        return dependsOn;
     }
 
     /**
@@ -745,17 +743,6 @@ public class NsdFactoryImpl extends EFactoryImpl implements NsdFactory {
         return serviceParameter;
     }
 
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public ServiceTypeRealization createServiceTypeRealization() {
-        ServiceTypeRealizationImpl serviceTypeRealization = new ServiceTypeRealizationImpl();
-        return serviceTypeRealization;
-    }
-
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdPackageImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdPackageImpl.java
index 5656b9f..4655503 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdPackageImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdPackageImpl.java
@@ -40,7 +40,7 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentRoot;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DocumentedClass;
@@ -70,7 +70,6 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNsUsage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject;
@@ -112,7 +111,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * <!-- end-user-doc -->
      * @generated
      */
-    private EClass dependsOnTypeEClass = null;
+    private EClass dependsOnEClass = null;
 
     /**
      * <!-- begin-user-doc -->
@@ -415,13 +414,6 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      */
     private EClass serviceParameterEClass = null;
 
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    private EClass serviceTypeRealizationEClass = null;
-
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -668,8 +660,18 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EClass getDependsOnType() {
-        return dependsOnTypeEClass;
+    public EReference getAppliesToType_ServiceNsUsage() {
+        return ( EReference ) appliesToTypeEClass.getEStructuralFeatures().get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EClass getDependsOn() {
+        return dependsOnEClass;
     }
 
     /**
@@ -678,8 +680,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EAttribute getDependsOnType_Id() {
-        return ( EAttribute ) dependsOnTypeEClass.getEStructuralFeatures().get( 0 );
+    public EAttribute getDependsOn_Id() {
+        return ( EAttribute ) dependsOnEClass.getEStructuralFeatures().get( 0 );
     }
 
     /**
@@ -688,8 +690,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EAttribute getDependsOnType_PublicationStage() {
-        return ( EAttribute ) dependsOnTypeEClass.getEStructuralFeatures().get( 1 );
+    public EAttribute getDependsOn_PublicationStage() {
+        return ( EAttribute ) dependsOnEClass.getEStructuralFeatures().get( 1 );
     }
 
     /**
@@ -698,8 +700,18 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EAttribute getDependsOnType_Revision() {
-        return ( EAttribute ) dependsOnTypeEClass.getEStructuralFeatures().get( 2 );
+    public EAttribute getDependsOn_Revision() {
+        return ( EAttribute ) dependsOnEClass.getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDependsOn_NS() {
+        return ( EReference ) dependsOnEClass.getEStructuralFeatures().get( 3 );
     }
 
     /**
@@ -758,7 +770,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EReference getDocumentRoot_Copyright() {
+    public EReference getDocumentRoot_NS() {
         return ( EReference ) documentRootEClass.getEStructuralFeatures().get( 4 );
     }
 
@@ -768,7 +780,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EReference getDocumentRoot_NS() {
+    public EReference getDocumentRoot_NSDoc() {
         return ( EReference ) documentRootEClass.getEStructuralFeatures().get( 5 );
     }
 
@@ -778,7 +790,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EReference getDocumentRoot_NSDoc() {
+    public EReference getDocumentRoot_ServiceNS() {
         return ( EReference ) documentRootEClass.getEStructuralFeatures().get( 6 );
     }
 
@@ -788,8 +800,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EReference getDocumentRoot_ServiceNS() {
-        return ( EReference ) documentRootEClass.getEStructuralFeatures().get( 7 );
+    public EClass getServiceType() {
+        return serviceTypeEClass;
     }
 
     /**
@@ -798,8 +810,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EClass getServiceType() {
-        return serviceTypeEClass;
+    public EAttribute getServiceType_Name() {
+        return ( EAttribute ) serviceTypeEClass.getEStructuralFeatures().get( 0 );
     }
 
     /**
@@ -808,8 +820,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EAttribute getServiceType_Name() {
-        return ( EAttribute ) serviceTypeEClass.getEStructuralFeatures().get( 0 );
+    public EReference getServiceType_ApplicableServices() {
+        return ( EReference ) serviceTypeEClass.getEStructuralFeatures().get( 1 );
     }
 
     /**
@@ -842,6 +854,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) abbreviationEClass.getEStructuralFeatures().get( 1 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getAbbreviation_Abbreviations() {
+        return ( EReference ) abbreviationEClass.getEStructuralFeatures().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -862,6 +884,26 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) abbreviationsEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getAbbreviations_NS() {
+        return ( EReference ) abbreviationsEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getAbbreviations_ServiceNS() {
+        return ( EReference ) abbreviationsEClass.getEStructuralFeatures().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -882,6 +924,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) abstractLNClassEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getAbstractLNClass_LNClasses() {
+        return ( EReference ) abstractLNClassEClass.getEStructuralFeatures().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -982,6 +1034,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) applicableServicesEClass.getEStructuralFeatures().get( 1 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getApplicableServices_FunctionalConstraint() {
+        return ( EReference ) applicableServicesEClass.getEStructuralFeatures().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1012,6 +1074,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) basicTypeEClass.getEStructuralFeatures().get( 1 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getBasicType_BasicTypes() {
+        return ( EReference ) basicTypeEClass.getEStructuralFeatures().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1032,6 +1104,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) basicTypesEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getBasicTypes_NS() {
+        return ( EReference ) basicTypesEClass.getEStructuralFeatures().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1122,6 +1204,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) cdcEClass.getEStructuralFeatures().get( 7 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getCDC_CDCs() {
+        return ( EReference ) cdcEClass.getEStructuralFeatures().get( 8 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1142,6 +1234,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) cdCsEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getCDCs_NS() {
+        return ( EReference ) cdCsEClass.getEStructuralFeatures().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1192,6 +1294,26 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) changesEClass.getEStructuralFeatures().get( 3 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getChanges_NS() {
+        return ( EReference ) changesEClass.getEStructuralFeatures().get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getChanges_ServiceNS() {
+        return ( EReference ) changesEClass.getEStructuralFeatures().get( 5 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1222,6 +1344,26 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) constructedAttributeEClass.getEStructuralFeatures().get( 1 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getConstructedAttribute_ConstructedAttributes() {
+        return ( EReference ) constructedAttributeEClass.getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getConstructedAttribute_ServiceTypeRealizations() {
+        return ( EReference ) constructedAttributeEClass.getEStructuralFeatures().get( 3 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1242,6 +1384,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) constructedAttributesEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getConstructedAttributes_NS() {
+        return ( EReference ) constructedAttributesEClass.getEStructuralFeatures().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1292,6 +1444,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) copyrightNoticeEClass.getEStructuralFeatures().get( 1 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getCopyrightNotice_Copyrighted() {
+        return ( EReference ) copyrightNoticeEClass.getEStructuralFeatures().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1472,6 +1634,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) dataAttributeEClass.getEStructuralFeatures().get( 16 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataAttribute_CDC() {
+        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 17 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1592,6 +1764,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) dataObjectEClass.getEStructuralFeatures().get( 10 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataObject_AnyLNClass() {
+        return ( EReference ) dataObjectEClass.getEStructuralFeatures().get( 11 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1612,6 +1794,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) dataSetMemberOfEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataSetMemberOf_ApplicableServices() {
+        return ( EReference ) dataSetMemberOfEClass.getEStructuralFeatures().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1662,6 +1854,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) docEClass.getEStructuralFeatures().get( 3 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDoc_NSDoc() {
+        return ( EReference ) docEClass.getEStructuralFeatures().get( 4 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1742,6 +1944,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) enumerationEClass.getEStructuralFeatures().get( 2 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getEnumeration_Enumerations() {
+        return ( EReference ) enumerationEClass.getEStructuralFeatures().get( 3 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1762,6 +1974,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) enumerationsEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getEnumerations_NS() {
+        return ( EReference ) enumerationsEClass.getEStructuralFeatures().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1812,6 +2034,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) functionalConstraintEClass.getEStructuralFeatures().get( 3 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getFunctionalConstraint_FunctionalConstraints() {
+        return ( EReference ) functionalConstraintEClass.getEStructuralFeatures().get( 4 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1832,6 +2064,26 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) functionalConstraintsEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getFunctionalConstraints_NS() {
+        return ( EReference ) functionalConstraintsEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getFunctionalConstraints_ServiceNS() {
+        return ( EReference ) functionalConstraintsEClass.getEStructuralFeatures().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1872,6 +2124,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) licenseEClass.getEStructuralFeatures().get( 2 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getLicense_CopyrightNotice() {
+        return ( EReference ) licenseEClass.getEStructuralFeatures().get( 3 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1902,6 +2164,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) literalEClass.getEStructuralFeatures().get( 1 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getLiteral_Enumeration() {
+        return ( EReference ) literalEClass.getEStructuralFeatures().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1942,6 +2214,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) lnClassEClass.getEStructuralFeatures().get( 2 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getLNClass_LNClasses() {
+        return ( EReference ) lnClassEClass.getEStructuralFeatures().get( 3 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1972,6 +2254,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) lnClassesEClass.getEStructuralFeatures().get( 1 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getLNClasses_NS() {
+        return ( EReference ) lnClassesEClass.getEStructuralFeatures().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1992,6 +2284,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) noticeEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getNotice_CopyrightNotice() {
+        return ( EReference ) noticeEClass.getEStructuralFeatures().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2292,6 +2594,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) presenceConditionEClass.getEStructuralFeatures().get( 3 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getPresenceCondition_PresenceConditions() {
+        return ( EReference ) presenceConditionEClass.getEStructuralFeatures().get( 4 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2312,6 +2624,26 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) presenceConditionsEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getPresenceConditions_NS() {
+        return ( EReference ) presenceConditionsEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getPresenceConditions_ServiceNS() {
+        return ( EReference ) presenceConditionsEClass.getEStructuralFeatures().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2338,8 +2670,28 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EAttribute getServiceCDC_Cdc() {
-        return ( EAttribute ) serviceCDCEClass.getEStructuralFeatures().get( 1 );
+    public EAttribute getServiceCDC_Cdc() {
+        return ( EAttribute ) serviceCDCEClass.getEStructuralFeatures().get( 1 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EAttribute getServiceCDC_Variant() {
+        return ( EAttribute ) serviceCDCEClass.getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getServiceCDC_ServiceCDCs() {
+        return ( EReference ) serviceCDCEClass.getEStructuralFeatures().get( 3 );
     }
 
     /**
@@ -2348,8 +2700,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EAttribute getServiceCDC_Variant() {
-        return ( EAttribute ) serviceCDCEClass.getEStructuralFeatures().get( 2 );
+    public EClass getServiceCDCs() {
+        return serviceCDCsEClass;
     }
 
     /**
@@ -2358,8 +2710,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EClass getServiceCDCs() {
-        return serviceCDCsEClass;
+    public EReference getServiceCDCs_ServiceCDC() {
+        return ( EReference ) serviceCDCsEClass.getEStructuralFeatures().get( 0 );
     }
 
     /**
@@ -2368,8 +2720,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EReference getServiceCDCs_ServiceCDC() {
-        return ( EReference ) serviceCDCsEClass.getEStructuralFeatures().get( 0 );
+    public EReference getServiceCDCs_ServiceNS() {
+        return ( EReference ) serviceCDCsEClass.getEStructuralFeatures().get( 1 );
     }
 
     /**
@@ -2392,6 +2744,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) serviceConstructedAttributeEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getServiceConstructedAttribute_ServiceConstructedAttribute() {
+        return ( EReference ) serviceConstructedAttributeEClass.getEStructuralFeatures().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2412,6 +2774,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) serviceConstructedAttributesEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getServiceConstructedAttributes_ServiceNS() {
+        return ( EReference ) serviceConstructedAttributesEClass.getEStructuralFeatures().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2512,6 +2884,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) serviceDataAttributeEClass.getEStructuralFeatures().get( 8 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getServiceDataAttribute_ServiceCDC() {
+        return ( EReference ) serviceDataAttributeEClass.getEStructuralFeatures().get( 9 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2702,6 +3084,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) serviceNsUsageEClass.getEStructuralFeatures().get( 3 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getServiceNsUsage_ApplicableServiceNS() {
+        return ( EReference ) serviceNsUsageEClass.getEStructuralFeatures().get( 4 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2778,68 +3170,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EClass getServiceTypeRealization() {
-        return serviceTypeRealizationEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EAttribute getServiceTypeRealization_Fc() {
-        return ( EAttribute ) serviceTypeRealizationEClass.getEStructuralFeatures().get( 0 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EAttribute getServiceTypeRealization_Name() {
-        return ( EAttribute ) serviceTypeRealizationEClass.getEStructuralFeatures().get( 1 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EAttribute getServiceTypeRealization_PresCond() {
-        return ( EAttribute ) serviceTypeRealizationEClass.getEStructuralFeatures().get( 2 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EAttribute getServiceTypeRealization_PresCondArgs() {
-        return ( EAttribute ) serviceTypeRealizationEClass.getEStructuralFeatures().get( 3 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EAttribute getServiceTypeRealization_PresCondArgsID() {
-        return ( EAttribute ) serviceTypeRealizationEClass.getEStructuralFeatures().get( 4 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EAttribute getServiceTypeRealization_Type() {
-        return ( EAttribute ) serviceTypeRealizationEClass.getEStructuralFeatures().get( 5 );
+    public EReference getServiceParameter_CDC() {
+        return ( EReference ) serviceParameterEClass.getEStructuralFeatures().get( 6 );
     }
 
     /**
@@ -2848,8 +3180,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EAttribute getServiceTypeRealization_TypeKind() {
-        return ( EAttribute ) serviceTypeRealizationEClass.getEStructuralFeatures().get( 6 );
+    public EClass getServiceTypeRealizations() {
+        return serviceTypeRealizationsEClass;
     }
 
     /**
@@ -2858,8 +3190,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EClass getServiceTypeRealizations() {
-        return serviceTypeRealizationsEClass;
+    public EReference getServiceTypeRealizations_ServiceTypeRealization() {
+        return ( EReference ) serviceTypeRealizationsEClass.getEStructuralFeatures().get( 0 );
     }
 
     /**
@@ -2868,8 +3200,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EReference getServiceTypeRealizations_ServiceTypeRealization() {
-        return ( EReference ) serviceTypeRealizationsEClass.getEStructuralFeatures().get( 0 );
+    public EReference getServiceTypeRealizations_ServiceNS() {
+        return ( EReference ) serviceTypeRealizationsEClass.getEStructuralFeatures().get( 1 );
     }
 
     /**
@@ -3012,6 +3344,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) subDataAttributeEClass.getEStructuralFeatures().get( 12 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getSubDataAttribute_ConstructedAttribute() {
+        return ( EReference ) subDataAttributeEClass.getEStructuralFeatures().get( 13 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -3132,6 +3474,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) subDataObjectEClass.getEStructuralFeatures().get( 10 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getSubDataObject_CDC() {
+        return ( EReference ) subDataObjectEClass.getEStructuralFeatures().get( 11 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -3345,34 +3697,40 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( appliesToTypeEClass, APPLIES_TO_TYPE__ID );
         createEAttribute( appliesToTypeEClass, APPLIES_TO_TYPE__PUBLICATION_STAGE );
         createEAttribute( appliesToTypeEClass, APPLIES_TO_TYPE__REVISION );
+        createEReference( appliesToTypeEClass, APPLIES_TO_TYPE__SERVICE_NS_USAGE );
 
-        dependsOnTypeEClass = createEClass( DEPENDS_ON_TYPE );
-        createEAttribute( dependsOnTypeEClass, DEPENDS_ON_TYPE__ID );
-        createEAttribute( dependsOnTypeEClass, DEPENDS_ON_TYPE__PUBLICATION_STAGE );
-        createEAttribute( dependsOnTypeEClass, DEPENDS_ON_TYPE__REVISION );
+        dependsOnEClass = createEClass( DEPENDS_ON );
+        createEAttribute( dependsOnEClass, DEPENDS_ON__ID );
+        createEAttribute( dependsOnEClass, DEPENDS_ON__PUBLICATION_STAGE );
+        createEAttribute( dependsOnEClass, DEPENDS_ON__REVISION );
+        createEReference( dependsOnEClass, DEPENDS_ON__NS );
 
         documentRootEClass = createEClass( DOCUMENT_ROOT );
         createEAttribute( documentRootEClass, DOCUMENT_ROOT__MIXED );
         createEReference( documentRootEClass, DOCUMENT_ROOT__XMLNS_PREFIX_MAP );
         createEReference( documentRootEClass, DOCUMENT_ROOT__XSI_SCHEMA_LOCATION );
         createEReference( documentRootEClass, DOCUMENT_ROOT__APPLICABLE_SERVICE_NS );
-        createEReference( documentRootEClass, DOCUMENT_ROOT__COPYRIGHT );
         createEReference( documentRootEClass, DOCUMENT_ROOT__NS );
         createEReference( documentRootEClass, DOCUMENT_ROOT__NS_DOC );
         createEReference( documentRootEClass, DOCUMENT_ROOT__SERVICE_NS );
 
         serviceTypeEClass = createEClass( SERVICE_TYPE );
         createEAttribute( serviceTypeEClass, SERVICE_TYPE__NAME );
+        createEReference( serviceTypeEClass, SERVICE_TYPE__APPLICABLE_SERVICES );
 
         abbreviationEClass = createEClass( ABBREVIATION );
         createEAttribute( abbreviationEClass, ABBREVIATION__DESC_ID );
         createEAttribute( abbreviationEClass, ABBREVIATION__NAME );
+        createEReference( abbreviationEClass, ABBREVIATION__ABBREVIATIONS );
 
         abbreviationsEClass = createEClass( ABBREVIATIONS );
         createEReference( abbreviationsEClass, ABBREVIATIONS__ABBREVIATION );
+        createEReference( abbreviationsEClass, ABBREVIATIONS__NS );
+        createEReference( abbreviationsEClass, ABBREVIATIONS__SERVICE_NS );
 
         abstractLNClassEClass = createEClass( ABSTRACT_LN_CLASS );
         createEAttribute( abstractLNClassEClass, ABSTRACT_LN_CLASS__NAME );
+        createEReference( abstractLNClassEClass, ABSTRACT_LN_CLASS__LN_CLASSES );
 
         anyLNClassEClass = createEClass( ANY_LN_CLASS );
         createEReference( anyLNClassEClass, ANY_LN_CLASS__DATA_OBJECT );
@@ -3386,13 +3744,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         applicableServicesEClass = createEClass( APPLICABLE_SERVICES );
         createEReference( applicableServicesEClass, APPLICABLE_SERVICES__SERVICE );
         createEReference( applicableServicesEClass, APPLICABLE_SERVICES__DATA_SET_MEMBER_OF );
+        createEReference( applicableServicesEClass, APPLICABLE_SERVICES__FUNCTIONAL_CONSTRAINT );
 
         basicTypeEClass = createEClass( BASIC_TYPE );
         createEAttribute( basicTypeEClass, BASIC_TYPE__DESC_ID );
         createEAttribute( basicTypeEClass, BASIC_TYPE__NAME );
+        createEReference( basicTypeEClass, BASIC_TYPE__BASIC_TYPES );
 
         basicTypesEClass = createEClass( BASIC_TYPES );
         createEReference( basicTypesEClass, BASIC_TYPES__BASIC_TYPE );
+        createEReference( basicTypesEClass, BASIC_TYPES__NS );
 
         cdcEClass = createEClass( CDC );
         createEReference( cdcEClass, CDC__SUB_DATA_OBJECT );
@@ -3403,22 +3764,29 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( cdcEClass, CDC__STATISTICS );
         createEAttribute( cdcEClass, CDC__TYPE_KIND_PARAMETERIZED );
         createEAttribute( cdcEClass, CDC__VARIANT );
+        createEReference( cdcEClass, CDC__CD_CS );
 
         cdCsEClass = createEClass( CD_CS );
         createEReference( cdCsEClass, CD_CS__CDC );
+        createEReference( cdCsEClass, CD_CS__NS );
 
         changesEClass = createEClass( CHANGES );
         createEAttribute( changesEClass, CHANGES__CHANGES_ID );
         createEAttribute( changesEClass, CHANGES__DATE );
         createEAttribute( changesEClass, CHANGES__REVISION );
         createEAttribute( changesEClass, CHANGES__TISSUES );
+        createEReference( changesEClass, CHANGES__NS );
+        createEReference( changesEClass, CHANGES__SERVICE_NS );
 
         constructedAttributeEClass = createEClass( CONSTRUCTED_ATTRIBUTE );
         createEReference( constructedAttributeEClass, CONSTRUCTED_ATTRIBUTE__SUB_DATA_ATTRIBUTE );
         createEAttribute( constructedAttributeEClass, CONSTRUCTED_ATTRIBUTE__NAME );
+        createEReference( constructedAttributeEClass, CONSTRUCTED_ATTRIBUTE__CONSTRUCTED_ATTRIBUTES );
+        createEReference( constructedAttributeEClass, CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS );
 
         constructedAttributesEClass = createEClass( CONSTRUCTED_ATTRIBUTES );
         createEReference( constructedAttributesEClass, CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE );
+        createEReference( constructedAttributesEClass, CONSTRUCTED_ATTRIBUTES__NS );
 
         copyrightedEClass = createEClass( COPYRIGHTED );
         createEReference( copyrightedEClass, COPYRIGHTED__COPYRIGHT );
@@ -3426,6 +3794,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         copyrightNoticeEClass = createEClass( COPYRIGHT_NOTICE );
         createEReference( copyrightNoticeEClass, COPYRIGHT_NOTICE__NOTICE );
         createEReference( copyrightNoticeEClass, COPYRIGHT_NOTICE__LICENSE );
+        createEReference( copyrightNoticeEClass, COPYRIGHT_NOTICE__COPYRIGHTED );
 
         dataAttributeEClass = createEClass( DATA_ATTRIBUTE );
         createEAttribute( dataAttributeEClass, DATA_ATTRIBUTE__DCHG );
@@ -3445,6 +3814,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( dataAttributeEClass, DATA_ATTRIBUTE__SIZE_ATTRIBUTE );
         createEAttribute( dataAttributeEClass, DATA_ATTRIBUTE__TYPE );
         createEAttribute( dataAttributeEClass, DATA_ATTRIBUTE__TYPE_KIND );
+        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__CDC );
 
         dataObjectEClass = createEClass( DATA_OBJECT );
         createEAttribute( dataObjectEClass, DATA_OBJECT__DS_PRES_COND );
@@ -3458,15 +3828,18 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( dataObjectEClass, DATA_OBJECT__TYPE );
         createEAttribute( dataObjectEClass, DATA_OBJECT__UNDERLYING_TYPE );
         createEAttribute( dataObjectEClass, DATA_OBJECT__UNDERLYING_TYPE_KIND );
+        createEReference( dataObjectEClass, DATA_OBJECT__ANY_LN_CLASS );
 
         dataSetMemberOfEClass = createEClass( DATA_SET_MEMBER_OF );
         createEAttribute( dataSetMemberOfEClass, DATA_SET_MEMBER_OF__CB );
+        createEReference( dataSetMemberOfEClass, DATA_SET_MEMBER_OF__APPLICABLE_SERVICES );
 
         docEClass = createEClass( DOC );
         createEAttribute( docEClass, DOC__MIXED );
         createEAttribute( docEClass, DOC__GROUP );
         createEAttribute( docEClass, DOC__ANY );
         createEAttribute( docEClass, DOC__ID );
+        createEReference( docEClass, DOC__NS_DOC );
 
         documentedClassEClass = createEClass( DOCUMENTED_CLASS );
         createEAttribute( documentedClassEClass, DOCUMENTED_CLASS__DEPRECATED );
@@ -3477,39 +3850,49 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEReference( enumerationEClass, ENUMERATION__LITERAL );
         createEAttribute( enumerationEClass, ENUMERATION__INHERITED_FROM );
         createEAttribute( enumerationEClass, ENUMERATION__NAME );
+        createEReference( enumerationEClass, ENUMERATION__ENUMERATIONS );
 
         enumerationsEClass = createEClass( ENUMERATIONS );
         createEReference( enumerationsEClass, ENUMERATIONS__ENUMERATION );
+        createEReference( enumerationsEClass, ENUMERATIONS__NS );
 
         functionalConstraintEClass = createEClass( FUNCTIONAL_CONSTRAINT );
         createEReference( functionalConstraintEClass, FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES );
         createEAttribute( functionalConstraintEClass, FUNCTIONAL_CONSTRAINT__ABBREVIATION );
         createEAttribute( functionalConstraintEClass, FUNCTIONAL_CONSTRAINT__DESC_ID );
         createEAttribute( functionalConstraintEClass, FUNCTIONAL_CONSTRAINT__TITLE_ID );
+        createEReference( functionalConstraintEClass, FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS );
 
         functionalConstraintsEClass = createEClass( FUNCTIONAL_CONSTRAINTS );
         createEReference( functionalConstraintsEClass, FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT );
+        createEReference( functionalConstraintsEClass, FUNCTIONAL_CONSTRAINTS__NS );
+        createEReference( functionalConstraintsEClass, FUNCTIONAL_CONSTRAINTS__SERVICE_NS );
 
         licenseEClass = createEClass( LICENSE );
         createEAttribute( licenseEClass, LICENSE__MIXED );
         createEAttribute( licenseEClass, LICENSE__KIND );
         createEAttribute( licenseEClass, LICENSE__URI );
+        createEReference( licenseEClass, LICENSE__COPYRIGHT_NOTICE );
 
         literalEClass = createEClass( LITERAL );
         createEAttribute( literalEClass, LITERAL__LITERAL_VAL );
         createEAttribute( literalEClass, LITERAL__NAME );
+        createEReference( literalEClass, LITERAL__ENUMERATION );
 
         lnClassEClass = createEClass( LN_CLASS );
         createEAttribute( lnClassEClass, LN_CLASS__CAN_HAVE_LOG );
         createEAttribute( lnClassEClass, LN_CLASS__IS_EXTENSION );
         createEAttribute( lnClassEClass, LN_CLASS__NAME );
+        createEReference( lnClassEClass, LN_CLASS__LN_CLASSES );
 
         lnClassesEClass = createEClass( LN_CLASSES );
         createEReference( lnClassesEClass, LN_CLASSES__ABSTRACT_LN_CLASS );
         createEReference( lnClassesEClass, LN_CLASSES__LN_CLASS );
+        createEReference( lnClassesEClass, LN_CLASSES__NS );
 
         noticeEClass = createEClass( NOTICE );
         createEAttribute( noticeEClass, NOTICE__MIXED );
+        createEReference( noticeEClass, NOTICE__COPYRIGHT_NOTICE );
 
         nsEClass = createEClass( NS );
         createEReference( nsEClass, NS__CHANGES );
@@ -3543,24 +3926,32 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( presenceConditionEClass, PRESENCE_CONDITION__DESC_ID );
         createEAttribute( presenceConditionEClass, PRESENCE_CONDITION__NAME );
         createEAttribute( presenceConditionEClass, PRESENCE_CONDITION__TITLE_ID );
+        createEReference( presenceConditionEClass, PRESENCE_CONDITION__PRESENCE_CONDITIONS );
 
         presenceConditionsEClass = createEClass( PRESENCE_CONDITIONS );
         createEReference( presenceConditionsEClass, PRESENCE_CONDITIONS__PRESENCE_CONDITION );
+        createEReference( presenceConditionsEClass, PRESENCE_CONDITIONS__NS );
+        createEReference( presenceConditionsEClass, PRESENCE_CONDITIONS__SERVICE_NS );
 
         serviceCDCEClass = createEClass( SERVICE_CDC );
         createEReference( serviceCDCEClass, SERVICE_CDC__SERVICE_DATA_ATTRIBUTE );
         createEAttribute( serviceCDCEClass, SERVICE_CDC__CDC );
         createEAttribute( serviceCDCEClass, SERVICE_CDC__VARIANT );
+        createEReference( serviceCDCEClass, SERVICE_CDC__SERVICE_CD_CS );
 
         serviceCDCsEClass = createEClass( SERVICE_CD_CS );
         createEReference( serviceCDCsEClass, SERVICE_CD_CS__SERVICE_CDC );
+        createEReference( serviceCDCsEClass, SERVICE_CD_CS__SERVICE_NS );
 
         serviceConstructedAttributeEClass = createEClass( SERVICE_CONSTRUCTED_ATTRIBUTE );
         createEAttribute( serviceConstructedAttributeEClass, SERVICE_CONSTRUCTED_ATTRIBUTE__TYPE_KIND_PARAMETERIZED );
+        createEReference( serviceConstructedAttributeEClass,
+                SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE );
 
         serviceConstructedAttributesEClass = createEClass( SERVICE_CONSTRUCTED_ATTRIBUTES );
         createEReference( serviceConstructedAttributesEClass,
                 SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE );
+        createEReference( serviceConstructedAttributesEClass, SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS );
 
         serviceDataAttributeEClass = createEClass( SERVICE_DATA_ATTRIBUTE );
         createEAttribute( serviceDataAttributeEClass, SERVICE_DATA_ATTRIBUTE__FC );
@@ -3572,6 +3963,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( serviceDataAttributeEClass, SERVICE_DATA_ATTRIBUTE__TYPE_KIND );
         createEAttribute( serviceDataAttributeEClass, SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE );
         createEAttribute( serviceDataAttributeEClass, SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND );
+        createEReference( serviceDataAttributeEClass, SERVICE_DATA_ATTRIBUTE__SERVICE_CDC );
 
         serviceNSEClass = createEClass( SERVICE_NS );
         createEReference( serviceNSEClass, SERVICE_NS__CHANGES );
@@ -3593,6 +3985,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( serviceNsUsageEClass, SERVICE_NS_USAGE__ID );
         createEAttribute( serviceNsUsageEClass, SERVICE_NS_USAGE__PUBLICATION_STAGE );
         createEAttribute( serviceNsUsageEClass, SERVICE_NS_USAGE__REVISION );
+        createEReference( serviceNsUsageEClass, SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS );
 
         serviceParameterEClass = createEClass( SERVICE_PARAMETER );
         createEAttribute( serviceParameterEClass, SERVICE_PARAMETER__DEFAULT_VALUE );
@@ -3601,18 +3994,11 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( serviceParameterEClass, SERVICE_PARAMETER__NAME );
         createEAttribute( serviceParameterEClass, SERVICE_PARAMETER__TYPE );
         createEAttribute( serviceParameterEClass, SERVICE_PARAMETER__TYPE_KIND );
-
-        serviceTypeRealizationEClass = createEClass( SERVICE_TYPE_REALIZATION );
-        createEAttribute( serviceTypeRealizationEClass, SERVICE_TYPE_REALIZATION__FC );
-        createEAttribute( serviceTypeRealizationEClass, SERVICE_TYPE_REALIZATION__NAME );
-        createEAttribute( serviceTypeRealizationEClass, SERVICE_TYPE_REALIZATION__PRES_COND );
-        createEAttribute( serviceTypeRealizationEClass, SERVICE_TYPE_REALIZATION__PRES_COND_ARGS );
-        createEAttribute( serviceTypeRealizationEClass, SERVICE_TYPE_REALIZATION__PRES_COND_ARGS_ID );
-        createEAttribute( serviceTypeRealizationEClass, SERVICE_TYPE_REALIZATION__TYPE );
-        createEAttribute( serviceTypeRealizationEClass, SERVICE_TYPE_REALIZATION__TYPE_KIND );
+        createEReference( serviceParameterEClass, SERVICE_PARAMETER__CDC );
 
         serviceTypeRealizationsEClass = createEClass( SERVICE_TYPE_REALIZATIONS );
         createEReference( serviceTypeRealizationsEClass, SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION );
+        createEReference( serviceTypeRealizationsEClass, SERVICE_TYPE_REALIZATIONS__SERVICE_NS );
 
         subDataAttributeEClass = createEClass( SUB_DATA_ATTRIBUTE );
         createEAttribute( subDataAttributeEClass, SUB_DATA_ATTRIBUTE__DEFAULT_VALUE );
@@ -3628,6 +4014,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( subDataAttributeEClass, SUB_DATA_ATTRIBUTE__SIZE_ATTRIBUTE );
         createEAttribute( subDataAttributeEClass, SUB_DATA_ATTRIBUTE__TYPE );
         createEAttribute( subDataAttributeEClass, SUB_DATA_ATTRIBUTE__TYPE_KIND );
+        createEReference( subDataAttributeEClass, SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE );
 
         subDataObjectEClass = createEClass( SUB_DATA_OBJECT );
         createEAttribute( subDataObjectEClass, SUB_DATA_OBJECT__IS_ARRAY );
@@ -3641,6 +4028,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( subDataObjectEClass, SUB_DATA_OBJECT__TYPE );
         createEAttribute( subDataObjectEClass, SUB_DATA_OBJECT__UNDERLYING_TYPE );
         createEAttribute( subDataObjectEClass, SUB_DATA_OBJECT__UNDERLYING_TYPE_KIND );
+        createEReference( subDataObjectEClass, SUB_DATA_OBJECT__CDC );
 
         titledClassEClass = createEClass( TITLED_CLASS );
         createEAttribute( titledClassEClass, TITLED_CLASS__TITLE_ID );
@@ -3700,7 +4088,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
 
         // Add supertypes to classes
         appliesToTypeEClass.getESuperTypes().add( this.getNSDObjectWithVersionAndRelease() );
-        dependsOnTypeEClass.getESuperTypes().add( this.getNSDObjectWithVersionAndRelease() );
+        dependsOnEClass.getESuperTypes().add( this.getNSDObjectWithVersionAndRelease() );
         abstractLNClassEClass.getESuperTypes().add( this.getAnyLNClass() );
         anyLNClassEClass.getESuperTypes().add( this.getTitledClass() );
         applicableServiceNSEClass.getESuperTypes().add( this.getCopyrighted() );
@@ -3729,27 +4117,30 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         // Initialize classes, features, and operations; add parameters
         initEClass( appliesToTypeEClass, AppliesToType.class, "AppliesToType", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEAttribute( getAppliesToType_Id(), ecorePackage.getEString(), "id", null, 1, 1, AppliesToType.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEAttribute( getAppliesToType_Id(), ecorePackage.getEString(), "id", null, 0, 1, AppliesToType.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getAppliesToType_PublicationStage(), this.getPubStage(), "publicationStage", "IS", 0, 1,
                 AppliesToType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getAppliesToType_Revision(), ecorePackage.getEString(), "revision", "A", 0, 1,
                 AppliesToType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
+        initEReference( getAppliesToType_ServiceNsUsage(), this.getServiceNsUsage(), this.getServiceNsUsage_AppliesTo(),
+                "serviceNsUsage", null, 0, 1, AppliesToType.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
-        initEClass( dependsOnTypeEClass, DependsOnType.class, "DependsOnType", !IS_ABSTRACT, !IS_INTERFACE,
+        initEClass( dependsOnEClass, DependsOn.class, "DependsOn", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEAttribute( getDependsOnType_Id(), ecorePackage.getEString(), "id", null, 1, 1, DependsOnType.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
-        initEAttribute( getDependsOnType_PublicationStage(), this.getPubStage(), "publicationStage", "IS", 0, 1,
-                DependsOnType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
-                !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getDependsOnType_Revision(), ecorePackage.getEString(), "revision", "A", 0, 1,
-                DependsOnType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+        initEAttribute( getDependsOn_Id(), ecorePackage.getEString(), "id", null, 0, 1, DependsOn.class, !IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getDependsOn_PublicationStage(), this.getPubStage(), "publicationStage", "IS", 0, 1,
+                DependsOn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getDependsOn_Revision(), ecorePackage.getEString(), "revision", "A", 0, 1, DependsOn.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getDependsOn_NS(), this.getNS(), this.getNS_DependsOn(), "nS", null, 0, 1, DependsOn.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+                IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( documentRootEClass, DocumentRoot.class, "DocumentRoot", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
@@ -3763,108 +4154,129 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 "xSISchemaLocation", null, 0, -1, null, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
                 !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEReference( getDocumentRoot_ApplicableServiceNS(), this.getApplicableServiceNS(), null,
-                "applicableServiceNS", null, 0, -2, null, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
-                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED );
-        initEReference( getDocumentRoot_Copyright(), this.getCopyrightNotice(), null, "copyright", null, 0, -2, null,
-                IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
-                IS_DERIVED, IS_ORDERED );
-        initEReference( getDocumentRoot_NS(), this.getNS(), null, "nS", null, 0, -2, null, IS_TRANSIENT, IS_VOLATILE,
-                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED );
-        initEReference( getDocumentRoot_NSDoc(), this.getNSDoc(), null, "nSDoc", null, 0, -2, null, IS_TRANSIENT,
-                IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED,
+                "applicableServiceNS", null, 0, 1, null, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED );
+        initEReference( getDocumentRoot_NS(), this.getNS(), null, "nS", null, 0, 1, null, IS_TRANSIENT, IS_VOLATILE,
+                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED );
+        initEReference( getDocumentRoot_NSDoc(), this.getNSDoc(), null, "nSDoc", null, 0, 1, null, IS_TRANSIENT,
+                IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED,
                 IS_ORDERED );
-        initEReference( getDocumentRoot_ServiceNS(), this.getServiceNS(), null, "serviceNS", null, 0, -2, null,
-                IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE,
+        initEReference( getDocumentRoot_ServiceNS(), this.getServiceNS(), null, "serviceNS", null, 0, 1, null,
+                IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
                 IS_DERIVED, IS_ORDERED );
 
         initEClass( serviceTypeEClass, ServiceType.class, "ServiceType", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEAttribute( getServiceType_Name(), this.getACSIServicesKind(), "name", null, 1, 1, ServiceType.class,
+        initEAttribute( getServiceType_Name(), this.getACSIServicesKind(), "name", null, 0, 1, ServiceType.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getServiceType_ApplicableServices(), this.getApplicableServices(),
+                this.getApplicableServices_Service(), "applicableServices", null, 0, 1, ServiceType.class, IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+                !IS_ORDERED );
 
         initEClass( abbreviationEClass, Abbreviation.class, "Abbreviation", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getAbbreviation_DescID(), ecorePackage.getEString(), "descID", null, 0, 1, Abbreviation.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
-        initEAttribute( getAbbreviation_Name(), ecorePackage.getEString(), "name", null, 1, 1, Abbreviation.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getAbbreviation_Name(), ecorePackage.getEString(), "name", null, 0, 1, Abbreviation.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getAbbreviation_Abbreviations(), this.getAbbreviations(), this.getAbbreviations_Abbreviation(),
+                "abbreviations", null, 0, 1, Abbreviation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( abbreviationsEClass, Abbreviations.class, "Abbreviations", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getAbbreviations_Abbreviation(), this.getAbbreviation(), null, "abbreviation", null, 1, -1,
-                Abbreviations.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getAbbreviations_Abbreviation(), this.getAbbreviation(), this.getAbbreviation_Abbreviations(),
+                "abbreviation", null, 0, -1, Abbreviations.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getAbbreviations_NS(), this.getNS(), this.getNS_Abbreviations(), "nS", null, 0, 1,
+                Abbreviations.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getAbbreviations_ServiceNS(), this.getServiceNS(), this.getServiceNS_Abbreviations(),
+                "serviceNS", null, 0, 1, Abbreviations.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( abstractLNClassEClass, AbstractLNClass.class, "AbstractLNClass", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEAttribute( getAbstractLNClass_Name(), ecorePackage.getEString(), "name", null, 1, 1, AbstractLNClass.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEAttribute( getAbstractLNClass_Name(), ecorePackage.getEString(), "name", null, 0, 1, AbstractLNClass.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getAbstractLNClass_LNClasses(), this.getLNClasses(), this.getLNClasses_AbstractLNClass(),
+                "lNClasses", null, 0, 1, AbstractLNClass.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( anyLNClassEClass, AnyLNClass.class, "AnyLNClass", IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getAnyLNClass_DataObject(), this.getDataObject(), null, "dataObject", null, 0, -1,
-                AnyLNClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getAnyLNClass_DataObject(), this.getDataObject(), this.getDataObject_AnyLNClass(), "dataObject",
+                null, 0, -1, AnyLNClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
         initEAttribute( getAnyLNClass_Base(), ecorePackage.getEString(), "base", null, 0, 1, AnyLNClass.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
 
         initEClass( applicableServiceNSEClass, ApplicableServiceNS.class, "ApplicableServiceNS", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getApplicableServiceNS_ServiceNsUsage(), this.getServiceNsUsage(), null, "serviceNsUsage", null,
-                1, -1, ApplicableServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
-                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getApplicableServiceNS_Date(), theXMLTypePackage.getDateTime(), "date", null, 1, 1,
-                ApplicableServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getApplicableServiceNS_Version(), theXMLTypePackage.getUnsignedInt(), "version", null, 1, 1,
+        initEReference( getApplicableServiceNS_ServiceNsUsage(), this.getServiceNsUsage(),
+                this.getServiceNsUsage_ApplicableServiceNS(), "serviceNsUsage", null, 0, -1, ApplicableServiceNS.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
+        initEAttribute( getApplicableServiceNS_Date(), theXMLTypePackage.getDateTime(), "date", null, 0, 1,
+                ApplicableServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getApplicableServiceNS_Version(), theXMLTypePackage.getUnsignedInt(), "version", null, 0, 1,
                 ApplicableServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
 
         initEClass( applicableServicesEClass, ApplicableServices.class, "ApplicableServices", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getApplicableServices_Service(), this.getServiceType(), null, "service", null, 0, -1,
-                ApplicableServices.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getApplicableServices_DataSetMemberOf(), this.getDataSetMemberOf(), null, "dataSetMemberOf",
-                null, 0, -1, ApplicableServices.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
-                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getApplicableServices_Service(), this.getServiceType(),
+                this.getServiceType_ApplicableServices(), "service", null, 0, -1, ApplicableServices.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
+        initEReference( getApplicableServices_DataSetMemberOf(), this.getDataSetMemberOf(),
+                this.getDataSetMemberOf_ApplicableServices(), "dataSetMemberOf", null, 0, -1, ApplicableServices.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
+        initEReference( getApplicableServices_FunctionalConstraint(), this.getFunctionalConstraint(),
+                this.getFunctionalConstraint_ApplicableServices(), "functionalConstraint", null, 0, 1,
+                ApplicableServices.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( basicTypeEClass, BasicType.class, "BasicType", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getBasicType_DescID(), ecorePackage.getEString(), "descID", null, 0, 1, BasicType.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
-        initEAttribute( getBasicType_Name(), ecorePackage.getEString(), "name", null, 1, 1, BasicType.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getBasicType_Name(), ecorePackage.getEString(), "name", null, 0, 1, BasicType.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getBasicType_BasicTypes(), this.getBasicTypes(), this.getBasicTypes_BasicType(), "basicTypes",
+                null, 0, 1, BasicType.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( basicTypesEClass, BasicTypes.class, "BasicTypes", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getBasicTypes_BasicType(), this.getBasicType(), null, "basicType", null, 1, -1,
-                BasicTypes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getBasicTypes_BasicType(), this.getBasicType(), this.getBasicType_BasicTypes(), "basicType",
+                null, 0, -1, BasicTypes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getBasicTypes_NS(), this.getNS(), this.getNS_BasicTypes(), "nS", null, 0, 1, BasicTypes.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+                IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( cdcEClass, fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, "CDC", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getCDC_SubDataObject(), this.getSubDataObject(), null, "subDataObject", null, 0, -1,
-                fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getCDC_DataAttribute(), this.getDataAttribute(), null, "dataAttribute", null, 1, -1,
-                fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getCDC_ServiceParameter(), this.getServiceParameter(), null, "serviceParameter", null, 0, 1,
-                fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getCDC_SubDataObject(), this.getSubDataObject(), this.getSubDataObject_CDC(), "subDataObject",
+                null, 0, -1, fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, !IS_TRANSIENT, !IS_VOLATILE,
+                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getCDC_DataAttribute(), this.getDataAttribute(), this.getDataAttribute_CDC(), "dataAttribute",
+                null, 0, -1, fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, !IS_TRANSIENT, !IS_VOLATILE,
+                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getCDC_ServiceParameter(), this.getServiceParameter(), this.getServiceParameter_CDC(),
+                "serviceParameter", null, 0, 1, fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, !IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+                !IS_ORDERED );
         initEAttribute( getCDC_EnumParameterized(), theXMLTypePackage.getBoolean(), "enumParameterized", "false", 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
                 IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getCDC_Name(), ecorePackage.getEString(), "name", null, 1, 1,
+        initEAttribute( getCDC_Name(), ecorePackage.getEString(), "name", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getCDC_Statistics(), theXMLTypePackage.getBoolean(), "statistics", "false", 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
                 IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
@@ -3873,54 +4285,80 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getCDC_Variant(), theXMLTypePackage.getToken(), "variant", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getCDC_CDCs(), this.getCDCs(), this.getCDCs_CDC(), "cDCs", null, 0, 1,
+                fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( cdCsEClass, CDCs.class, "CDCs", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getCDCs_CDC(), this.getCDC(), null, "cDC", null, 0, -1, CDCs.class, !IS_TRANSIENT, !IS_VOLATILE,
-                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getCDCs_CDC(), this.getCDC(), this.getCDC_CDCs(), "cDC", null, 0, -1, CDCs.class, !IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+                !IS_ORDERED );
+        initEReference( getCDCs_NS(), this.getNS(), this.getNS_CDCs(), "nS", null, 0, 1, CDCs.class, IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+                !IS_ORDERED );
 
         initEClass( changesEClass, Changes.class, "Changes", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getChanges_ChangesID(), ecorePackage.getEString(), "changesID", null, 0, 1, Changes.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getChanges_Date(), theXMLTypePackage.getDate(), "date", null, 0, 1, Changes.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getChanges_Revision(), ecorePackage.getEString(), "revision", "A", 0, 1, Changes.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getChanges_Tissues(), ecorePackage.getEString(), "tissues", null, 0, 1, Changes.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getChanges_NS(), this.getNS(), this.getNS_Changes(), "nS", null, 0, 1, Changes.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+                IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getChanges_ServiceNS(), this.getServiceNS(), this.getServiceNS_Changes(), "serviceNS", null, 0,
+                1, Changes.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( constructedAttributeEClass, ConstructedAttribute.class, "ConstructedAttribute", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getConstructedAttribute_SubDataAttribute(), this.getSubDataAttribute(), null,
-                "subDataAttribute", null, 1, -1, ConstructedAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getConstructedAttribute_Name(), ecorePackage.getEString(), "name", null, 1, 1,
-                ConstructedAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+        initEReference( getConstructedAttribute_SubDataAttribute(), this.getSubDataAttribute(),
+                this.getSubDataAttribute_ConstructedAttribute(), "subDataAttribute", null, 0, -1,
+                ConstructedAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEAttribute( getConstructedAttribute_Name(), ecorePackage.getEString(), "name", null, 0, 1,
+                ConstructedAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getConstructedAttribute_ConstructedAttributes(), this.getConstructedAttributes(),
+                this.getConstructedAttributes_ConstructedAttribute(), "constructedAttributes", null, 0, 1,
+                ConstructedAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getConstructedAttribute_ServiceTypeRealizations(), this.getServiceTypeRealizations(),
+                this.getServiceTypeRealizations_ServiceTypeRealization(), "serviceTypeRealizations", null, 0, 1,
+                ConstructedAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( constructedAttributesEClass, ConstructedAttributes.class, "ConstructedAttributes", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getConstructedAttributes_ConstructedAttribute(), this.getConstructedAttribute(), null,
-                "constructedAttribute", null, 0, -1, ConstructedAttributes.class, !IS_TRANSIENT, !IS_VOLATILE,
-                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getConstructedAttributes_ConstructedAttribute(), this.getConstructedAttribute(),
+                this.getConstructedAttribute_ConstructedAttributes(), "constructedAttribute", null, 0, -1,
+                ConstructedAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getConstructedAttributes_NS(), this.getNS(), this.getNS_ConstructedAttributes(), "nS", null, 0,
+                1, ConstructedAttributes.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( copyrightedEClass, Copyrighted.class, "Copyrighted", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getCopyrighted_Copyright(), this.getCopyrightNotice(), null, "copyright", null, 0, 1,
-                Copyrighted.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getCopyrighted_Copyright(), this.getCopyrightNotice(), this.getCopyrightNotice_Copyrighted(),
+                "copyright", null, 0, 1, Copyrighted.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( copyrightNoticeEClass, CopyrightNotice.class, "CopyrightNotice", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getCopyrightNotice_Notice(), this.getNotice(), null, "notice", null, 1, 1,
-                CopyrightNotice.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getCopyrightNotice_License(), this.getLicense(), null, "license", null, 1, 1,
-                CopyrightNotice.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getCopyrightNotice_Notice(), this.getNotice(), this.getNotice_CopyrightNotice(), "notice", null,
+                0, 1, CopyrightNotice.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getCopyrightNotice_License(), this.getLicense(), this.getLicense_CopyrightNotice(), "license",
+                null, 0, 1, CopyrightNotice.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getCopyrightNotice_Copyrighted(), this.getCopyrighted(), this.getCopyrighted_Copyright(),
+                "copyrighted", null, 0, 1, CopyrightNotice.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( dataAttributeEClass, DataAttribute.class, "DataAttribute", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
@@ -3928,53 +4366,53 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_DefaultValue(), theXMLTypePackage.getNormalizedString(), "defaultValue", null,
-                0, 1, DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                0, 1, DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_Dupd(), theXMLTypePackage.getBoolean(), "dupd", "false", 0, 1,
                 DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getDataAttribute_Fc(), ecorePackage.getEString(), "fc", null, 1, 1, DataAttribute.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEAttribute( getDataAttribute_Fc(), ecorePackage.getEString(), "fc", null, 0, 1, DataAttribute.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_IsArray(), theXMLTypePackage.getBoolean(), "isArray", "false", 0, 1,
                 DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_MaxIndexAttribute(), ecorePackage.getEString(), "maxIndexAttribute", null, 0,
-                1, DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                1, DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_MaxValue(), theXMLTypePackage.getDecimal(), "maxValue", null, 0, 1,
-                DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_MinIndex(), theXMLTypePackage.getUnsignedInt(), "minIndex", "0", 0, 1,
                 DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_MinValue(), theXMLTypePackage.getDecimal(), "minValue", null, 0, 1,
-                DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getDataAttribute_Name(), ecorePackage.getEString(), "name", null, 1, 1, DataAttribute.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEAttribute( getDataAttribute_Name(), ecorePackage.getEString(), "name", null, 0, 1, DataAttribute.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_PresCond(), ecorePackage.getEString(), "presCond", "M", 0, 1,
                 DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_PresCondArgs(), ecorePackage.getEString(), "presCondArgs", null, 0, 1,
-                DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_PresCondArgsID(), ecorePackage.getEString(), "presCondArgsID", null, 0, 1,
-                DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_Qchg(), theXMLTypePackage.getBoolean(), "qchg", "false", 0, 1,
                 DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_SizeAttribute(), ecorePackage.getEString(), "sizeAttribute", null, 0, 1,
-                DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_Type(), ecorePackage.getEString(), "type", null, 0, 1, DataAttribute.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataAttribute_TypeKind(), this.getAttributeTypeKind(), "typeKind", "BASIC", 0, 1,
                 DataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
+        initEReference( getDataAttribute_CDC(), this.getCDC(), this.getCDC_DataAttribute(), "cDC", null, 0, 1,
+                DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( dataObjectEClass, DataObject.class, "DataObject", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
@@ -3982,39 +4420,44 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataObject_DsPresCondArgs(), ecorePackage.getEString(), "dsPresCondArgs", null, 0, 1,
-                DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataObject_DsPresCondArgsID(), ecorePackage.getEString(), "dsPresCondArgsID", null, 0, 1,
-                DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getDataObject_Name(), ecorePackage.getEString(), "name", null, 1, 1, DataObject.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEAttribute( getDataObject_Name(), ecorePackage.getEString(), "name", null, 0, 1, DataObject.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataObject_PresCond(), ecorePackage.getEString(), "presCond", "M", 0, 1, DataObject.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataObject_PresCondArgs(), ecorePackage.getEString(), "presCondArgs", null, 0, 1,
-                DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataObject_PresCondArgsID(), ecorePackage.getEString(), "presCondArgsID", null, 0, 1,
-                DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataObject_Transient(), theXMLTypePackage.getBoolean(), "transient", "false", 0, 1,
                 DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getDataObject_Type(), ecorePackage.getEString(), "type", null, 1, 1, DataObject.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEAttribute( getDataObject_Type(), ecorePackage.getEString(), "type", null, 0, 1, DataObject.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataObject_UnderlyingType(), ecorePackage.getEString(), "underlyingType", null, 0, 1,
-                DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDataObject_UnderlyingTypeKind(), this.getDefinedAttributeTypeKind(), "underlyingTypeKind",
                 null, 0, 1, DataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getDataObject_AnyLNClass(), this.getAnyLNClass(), this.getAnyLNClass_DataObject(), "anyLNClass",
+                null, 0, 1, DataObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( dataSetMemberOfEClass, DataSetMemberOf.class, "DataSetMemberOf", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEAttribute( getDataSetMemberOf_Cb(), this.getCBKind(), "cb", null, 1, 1, DataSetMemberOf.class,
+        initEAttribute( getDataSetMemberOf_Cb(), this.getCBKind(), "cb", null, 0, 1, DataSetMemberOf.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getDataSetMemberOf_ApplicableServices(), this.getApplicableServices(),
+                this.getApplicableServices_DataSetMemberOf(), "applicableServices", null, 0, 1, DataSetMemberOf.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+                IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( docEClass, Doc.class, "Doc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getDoc_Mixed(), ecorePackage.getEFeatureMapEntry(), "mixed", null, 0, -1, Doc.class,
@@ -4024,8 +4467,11 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, IS_DERIVED, IS_ORDERED );
         initEAttribute( getDoc_Any(), ecorePackage.getEFeatureMapEntry(), "any", null, 0, -1, Doc.class, IS_TRANSIENT,
                 IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, IS_DERIVED, IS_ORDERED );
-        initEAttribute( getDoc_Id(), ecorePackage.getEString(), "id", null, 1, 1, Doc.class, !IS_TRANSIENT,
-                !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getDoc_Id(), ecorePackage.getEString(), "id", null, 0, 1, Doc.class, !IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getDoc_NSDoc(), this.getNSDoc(), this.getNSDoc_Doc(), "nSDoc", null, 0, 1, Doc.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+                IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( documentedClassEClass, DocumentedClass.class, "DocumentedClass", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
@@ -4033,7 +4479,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 DocumentedClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDocumentedClass_DescID(), ecorePackage.getEString(), "descID", null, 0, 1,
-                DocumentedClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                DocumentedClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getDocumentedClass_Informative(), theXMLTypePackage.getBoolean(), "informative", "false", 0, 1,
                 DocumentedClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
@@ -4041,42 +4487,60 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
 
         initEClass( enumerationEClass, Enumeration.class, "Enumeration", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getEnumeration_Literal(), this.getLiteral(), null, "literal", null, 1, -1, Enumeration.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getEnumeration_Literal(), this.getLiteral(), this.getLiteral_Enumeration(), "literal", null, 0,
+                -1, Enumeration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
         initEAttribute( getEnumeration_InheritedFrom(), ecorePackage.getEString(), "inheritedFrom", null, 0, 1,
-                Enumeration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                Enumeration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getEnumeration_Name(), ecorePackage.getEString(), "name", null, 1, 1, Enumeration.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEAttribute( getEnumeration_Name(), ecorePackage.getEString(), "name", null, 0, 1, Enumeration.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getEnumeration_Enumerations(), this.getEnumerations(), this.getEnumerations_Enumeration(),
+                "enumerations", null, 0, 1, Enumeration.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( enumerationsEClass, Enumerations.class, "Enumerations", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getEnumerations_Enumeration(), this.getEnumeration(), null, "enumeration", null, 0, -1,
-                Enumerations.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getEnumerations_Enumeration(), this.getEnumeration(), this.getEnumeration_Enumerations(),
+                "enumeration", null, 0, -1, Enumerations.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getEnumerations_NS(), this.getNS(), this.getNS_Enumerations(), "nS", null, 0, 1,
+                Enumerations.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( functionalConstraintEClass, FunctionalConstraint.class, "FunctionalConstraint", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getFunctionalConstraint_ApplicableServices(), this.getApplicableServices(), null,
-                "applicableServices", null, 0, 1, FunctionalConstraint.class, !IS_TRANSIENT, !IS_VOLATILE,
-                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getFunctionalConstraint_Abbreviation(), ecorePackage.getEString(), "abbreviation", null, 1, 1,
-                FunctionalConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+        initEReference( getFunctionalConstraint_ApplicableServices(), this.getApplicableServices(),
+                this.getApplicableServices_FunctionalConstraint(), "applicableServices", null, 0, 1,
+                FunctionalConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEAttribute( getFunctionalConstraint_Abbreviation(), ecorePackage.getEString(), "abbreviation", null, 0, 1,
+                FunctionalConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getFunctionalConstraint_DescID(), ecorePackage.getEString(), "descID", null, 0, 1,
-                FunctionalConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+                FunctionalConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getFunctionalConstraint_TitleID(), ecorePackage.getEString(), "titleID", null, 0, 1,
-                FunctionalConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+                FunctionalConstraint.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getFunctionalConstraint_FunctionalConstraints(), this.getFunctionalConstraints(),
+                this.getFunctionalConstraints_FunctionalConstraint(), "functionalConstraints", null, 0, 1,
+                FunctionalConstraint.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( functionalConstraintsEClass, FunctionalConstraints.class, "FunctionalConstraints", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getFunctionalConstraints_FunctionalConstraint(), this.getFunctionalConstraint(), null,
-                "functionalConstraint", null, 1, -1, FunctionalConstraints.class, !IS_TRANSIENT, !IS_VOLATILE,
-                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getFunctionalConstraints_FunctionalConstraint(), this.getFunctionalConstraint(),
+                this.getFunctionalConstraint_FunctionalConstraints(), "functionalConstraint", null, 0, -1,
+                FunctionalConstraints.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getFunctionalConstraints_NS(), this.getNS(), this.getNS_FunctionalConstraints(), "nS", null, 0,
+                1, FunctionalConstraints.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getFunctionalConstraints_ServiceNS(), this.getServiceNS(),
+                this.getServiceNS_FunctionalConstraints(), "serviceNS", null, 0, 1, FunctionalConstraints.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+                IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( licenseEClass, License.class, "License", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getLicense_Mixed(), ecorePackage.getEFeatureMapEntry(), "mixed", null, 0, -1, License.class,
@@ -4085,14 +4549,19 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         initEAttribute( getLicense_Kind(), this.getLicenseKind(), "kind", null, 0, 1, License.class, !IS_TRANSIENT,
                 !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getLicense_Uri(), theXMLTypePackage.getNormalizedString(), "uri", null, 0, 1, License.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getLicense_CopyrightNotice(), this.getCopyrightNotice(), this.getCopyrightNotice_License(),
+                "copyrightNotice", null, 0, 1, License.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( literalEClass, Literal.class, "Literal", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEAttribute( getLiteral_LiteralVal(), theXMLTypePackage.getInt(), "literalVal", null, 1, 1, Literal.class,
+        initEAttribute( getLiteral_LiteralVal(), theXMLTypePackage.getInt(), "literalVal", null, 0, 1, Literal.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getLiteral_Name(), ecorePackage.getEString(), "name", null, 1, 1, Literal.class, !IS_TRANSIENT,
-                !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getLiteral_Name(), ecorePackage.getEString(), "name", null, 0, 1, Literal.class, !IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getLiteral_Enumeration(), this.getEnumeration(), this.getEnumeration_Literal(), "enumeration",
+                null, 0, 1, Literal.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( lnClassEClass, LNClass.class, "LNClass", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getLNClass_CanHaveLOG(), theXMLTypePackage.getBoolean(), "canHaveLOG", "false", 0, 1,
@@ -4101,61 +4570,73 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         initEAttribute( getLNClass_IsExtension(), theXMLTypePackage.getBoolean(), "isExtension", "false", 0, 1,
                 LNClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getLNClass_Name(), ecorePackage.getEString(), "name", null, 1, 1, LNClass.class, !IS_TRANSIENT,
-                !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getLNClass_Name(), ecorePackage.getEString(), "name", null, 0, 1, LNClass.class, !IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getLNClass_LNClasses(), this.getLNClasses(), this.getLNClasses_LNClass(), "lNClasses", null, 0,
+                1, LNClass.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( lnClassesEClass, LNClasses.class, "LNClasses", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getLNClasses_AbstractLNClass(), this.getAbstractLNClass(), null, "abstractLNClass", null, 0, -1,
+        initEReference( getLNClasses_AbstractLNClass(), this.getAbstractLNClass(), this.getAbstractLNClass_LNClasses(),
+                "abstractLNClass", null, 0, -1, LNClasses.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getLNClasses_LNClass(), this.getLNClass(), this.getLNClass_LNClasses(), "lNClass", null, 0, -1,
                 LNClasses.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getLNClasses_LNClass(), this.getLNClass(), null, "lNClass", null, 0, -1, LNClasses.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getLNClasses_NS(), this.getNS(), this.getNS_LNClasses(), "nS", null, 0, 1, LNClasses.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+                IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( noticeEClass, Notice.class, "Notice", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getNotice_Mixed(), ecorePackage.getEFeatureMapEntry(), "mixed", null, 0, -1, Notice.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED,
                 IS_ORDERED );
+        initEReference( getNotice_CopyrightNotice(), this.getCopyrightNotice(), this.getCopyrightNotice_Notice(),
+                "copyrightNotice", null, 0, 1, Notice.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( nsEClass, fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, "NS", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getNS_Changes(), this.getChanges(), null, "changes", null, 0, 1,
-                fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getNS_DependsOn(), this.getDependsOnType(), null, "dependsOn", null, 0, 1,
+        initEReference( getNS_Changes(), this.getChanges(), this.getChanges_NS(), "changes", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getNS_BasicTypes(), this.getBasicTypes(), null, "basicTypes", null, 0, 1,
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getNS_DependsOn(), this.getDependsOn(), this.getDependsOn_NS(), "dependsOn", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getNS_FunctionalConstraints(), this.getFunctionalConstraints(), null, "functionalConstraints",
-                null, 0, 1, fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE,
-                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getNS_PresenceConditions(), this.getPresenceConditions(), null, "presenceConditions", null, 0,
-                1, fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getNS_Abbreviations(), this.getAbbreviations(), null, "abbreviations", null, 0, 1,
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getNS_BasicTypes(), this.getBasicTypes(), this.getBasicTypes_NS(), "basicTypes", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getNS_Enumerations(), this.getEnumerations(), null, "enumerations", null, 0, 1,
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getNS_FunctionalConstraints(), this.getFunctionalConstraints(),
+                this.getFunctionalConstraints_NS(), "functionalConstraints", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getNS_ConstructedAttributes(), this.getConstructedAttributes(), null, "constructedAttributes",
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getNS_PresenceConditions(), this.getPresenceConditions(), this.getPresenceConditions_NS(),
+                "presenceConditions", null, 0, 1, fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
+        initEReference( getNS_Abbreviations(), this.getAbbreviations(), this.getAbbreviations_NS(), "abbreviations",
                 null, 0, 1, fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE,
-                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getNS_CDCs(), this.getCDCs(), null, "cDCs", null, 0, 1,
+                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getNS_Enumerations(), this.getEnumerations(), this.getEnumerations_NS(), "enumerations", null,
+                0, 1, fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE,
+                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getNS_ConstructedAttributes(), this.getConstructedAttributes(),
+                this.getConstructedAttributes_NS(), "constructedAttributes", null, 0, 1,
+                fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getNS_CDCs(), this.getCDCs(), this.getCDCs_NS(), "cDCs", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getNS_LNClasses(), this.getLNClasses(), null, "lNClasses", null, 0, 1,
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getNS_LNClasses(), this.getLNClasses(), this.getLNClasses_NS(), "lNClasses", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
         initEAttribute( getNS_DescID(), ecorePackage.getEString(), "descID", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getNS_Id(), ecorePackage.getEString(), "id", null, 1, 1,
+                IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getNS_Id(), ecorePackage.getEString(), "id", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getNS_PublicationStage(), this.getPubStage(), "publicationStage", "IS", 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
                 IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
@@ -4164,260 +4645,279 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getNS_UmlDate(), theXMLTypePackage.getDateTime(), "umlDate", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getNS_UmlVersion(), ecorePackage.getEString(), "umlVersion", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
 
         initEClass( nsDocEClass, NSDoc.class, "NSDoc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getNSDoc_Doc(), this.getDoc(), null, "doc", null, 1, -1, NSDoc.class, !IS_TRANSIENT,
-                !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
-        initEAttribute( getNSDoc_Id(), ecorePackage.getEString(), "id", null, 1, 1, NSDoc.class, !IS_TRANSIENT,
-                !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getNSDoc_Lang(), theXMLTypePackage.getLanguage(), "lang", null, 1, 1, NSDoc.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEReference( getNSDoc_Doc(), this.getDoc(), this.getDoc_NSDoc(), "doc", null, 0, -1, NSDoc.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
+        initEAttribute( getNSDoc_Id(), ecorePackage.getEString(), "id", null, 0, 1, NSDoc.class, !IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getNSDoc_Lang(), theXMLTypePackage.getLanguage(), "lang", null, 0, 1, NSDoc.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getNSDoc_PublicationStage(), this.getPubStage(), "publicationStage", "IS", 0, 1, NSDoc.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getNSDoc_Revision(), ecorePackage.getEString(), "revision", "A", 0, 1, NSDoc.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getNSDoc_UmlDate(), theXMLTypePackage.getDateTime(), "umlDate", null, 0, 1, NSDoc.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getNSDoc_UmlVersion(), ecorePackage.getEString(), "umlVersion", null, 0, 1, NSDoc.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
 
         initEClass( presenceConditionEClass, PresenceCondition.class, "PresenceCondition", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getPresenceCondition_Argument(), ecorePackage.getEString(), "argument", null, 0, 1,
-                PresenceCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                PresenceCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getPresenceCondition_DescID(), ecorePackage.getEString(), "descID", null, 0, 1,
-                PresenceCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                PresenceCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getPresenceCondition_Name(), ecorePackage.getEString(), "name", null, 1, 1,
-                PresenceCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+        initEAttribute( getPresenceCondition_Name(), ecorePackage.getEString(), "name", null, 0, 1,
+                PresenceCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getPresenceCondition_TitleID(), ecorePackage.getEString(), "titleID", null, 0, 1,
-                PresenceCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                PresenceCondition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
+        initEReference( getPresenceCondition_PresenceConditions(), this.getPresenceConditions(),
+                this.getPresenceConditions_PresenceCondition(), "presenceConditions", null, 0, 1,
+                PresenceCondition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( presenceConditionsEClass, PresenceConditions.class, "PresenceConditions", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getPresenceConditions_PresenceCondition(), this.getPresenceCondition(), null,
-                "presenceCondition", null, 1, -1, PresenceConditions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getPresenceConditions_PresenceCondition(), this.getPresenceCondition(),
+                this.getPresenceCondition_PresenceConditions(), "presenceCondition", null, 0, -1,
+                PresenceConditions.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getPresenceConditions_NS(), this.getNS(), this.getNS_PresenceConditions(), "nS", null, 0, 1,
+                PresenceConditions.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getPresenceConditions_ServiceNS(), this.getServiceNS(), this.getServiceNS_PresenceConditions(),
+                "serviceNS", null, 0, 1, PresenceConditions.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( serviceCDCEClass, ServiceCDC.class, "ServiceCDC", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getServiceCDC_ServiceDataAttribute(), this.getServiceDataAttribute(), null,
-                "serviceDataAttribute", null, 1, -1, ServiceCDC.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getServiceCDC_ServiceDataAttribute(), this.getServiceDataAttribute(),
+                this.getServiceDataAttribute_ServiceCDC(), "serviceDataAttribute", null, 0, -1, ServiceCDC.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
         initEAttribute( getServiceCDC_Cdc(), ecorePackage.getEString(), "cdc", null, 1, 1, ServiceCDC.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceCDC_Variant(), theXMLTypePackage.getToken(), "variant", null, 0, 1, ServiceCDC.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getServiceCDC_ServiceCDCs(), this.getServiceCDCs(), this.getServiceCDCs_ServiceCDC(),
+                "serviceCDCs", null, 0, 1, ServiceCDC.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( serviceCDCsEClass, ServiceCDCs.class, "ServiceCDCs", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getServiceCDCs_ServiceCDC(), this.getServiceCDC(), null, "serviceCDC", null, 0, -1,
-                ServiceCDCs.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getServiceCDCs_ServiceCDC(), this.getServiceCDC(), this.getServiceCDC_ServiceCDCs(),
+                "serviceCDC", null, 0, -1, ServiceCDCs.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getServiceCDCs_ServiceNS(), this.getServiceNS(), this.getServiceNS_ServiceCDCs(), "serviceNS",
+                null, 0, 1, ServiceCDCs.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( serviceConstructedAttributeEClass, ServiceConstructedAttribute.class, "ServiceConstructedAttribute",
                 !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getServiceConstructedAttribute_TypeKindParameterized(), theXMLTypePackage.getBoolean(),
                 "typeKindParameterized", "false", 0, 1, ServiceConstructedAttribute.class, !IS_TRANSIENT, !IS_VOLATILE,
                 IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getServiceConstructedAttribute_ServiceConstructedAttribute(),
+                this.getServiceConstructedAttributes(),
+                this.getServiceConstructedAttributes_ServiceConstructedAttribute(), "serviceConstructedAttribute", null,
+                0, 1, ServiceConstructedAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( serviceConstructedAttributesEClass, ServiceConstructedAttributes.class,
                 "ServiceConstructedAttributes", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
         initEReference( getServiceConstructedAttributes_ServiceConstructedAttribute(),
-                this.getServiceConstructedAttribute(), null, "serviceConstructedAttribute", null, 0, -1,
-                ServiceConstructedAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
-                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                this.getServiceConstructedAttribute(),
+                this.getServiceConstructedAttribute_ServiceConstructedAttribute(), "serviceConstructedAttribute", null,
+                0, -1, ServiceConstructedAttributes.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getServiceConstructedAttributes_ServiceNS(), this.getServiceNS(),
+                this.getServiceNS_ServiceConstructedAttributes(), "serviceNS", null, 0, 1,
+                ServiceConstructedAttributes.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( serviceDataAttributeEClass, ServiceDataAttribute.class, "ServiceDataAttribute", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEAttribute( getServiceDataAttribute_Fc(), ecorePackage.getEString(), "fc", null, 1, 1,
-                ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+        initEAttribute( getServiceDataAttribute_Fc(), ecorePackage.getEString(), "fc", null, 0, 1,
+                ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getServiceDataAttribute_Name(), ecorePackage.getEString(), "name", null, 1, 1,
-                ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+        initEAttribute( getServiceDataAttribute_Name(), ecorePackage.getEString(), "name", null, 0, 1,
+                ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceDataAttribute_PresCond(), ecorePackage.getEString(), "presCond", "M", 0, 1,
                 ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceDataAttribute_PresCondArgs(), ecorePackage.getEString(), "presCondArgs", null, 0, 1,
-                ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+                ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceDataAttribute_PresCondArgsID(), ecorePackage.getEString(), "presCondArgsID", null, 0,
-                1, ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+                1, ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceDataAttribute_Type(), ecorePackage.getEString(), "type", null, 0, 1,
-                ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+                ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceDataAttribute_TypeKind(), this.getAttributeTypeKind(), "typeKind", "BASIC", 0, 1,
                 ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceDataAttribute_UnderlyingType(), ecorePackage.getEString(), "underlyingType", null, 0,
-                1, ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+                1, ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceDataAttribute_UnderlyingTypeKind(), this.getDefinedAttributeTypeKind(),
                 "underlyingTypeKind", null, 0, 1, ServiceDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE,
                 IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getServiceDataAttribute_ServiceCDC(), this.getServiceCDC(),
+                this.getServiceCDC_ServiceDataAttribute(), "serviceCDC", null, 0, 1, ServiceDataAttribute.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+                IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( serviceNSEClass, ServiceNS.class, "ServiceNS", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getServiceNS_Changes(), this.getChanges(), null, "changes", null, 0, 1, ServiceNS.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getServiceNS_FunctionalConstraints(), this.getFunctionalConstraints(), null,
-                "functionalConstraints", null, 0, 1, ServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getServiceNS_PresenceConditions(), this.getPresenceConditions(), null, "presenceConditions",
-                null, 0, 1, ServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
-                !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getServiceNS_Abbreviations(), this.getAbbreviations(), null, "abbreviations", null, 0, 1,
+        initEReference( getServiceNS_Changes(), this.getChanges(), this.getChanges_ServiceNS(), "changes", null, 0, 1,
                 ServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getServiceNS_ServiceTypeRealizations(), this.getServiceTypeRealizations(), null,
-                "serviceTypeRealizations", null, 0, 1, ServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getServiceNS_ServiceConstructedAttributes(), this.getServiceConstructedAttributes(), null,
-                "serviceConstructedAttributes", null, 0, 1, ServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
-                IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEReference( getServiceNS_ServiceCDCs(), this.getServiceCDCs(), null, "serviceCDCs", null, 0, 1,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getServiceNS_FunctionalConstraints(), this.getFunctionalConstraints(),
+                this.getFunctionalConstraints_ServiceNS(), "functionalConstraints", null, 0, 1, ServiceNS.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
+        initEReference( getServiceNS_PresenceConditions(), this.getPresenceConditions(),
+                this.getPresenceConditions_ServiceNS(), "presenceConditions", null, 0, 1, ServiceNS.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
+        initEReference( getServiceNS_Abbreviations(), this.getAbbreviations(), this.getAbbreviations_ServiceNS(),
+                "abbreviations", null, 0, 1, ServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getServiceNS_ServiceTypeRealizations(), this.getServiceTypeRealizations(),
+                this.getServiceTypeRealizations_ServiceNS(), "serviceTypeRealizations", null, 0, 1, ServiceNS.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
+        initEReference( getServiceNS_ServiceConstructedAttributes(), this.getServiceConstructedAttributes(),
+                this.getServiceConstructedAttributes_ServiceNS(), "serviceConstructedAttributes", null, 0, 1,
                 ServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getServiceNS_ServiceCDCs(), this.getServiceCDCs(), this.getServiceCDCs_ServiceNS(),
+                "serviceCDCs", null, 0, 1, ServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
         initEAttribute( getServiceNS_DescID(), ecorePackage.getEString(), "descID", null, 0, 1, ServiceNS.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
-        initEAttribute( getServiceNS_Id(), ecorePackage.getEString(), "id", null, 1, 1, ServiceNS.class, !IS_TRANSIENT,
-                !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getServiceNS_Id(), ecorePackage.getEString(), "id", null, 0, 1, ServiceNS.class, !IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceNS_PublicationStage(), this.getPubStage(), "publicationStage", "IS", 0, 1,
                 ServiceNS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceNS_Revision(), ecorePackage.getEString(), "revision", "A", 0, 1, ServiceNS.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceNS_UmlDate(), theXMLTypePackage.getDateTime(), "umlDate", null, 0, 1, ServiceNS.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceNS_UmlVersion(), ecorePackage.getEString(), "umlVersion", null, 0, 1, ServiceNS.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
 
         initEClass( serviceNsUsageEClass, ServiceNsUsage.class, "ServiceNsUsage", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getServiceNsUsage_AppliesTo(), this.getAppliesToType(), null, "appliesTo", null, 1, -1,
-                ServiceNsUsage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getServiceNsUsage_Id(), ecorePackage.getEString(), "id", null, 1, 1, ServiceNsUsage.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEReference( getServiceNsUsage_AppliesTo(), this.getAppliesToType(), this.getAppliesToType_ServiceNsUsage(),
+                "appliesTo", null, 0, -1, ServiceNsUsage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEAttribute( getServiceNsUsage_Id(), ecorePackage.getEString(), "id", null, 0, 1, ServiceNsUsage.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceNsUsage_PublicationStage(), this.getPubStage(), "publicationStage", "IS", 0, 1,
                 ServiceNsUsage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceNsUsage_Revision(), ecorePackage.getEString(), "revision", "A", 0, 1,
                 ServiceNsUsage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
+        initEReference( getServiceNsUsage_ApplicableServiceNS(), this.getApplicableServiceNS(),
+                this.getApplicableServiceNS_ServiceNsUsage(), "applicableServiceNS", null, 0, 1, ServiceNsUsage.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+                IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( serviceParameterEClass, ServiceParameter.class, "ServiceParameter", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getServiceParameter_DefaultValue(), theXMLTypePackage.getNormalizedString(), "defaultValue",
-                null, 0, 1, ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+                null, 0, 1, ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceParameter_MaxValue(), theXMLTypePackage.getDecimal(), "maxValue", null, 0, 1,
-                ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceParameter_MinValue(), theXMLTypePackage.getDecimal(), "minValue", null, 0, 1,
-                ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getServiceParameter_Name(), ecorePackage.getEString(), "name", null, 1, 1,
-                ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+        initEAttribute( getServiceParameter_Name(), ecorePackage.getEString(), "name", null, 0, 1,
+                ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceParameter_Type(), ecorePackage.getEString(), "type", null, 0, 1,
-                ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getServiceParameter_TypeKind(), this.getAttributeTypeKind(), "typeKind", "BASIC", 0, 1,
                 ServiceParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-
-        initEClass( serviceTypeRealizationEClass, ServiceTypeRealization.class, "ServiceTypeRealization", !IS_ABSTRACT,
-                !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEAttribute( getServiceTypeRealization_Fc(), ecorePackage.getEString(), "fc", null, 1, 1,
-                ServiceTypeRealization.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getServiceTypeRealization_Name(), ecorePackage.getEString(), "name", null, 1, 1,
-                ServiceTypeRealization.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getServiceTypeRealization_PresCond(), ecorePackage.getEString(), "presCond", "M", 0, 1,
-                ServiceTypeRealization.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getServiceTypeRealization_PresCondArgs(), ecorePackage.getEString(), "presCondArgs", null, 0, 1,
-                ServiceTypeRealization.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getServiceTypeRealization_PresCondArgsID(), ecorePackage.getEString(), "presCondArgsID", null,
-                0, 1, ServiceTypeRealization.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getServiceTypeRealization_Type(), ecorePackage.getEString(), "type", null, 0, 1,
-                ServiceTypeRealization.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getServiceTypeRealization_TypeKind(), this.getAttributeTypeKind(), "typeKind", "BASIC", 0, 1,
-                ServiceTypeRealization.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
-                IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getServiceParameter_CDC(), this.getCDC(), this.getCDC_ServiceParameter(), "cDC", null, 0, 1,
+                ServiceParameter.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( serviceTypeRealizationsEClass, ServiceTypeRealizations.class, "ServiceTypeRealizations",
                 !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
-        initEReference( getServiceTypeRealizations_ServiceTypeRealization(), this.getConstructedAttribute(), null,
-                "serviceTypeRealization", null, 0, -1, ServiceTypeRealizations.class, !IS_TRANSIENT, !IS_VOLATILE,
-                IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getServiceTypeRealizations_ServiceTypeRealization(), this.getConstructedAttribute(),
+                this.getConstructedAttribute_ServiceTypeRealizations(), "serviceTypeRealization", null, 0, -1,
+                ServiceTypeRealizations.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getServiceTypeRealizations_ServiceNS(), this.getServiceNS(),
+                this.getServiceNS_ServiceTypeRealizations(), "serviceNS", null, 0, 1, ServiceTypeRealizations.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE,
+                IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( subDataAttributeEClass, SubDataAttribute.class, "SubDataAttribute", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getSubDataAttribute_DefaultValue(), theXMLTypePackage.getNormalizedString(), "defaultValue",
-                null, 0, 1, SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+                null, 0, 1, SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_IsArray(), theXMLTypePackage.getBoolean(), "isArray", "false", 0, 1,
                 SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_MaxIndexAttribute(), ecorePackage.getEString(), "maxIndexAttribute", null,
-                0, 1, SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+                0, 1, SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_MaxValue(), theXMLTypePackage.getDecimal(), "maxValue", null, 0, 1,
-                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_MinIndex(), theXMLTypePackage.getUnsignedInt(), "minIndex", "0", 0, 1,
                 SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_MinValue(), theXMLTypePackage.getDecimal(), "minValue", null, 0, 1,
-                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getSubDataAttribute_Name(), ecorePackage.getEString(), "name", null, 1, 1,
-                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+        initEAttribute( getSubDataAttribute_Name(), ecorePackage.getEString(), "name", null, 0, 1,
+                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_PresCond(), ecorePackage.getEString(), "presCond", "M", 0, 1,
                 SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_PresCondArgs(), ecorePackage.getEString(), "presCondArgs", null, 0, 1,
-                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_PresCondArgsID(), ecorePackage.getEString(), "presCondArgsID", null, 0, 1,
-                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_SizeAttribute(), ecorePackage.getEString(), "sizeAttribute", null, 0, 1,
-                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_Type(), ecorePackage.getEString(), "type", null, 0, 1,
-                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataAttribute_TypeKind(), this.getAttributeTypeKind(), "typeKind", "BASIC", 0, 1,
                 SubDataAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
+        initEReference( getSubDataAttribute_ConstructedAttribute(), this.getConstructedAttribute(),
+                this.getConstructedAttribute_SubDataAttribute(), "constructedAttribute", null, 0, 1,
+                SubDataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( subDataObjectEClass, SubDataObject.class, "SubDataObject", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
@@ -4425,41 +4925,41 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataObject_MaxIndexAttribute(), ecorePackage.getEString(), "maxIndexAttribute", null, 0,
-                1, SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                1, SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataObject_MinIndex(), theXMLTypePackage.getUnsignedInt(), "minIndex", "0", 0, 1,
                 SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getSubDataObject_Name(), ecorePackage.getEString(), "name", null, 1, 1, SubDataObject.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEAttribute( getSubDataObject_Name(), ecorePackage.getEString(), "name", null, 0, 1, SubDataObject.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataObject_PresCond(), ecorePackage.getEString(), "presCond", "M", 0, 1,
                 SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataObject_PresCondArgs(), ecorePackage.getEString(), "presCondArgs", null, 0, 1,
-                SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataObject_PresCondArgsID(), ecorePackage.getEString(), "presCondArgsID", null, 0, 1,
-                SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataObject_SizeAttribute(), ecorePackage.getEString(), "sizeAttribute", null, 0, 1,
-                SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
-        initEAttribute( getSubDataObject_Type(), ecorePackage.getEString(), "type", null, 1, 1, SubDataObject.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEAttribute( getSubDataObject_Type(), ecorePackage.getEString(), "type", null, 0, 1, SubDataObject.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataObject_UnderlyingType(), ecorePackage.getEString(), "underlyingType", null, 0, 1,
-                SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
         initEAttribute( getSubDataObject_UnderlyingTypeKind(), this.getDefinedAttributeTypeKind(), "underlyingTypeKind",
                 null, 0, 1, SubDataObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID,
                 IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEReference( getSubDataObject_CDC(), this.getCDC(), this.getCDC_SubDataObject(), "cDC", null, 0, 1,
+                SubDataObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( titledClassEClass, TitledClass.class, "TitledClass", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
-        initEAttribute( getTitledClass_TitleID(), ecorePackage.getEString(), "titleID", null, 1, 1, TitledClass.class,
-                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED,
-                IS_ORDERED );
+        initEAttribute( getTitledClass_TitleID(), ecorePackage.getEString(), "titleID", null, 0, 1, TitledClass.class,
+                !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
 
         initEClass( nsdObjectWithVersionAndReleaseEClass, NSDObjectWithVersionAndRelease.class,
                 "NSDObjectWithVersionAndRelease", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
@@ -4467,7 +4967,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 0, 1, NSDObjectWithVersionAndRelease.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE,
                 !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
         initEAttribute( getNSDObjectWithVersionAndRelease_Version(), ecorePackage.getEIntegerObject(), "version", null,
-                1, 1, NSDObjectWithVersionAndRelease.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE,
+                0, 1, NSDObjectWithVersionAndRelease.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE,
                 !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
 
         // Initialize enums and add enum literals
@@ -4599,11 +5099,11 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         addAnnotation( getAppliesToType_PublicationStage(), source,
                 new String[] { "kind", "attribute", "name", "publicationStage" } );
         addAnnotation( getAppliesToType_Revision(), source, new String[] { "kind", "attribute", "name", "revision" } );
-        addAnnotation( dependsOnTypeEClass, source, new String[] { "name", "DependsOn_._type", "kind", "empty" } );
-        addAnnotation( getDependsOnType_Id(), source, new String[] { "kind", "attribute", "name", "id" } );
-        addAnnotation( getDependsOnType_PublicationStage(), source,
+        addAnnotation( dependsOnEClass, source, new String[] { "name", "DependsOn_._type", "kind", "empty" } );
+        addAnnotation( getDependsOn_Id(), source, new String[] { "kind", "attribute", "name", "id" } );
+        addAnnotation( getDependsOn_PublicationStage(), source,
                 new String[] { "kind", "attribute", "name", "publicationStage" } );
-        addAnnotation( getDependsOnType_Revision(), source, new String[] { "kind", "attribute", "name", "revision" } );
+        addAnnotation( getDependsOn_Revision(), source, new String[] { "kind", "attribute", "name", "revision" } );
         addAnnotation( documentRootEClass, source, new String[] { "name", "", "kind", "mixed" } );
         addAnnotation( getDocumentRoot_Mixed(), source, new String[] { "kind", "elementWildcard", "name", ":mixed" } );
         addAnnotation( getDocumentRoot_XMLNSPrefixMap(), source,
@@ -4612,8 +5112,6 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 new String[] { "kind", "attribute", "name", "xsi:schemaLocation" } );
         addAnnotation( getDocumentRoot_ApplicableServiceNS(), source,
                 new String[] { "kind", "element", "name", "ApplicableServiceNS", "namespace", "##targetNamespace" } );
-        addAnnotation( getDocumentRoot_Copyright(), source,
-                new String[] { "kind", "element", "name", "Copyright", "namespace", "##targetNamespace" } );
         addAnnotation( getDocumentRoot_NS(), source,
                 new String[] { "kind", "element", "name", "NS", "namespace", "##targetNamespace" } );
         addAnnotation( getDocumentRoot_NSDoc(), source,
@@ -4931,19 +5429,6 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         addAnnotation( getServiceParameter_Type(), source, new String[] { "kind", "attribute", "name", "type" } );
         addAnnotation( getServiceParameter_TypeKind(), source,
                 new String[] { "kind", "attribute", "name", "typeKind" } );
-        addAnnotation( serviceTypeRealizationEClass, source,
-                new String[] { "name", "tServiceTypeRealization", "kind", "empty" } );
-        addAnnotation( getServiceTypeRealization_Fc(), source, new String[] { "kind", "attribute", "name", "fc" } );
-        addAnnotation( getServiceTypeRealization_Name(), source, new String[] { "kind", "attribute", "name", "name" } );
-        addAnnotation( getServiceTypeRealization_PresCond(), source,
-                new String[] { "kind", "attribute", "name", "presCond" } );
-        addAnnotation( getServiceTypeRealization_PresCondArgs(), source,
-                new String[] { "kind", "attribute", "name", "presCondArgs" } );
-        addAnnotation( getServiceTypeRealization_PresCondArgsID(), source,
-                new String[] { "kind", "attribute", "name", "presCondArgsID" } );
-        addAnnotation( getServiceTypeRealization_Type(), source, new String[] { "kind", "attribute", "name", "type" } );
-        addAnnotation( getServiceTypeRealization_TypeKind(), source,
-                new String[] { "kind", "attribute", "name", "typeKind" } );
         addAnnotation( serviceTypeRealizationsEClass, source,
                 new String[] { "name", "tServiceTypeRealizations", "kind", "elementOnly" } );
         addAnnotation( getServiceTypeRealizations_ServiceTypeRealization(), source, new String[] { "kind", "element",
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionImpl.java
index 9cdf3fa..23a4fcd 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionImpl.java
@@ -22,12 +22,16 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions;
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 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.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -41,6 +45,7 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getDescID <em>Desc ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getTitleID <em>Title ID</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getPresenceConditions <em>Presence Conditions</em>}</li>
  * </ul>
  *
  * @generated
@@ -66,6 +71,15 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
      */
     protected String argument = ARGUMENT_EDEFAULT;
 
+    /**
+     * This is true if the Argument attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean argumentESet;
+
     /**
      * The default value of the '{@link #getDescID() <em>Desc ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -86,6 +100,15 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
      */
     protected String descID = DESC_ID_EDEFAULT;
 
+    /**
+     * This is true if the Desc ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean descIDESet;
+
     /**
      * The default value of the '{@link #getName() <em>Name</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -106,6 +129,15 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * The default value of the '{@link #getTitleID() <em>Title ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -126,6 +158,15 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
      */
     protected String titleID = TITLE_ID_EDEFAULT;
 
+    /**
+     * This is true if the Title ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean titleIDESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -164,8 +205,35 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
     public void setArgument( String newArgument ) {
         String oldArgument = argument;
         argument = newArgument;
+        boolean oldArgumentESet = argumentESet;
+        argumentESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.PRESENCE_CONDITION__ARGUMENT, oldArgument, argument ) );
+                NsdPackage.PRESENCE_CONDITION__ARGUMENT, oldArgument, argument, !oldArgumentESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetArgument() {
+        String oldArgument = argument;
+        boolean oldArgumentESet = argumentESet;
+        argument = ARGUMENT_EDEFAULT;
+        argumentESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.PRESENCE_CONDITION__ARGUMENT, oldArgument, ARGUMENT_EDEFAULT, oldArgumentESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetArgument() {
+        return argumentESet;
     }
 
     /**
@@ -187,8 +255,35 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
     public void setDescID( String newDescID ) {
         String oldDescID = descID;
         descID = newDescID;
+        boolean oldDescIDESet = descIDESet;
+        descIDESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.PRESENCE_CONDITION__DESC_ID, oldDescID, descID ) );
+                NsdPackage.PRESENCE_CONDITION__DESC_ID, oldDescID, descID, !oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDescID() {
+        String oldDescID = descID;
+        boolean oldDescIDESet = descIDESet;
+        descID = DESC_ID_EDEFAULT;
+        descIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.PRESENCE_CONDITION__DESC_ID, oldDescID, DESC_ID_EDEFAULT, oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDescID() {
+        return descIDESet;
     }
 
     /**
@@ -210,8 +305,35 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.PRESENCE_CONDITION__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.PRESENCE_CONDITION__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.PRESENCE_CONDITION__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
     }
 
     /**
@@ -233,8 +355,125 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
     public void setTitleID( String newTitleID ) {
         String oldTitleID = titleID;
         titleID = newTitleID;
+        boolean oldTitleIDESet = titleIDESet;
+        titleIDESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.PRESENCE_CONDITION__TITLE_ID, oldTitleID, titleID ) );
+                NsdPackage.PRESENCE_CONDITION__TITLE_ID, oldTitleID, titleID, !oldTitleIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetTitleID() {
+        String oldTitleID = titleID;
+        boolean oldTitleIDESet = titleIDESet;
+        titleID = TITLE_ID_EDEFAULT;
+        titleIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.PRESENCE_CONDITION__TITLE_ID, oldTitleID, TITLE_ID_EDEFAULT, oldTitleIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetTitleID() {
+        return titleIDESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public PresenceConditions getPresenceConditions() {
+        if( eContainerFeatureID() != NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS ) return null;
+        return ( PresenceConditions ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetPresenceConditions( PresenceConditions newPresenceConditions,
+            NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newPresenceConditions,
+                NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setPresenceConditions( PresenceConditions newPresenceConditions ) {
+        if( newPresenceConditions != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS
+                        && newPresenceConditions != null ) ) {
+            if( EcoreUtil.isAncestor( this, newPresenceConditions ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newPresenceConditions != null ) msgs = ( ( InternalEObject ) newPresenceConditions ).eInverseAdd( this,
+                    NsdPackage.PRESENCE_CONDITIONS__PRESENCE_CONDITION, PresenceConditions.class, msgs );
+            msgs = basicSetPresenceConditions( newPresenceConditions, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS, newPresenceConditions, newPresenceConditions ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetPresenceConditions( ( PresenceConditions ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
+            return basicSetPresenceConditions( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.PRESENCE_CONDITIONS__PRESENCE_CONDITION,
+                    PresenceConditions.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
     }
 
     /**
@@ -253,6 +492,8 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
             return getName();
         case NsdPackage.PRESENCE_CONDITION__TITLE_ID:
             return getTitleID();
+        case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
+            return getPresenceConditions();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -277,6 +518,9 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
         case NsdPackage.PRESENCE_CONDITION__TITLE_ID:
             setTitleID( ( String ) newValue );
             return;
+        case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
+            setPresenceConditions( ( PresenceConditions ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -290,16 +534,19 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.PRESENCE_CONDITION__ARGUMENT:
-            setArgument( ARGUMENT_EDEFAULT );
+            unsetArgument();
             return;
         case NsdPackage.PRESENCE_CONDITION__DESC_ID:
-            setDescID( DESC_ID_EDEFAULT );
+            unsetDescID();
             return;
         case NsdPackage.PRESENCE_CONDITION__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
             return;
         case NsdPackage.PRESENCE_CONDITION__TITLE_ID:
-            setTitleID( TITLE_ID_EDEFAULT );
+            unsetTitleID();
+            return;
+        case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
+            setPresenceConditions( ( PresenceConditions ) null );
             return;
         }
         super.eUnset( featureID );
@@ -314,13 +561,15 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.PRESENCE_CONDITION__ARGUMENT:
-            return ARGUMENT_EDEFAULT == null ? argument != null : !ARGUMENT_EDEFAULT.equals( argument );
+            return isSetArgument();
         case NsdPackage.PRESENCE_CONDITION__DESC_ID:
-            return DESC_ID_EDEFAULT == null ? descID != null : !DESC_ID_EDEFAULT.equals( descID );
+            return isSetDescID();
         case NsdPackage.PRESENCE_CONDITION__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
         case NsdPackage.PRESENCE_CONDITION__TITLE_ID:
-            return TITLE_ID_EDEFAULT == null ? titleID != null : !TITLE_ID_EDEFAULT.equals( titleID );
+            return isSetTitleID();
+        case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
+            return getPresenceConditions() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -336,13 +585,25 @@ public class PresenceConditionImpl extends MinimalEObjectImpl.Container implemen
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (argument: " );
-        result.append( argument );
+        if( argumentESet )
+            result.append( argument );
+        else
+            result.append( "<unset>" );
         result.append( ", descID: " );
-        result.append( descID );
+        if( descIDESet )
+            result.append( descID );
+        else
+            result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ", titleID: " );
-        result.append( titleID );
+        if( titleIDESet )
+            result.append( titleID );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionsImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionsImpl.java
index 46a5a9a..a0f078f 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionsImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionsImpl.java
@@ -19,12 +19,15 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS;
 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;
@@ -32,9 +35,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -46,6 +50,8 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionsImpl#getPresenceCondition <em>Presence Condition</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionsImpl#getNS <em>NS</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionsImpl#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -88,12 +94,141 @@ public class PresenceConditionsImpl extends MinimalEObjectImpl.Container impleme
     @Override
     public EList< PresenceCondition > getPresenceCondition() {
         if( presenceCondition == null ) {
-            presenceCondition = new EObjectContainmentEList< PresenceCondition >( PresenceCondition.class, this,
-                    NsdPackage.PRESENCE_CONDITIONS__PRESENCE_CONDITION );
+            presenceCondition = new EObjectContainmentWithInverseEList.Unsettable< PresenceCondition >(
+                    PresenceCondition.class, this, NsdPackage.PRESENCE_CONDITIONS__PRESENCE_CONDITION,
+                    NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS );
         }
         return presenceCondition;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresenceCondition() {
+        if( presenceCondition != null ) ( ( InternalEList.Unsettable< ? > ) presenceCondition ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresenceCondition() {
+        return presenceCondition != null && ( ( InternalEList.Unsettable< ? > ) presenceCondition ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NS getNS() {
+        if( eContainerFeatureID() != NsdPackage.PRESENCE_CONDITIONS__NS ) return null;
+        return ( NS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetNS( NS newNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newNS, NsdPackage.PRESENCE_CONDITIONS__NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setNS( NS newNS ) {
+        if( newNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.PRESENCE_CONDITIONS__NS && newNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newNS != null ) msgs = ( ( InternalEObject ) newNS ).eInverseAdd( this,
+                    NsdPackage.NS__PRESENCE_CONDITIONS, NS.class, msgs );
+            msgs = basicSetNS( newNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.PRESENCE_CONDITIONS__NS, newNS, newNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceNS getServiceNS() {
+        if( eContainerFeatureID() != NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS ) return null;
+        return ( ServiceNS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceNS( ServiceNS newServiceNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceNS, NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceNS( ServiceNS newServiceNS ) {
+        if( newServiceNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS && newServiceNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceNS != null ) msgs = ( ( InternalEObject ) newServiceNS ).eInverseAdd( this,
+                    NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS, ServiceNS.class, msgs );
+            msgs = basicSetServiceNS( newServiceNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS, newServiceNS, newServiceNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.PRESENCE_CONDITIONS__PRESENCE_CONDITION:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getPresenceCondition() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITIONS__NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetNS( ( NS ) otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceNS( ( ServiceNS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -104,10 +239,31 @@ public class PresenceConditionsImpl extends MinimalEObjectImpl.Container impleme
         switch( featureID ) {
         case NsdPackage.PRESENCE_CONDITIONS__PRESENCE_CONDITION:
             return ( ( InternalEList< ? > ) getPresenceCondition() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITIONS__NS:
+            return basicSetNS( null, msgs );
+        case NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS:
+            return basicSetServiceNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.PRESENCE_CONDITIONS__NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.NS__PRESENCE_CONDITIONS, NS.class, msgs );
+        case NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS,
+                    ServiceNS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -118,6 +274,10 @@ public class PresenceConditionsImpl extends MinimalEObjectImpl.Container impleme
         switch( featureID ) {
         case NsdPackage.PRESENCE_CONDITIONS__PRESENCE_CONDITION:
             return getPresenceCondition();
+        case NsdPackage.PRESENCE_CONDITIONS__NS:
+            return getNS();
+        case NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS:
+            return getServiceNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -135,6 +295,12 @@ public class PresenceConditionsImpl extends MinimalEObjectImpl.Container impleme
             getPresenceCondition().clear();
             getPresenceCondition().addAll( ( Collection< ? extends PresenceCondition > ) newValue );
             return;
+        case NsdPackage.PRESENCE_CONDITIONS__NS:
+            setNS( ( NS ) newValue );
+            return;
+        case NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -148,7 +314,13 @@ public class PresenceConditionsImpl extends MinimalEObjectImpl.Container impleme
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.PRESENCE_CONDITIONS__PRESENCE_CONDITION:
-            getPresenceCondition().clear();
+            unsetPresenceCondition();
+            return;
+        case NsdPackage.PRESENCE_CONDITIONS__NS:
+            setNS( ( NS ) null );
+            return;
+        case NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -163,7 +335,11 @@ public class PresenceConditionsImpl extends MinimalEObjectImpl.Container impleme
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.PRESENCE_CONDITIONS__PRESENCE_CONDITION:
-            return presenceCondition != null && !presenceCondition.isEmpty();
+            return isSetPresenceCondition();
+        case NsdPackage.PRESENCE_CONDITIONS__NS:
+            return getNS() != null;
+        case NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS:
+            return getServiceNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceCDCImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceCDCImpl.java
index e7d488c..baeeb0c 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceCDCImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceCDCImpl.java
@@ -21,6 +21,7 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute;
 
 import java.util.Collection;
@@ -35,8 +36,8 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -50,6 +51,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceCDCImpl#getServiceDataAttribute <em>Service Data Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceCDCImpl#getCdc <em>Cdc</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceCDCImpl#getVariant <em>Variant</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceCDCImpl#getServiceCDCs <em>Service CD Cs</em>}</li>
  * </ul>
  *
  * @generated
@@ -85,6 +87,15 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
      */
     protected String cdc = CDC_EDEFAULT;
 
+    /**
+     * This is true if the Cdc attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean cdcESet;
+
     /**
      * The default value of the '{@link #getVariant() <em>Variant</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -105,6 +116,15 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
      */
     protected String variant = VARIANT_EDEFAULT;
 
+    /**
+     * This is true if the Variant attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean variantESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -132,12 +152,33 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
     @Override
     public EList< ServiceDataAttribute > getServiceDataAttribute() {
         if( serviceDataAttribute == null ) {
-            serviceDataAttribute = new EObjectContainmentEList< ServiceDataAttribute >( ServiceDataAttribute.class,
-                    this, NsdPackage.SERVICE_CDC__SERVICE_DATA_ATTRIBUTE );
+            serviceDataAttribute = new EObjectContainmentWithInverseEList.Unsettable< ServiceDataAttribute >(
+                    ServiceDataAttribute.class, this, NsdPackage.SERVICE_CDC__SERVICE_DATA_ATTRIBUTE,
+                    NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC );
         }
         return serviceDataAttribute;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetServiceDataAttribute() {
+        if( serviceDataAttribute != null ) ( ( InternalEList.Unsettable< ? > ) serviceDataAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetServiceDataAttribute() {
+        return serviceDataAttribute != null && ( ( InternalEList.Unsettable< ? > ) serviceDataAttribute ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -157,8 +198,35 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
     public void setCdc( String newCdc ) {
         String oldCdc = cdc;
         cdc = newCdc;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_CDC__CDC, oldCdc, cdc ) );
+        boolean oldCdcESet = cdcESet;
+        cdcESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_CDC__CDC, oldCdc, cdc, !oldCdcESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetCdc() {
+        String oldCdc = cdc;
+        boolean oldCdcESet = cdcESet;
+        cdc = CDC_EDEFAULT;
+        cdcESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_CDC__CDC, oldCdc, CDC_EDEFAULT, oldCdcESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetCdc() {
+        return cdcESet;
     }
 
     /**
@@ -180,8 +248,97 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
     public void setVariant( String newVariant ) {
         String oldVariant = variant;
         variant = newVariant;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_CDC__VARIANT, oldVariant, variant ) );
+        boolean oldVariantESet = variantESet;
+        variantESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_CDC__VARIANT, oldVariant, variant, !oldVariantESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetVariant() {
+        String oldVariant = variant;
+        boolean oldVariantESet = variantESet;
+        variant = VARIANT_EDEFAULT;
+        variantESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_CDC__VARIANT, oldVariant, VARIANT_EDEFAULT, oldVariantESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetVariant() {
+        return variantESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceCDCs getServiceCDCs() {
+        if( eContainerFeatureID() != NsdPackage.SERVICE_CDC__SERVICE_CD_CS ) return null;
+        return ( ServiceCDCs ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceCDCs( ServiceCDCs newServiceCDCs, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceCDCs, NsdPackage.SERVICE_CDC__SERVICE_CD_CS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceCDCs( ServiceCDCs newServiceCDCs ) {
+        if( newServiceCDCs != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SERVICE_CDC__SERVICE_CD_CS && newServiceCDCs != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceCDCs ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceCDCs != null ) msgs = ( ( InternalEObject ) newServiceCDCs ).eInverseAdd( this,
+                    NsdPackage.SERVICE_CD_CS__SERVICE_CDC, ServiceCDCs.class, msgs );
+            msgs = basicSetServiceCDCs( newServiceCDCs, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_CDC__SERVICE_CD_CS, newServiceCDCs, newServiceCDCs ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_CDC__SERVICE_DATA_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getServiceDataAttribute() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.SERVICE_CDC__SERVICE_CD_CS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceCDCs( ( ServiceCDCs ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -194,10 +351,27 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
         switch( featureID ) {
         case NsdPackage.SERVICE_CDC__SERVICE_DATA_ATTRIBUTE:
             return ( ( InternalEList< ? > ) getServiceDataAttribute() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.SERVICE_CDC__SERVICE_CD_CS:
+            return basicSetServiceCDCs( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SERVICE_CDC__SERVICE_CD_CS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.SERVICE_CD_CS__SERVICE_CDC, ServiceCDCs.class,
+                    msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -212,6 +386,8 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
             return getCdc();
         case NsdPackage.SERVICE_CDC__VARIANT:
             return getVariant();
+        case NsdPackage.SERVICE_CDC__SERVICE_CD_CS:
+            return getServiceCDCs();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -235,6 +411,9 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
         case NsdPackage.SERVICE_CDC__VARIANT:
             setVariant( ( String ) newValue );
             return;
+        case NsdPackage.SERVICE_CDC__SERVICE_CD_CS:
+            setServiceCDCs( ( ServiceCDCs ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -248,13 +427,16 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_CDC__SERVICE_DATA_ATTRIBUTE:
-            getServiceDataAttribute().clear();
+            unsetServiceDataAttribute();
             return;
         case NsdPackage.SERVICE_CDC__CDC:
-            setCdc( CDC_EDEFAULT );
+            unsetCdc();
             return;
         case NsdPackage.SERVICE_CDC__VARIANT:
-            setVariant( VARIANT_EDEFAULT );
+            unsetVariant();
+            return;
+        case NsdPackage.SERVICE_CDC__SERVICE_CD_CS:
+            setServiceCDCs( ( ServiceCDCs ) null );
             return;
         }
         super.eUnset( featureID );
@@ -269,11 +451,13 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_CDC__SERVICE_DATA_ATTRIBUTE:
-            return serviceDataAttribute != null && !serviceDataAttribute.isEmpty();
+            return isSetServiceDataAttribute();
         case NsdPackage.SERVICE_CDC__CDC:
-            return CDC_EDEFAULT == null ? cdc != null : !CDC_EDEFAULT.equals( cdc );
+            return isSetCdc();
         case NsdPackage.SERVICE_CDC__VARIANT:
-            return VARIANT_EDEFAULT == null ? variant != null : !VARIANT_EDEFAULT.equals( variant );
+            return isSetVariant();
+        case NsdPackage.SERVICE_CDC__SERVICE_CD_CS:
+            return getServiceCDCs() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -289,9 +473,15 @@ public class ServiceCDCImpl extends MinimalEObjectImpl.Container implements Serv
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (cdc: " );
-        result.append( cdc );
+        if( cdcESet )
+            result.append( cdc );
+        else
+            result.append( "<unset>" );
         result.append( ", variant: " );
-        result.append( variant );
+        if( variantESet )
+            result.append( variant );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceCDCsImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceCDCsImpl.java
index b885f5e..7a781a5 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceCDCsImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceCDCsImpl.java
@@ -23,8 +23,10 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDCs;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS;
 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;
@@ -32,9 +34,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -46,6 +49,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceCDCsImpl#getServiceCDC <em>Service CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceCDCsImpl#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -88,12 +92,94 @@ public class ServiceCDCsImpl extends MinimalEObjectImpl.Container implements Ser
     @Override
     public EList< ServiceCDC > getServiceCDC() {
         if( serviceCDC == null ) {
-            serviceCDC = new EObjectContainmentEList< ServiceCDC >( ServiceCDC.class, this,
-                    NsdPackage.SERVICE_CD_CS__SERVICE_CDC );
+            serviceCDC = new EObjectContainmentWithInverseEList.Unsettable< ServiceCDC >( ServiceCDC.class, this,
+                    NsdPackage.SERVICE_CD_CS__SERVICE_CDC, NsdPackage.SERVICE_CDC__SERVICE_CD_CS );
         }
         return serviceCDC;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetServiceCDC() {
+        if( serviceCDC != null ) ( ( InternalEList.Unsettable< ? > ) serviceCDC ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetServiceCDC() {
+        return serviceCDC != null && ( ( InternalEList.Unsettable< ? > ) serviceCDC ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceNS getServiceNS() {
+        if( eContainerFeatureID() != NsdPackage.SERVICE_CD_CS__SERVICE_NS ) return null;
+        return ( ServiceNS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceNS( ServiceNS newServiceNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceNS, NsdPackage.SERVICE_CD_CS__SERVICE_NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceNS( ServiceNS newServiceNS ) {
+        if( newServiceNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SERVICE_CD_CS__SERVICE_NS && newServiceNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceNS != null ) msgs = ( ( InternalEObject ) newServiceNS ).eInverseAdd( this,
+                    NsdPackage.SERVICE_NS__SERVICE_CD_CS, ServiceNS.class, msgs );
+            msgs = basicSetServiceNS( newServiceNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_CD_CS__SERVICE_NS, newServiceNS, newServiceNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_CD_CS__SERVICE_CDC:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getServiceCDC() ).basicAdd( otherEnd,
+                    msgs );
+        case NsdPackage.SERVICE_CD_CS__SERVICE_NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceNS( ( ServiceNS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -104,10 +190,27 @@ public class ServiceCDCsImpl extends MinimalEObjectImpl.Container implements Ser
         switch( featureID ) {
         case NsdPackage.SERVICE_CD_CS__SERVICE_CDC:
             return ( ( InternalEList< ? > ) getServiceCDC() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.SERVICE_CD_CS__SERVICE_NS:
+            return basicSetServiceNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SERVICE_CD_CS__SERVICE_NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.SERVICE_NS__SERVICE_CD_CS, ServiceNS.class,
+                    msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -118,6 +221,8 @@ public class ServiceCDCsImpl extends MinimalEObjectImpl.Container implements Ser
         switch( featureID ) {
         case NsdPackage.SERVICE_CD_CS__SERVICE_CDC:
             return getServiceCDC();
+        case NsdPackage.SERVICE_CD_CS__SERVICE_NS:
+            return getServiceNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -135,6 +240,9 @@ public class ServiceCDCsImpl extends MinimalEObjectImpl.Container implements Ser
             getServiceCDC().clear();
             getServiceCDC().addAll( ( Collection< ? extends ServiceCDC > ) newValue );
             return;
+        case NsdPackage.SERVICE_CD_CS__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -148,7 +256,10 @@ public class ServiceCDCsImpl extends MinimalEObjectImpl.Container implements Ser
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_CD_CS__SERVICE_CDC:
-            getServiceCDC().clear();
+            unsetServiceCDC();
+            return;
+        case NsdPackage.SERVICE_CD_CS__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -163,7 +274,9 @@ public class ServiceCDCsImpl extends MinimalEObjectImpl.Container implements Ser
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_CD_CS__SERVICE_CDC:
-            return serviceCDC != null && !serviceCDC.isEmpty();
+            return isSetServiceCDC();
+        case NsdPackage.SERVICE_CD_CS__SERVICE_NS:
+            return getServiceNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceConstructedAttributeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceConstructedAttributeImpl.java
index ea0e356..cf32dd2 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceConstructedAttributeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceConstructedAttributeImpl.java
@@ -22,11 +22,15 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes;
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -37,6 +41,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceConstructedAttributeImpl#isTypeKindParameterized <em>Type Kind Parameterized</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceConstructedAttributeImpl#getServiceConstructedAttribute <em>Service Constructed Attribute</em>}</li>
  * </ul>
  *
  * @generated
@@ -142,6 +147,101 @@ public class ServiceConstructedAttributeImpl extends ConstructedAttributeImpl im
         return typeKindParameterizedESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceConstructedAttributes getServiceConstructedAttribute() {
+        if( eContainerFeatureID() != NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE )
+            return null;
+        return ( ServiceConstructedAttributes ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceConstructedAttribute(
+            ServiceConstructedAttributes newServiceConstructedAttribute, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceConstructedAttribute,
+                NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceConstructedAttribute( ServiceConstructedAttributes newServiceConstructedAttribute ) {
+        if( newServiceConstructedAttribute != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE
+                        && newServiceConstructedAttribute != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceConstructedAttribute ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) newServiceConstructedAttribute ).eInverseAdd( this,
+                        NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE,
+                        ServiceConstructedAttributes.class, msgs );
+            msgs = basicSetServiceConstructedAttribute( newServiceConstructedAttribute, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE, newServiceConstructedAttribute,
+                newServiceConstructedAttribute ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceConstructedAttribute( ( ServiceConstructedAttributes ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE:
+            return basicSetServiceConstructedAttribute( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE:
+            return eInternalContainer().eInverseRemove( this,
+                    NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE,
+                    ServiceConstructedAttributes.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -152,6 +252,8 @@ public class ServiceConstructedAttributeImpl extends ConstructedAttributeImpl im
         switch( featureID ) {
         case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__TYPE_KIND_PARAMETERIZED:
             return isTypeKindParameterized();
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE:
+            return getServiceConstructedAttribute();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -167,6 +269,9 @@ public class ServiceConstructedAttributeImpl extends ConstructedAttributeImpl im
         case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__TYPE_KIND_PARAMETERIZED:
             setTypeKindParameterized( ( Boolean ) newValue );
             return;
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE:
+            setServiceConstructedAttribute( ( ServiceConstructedAttributes ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -182,6 +287,9 @@ public class ServiceConstructedAttributeImpl extends ConstructedAttributeImpl im
         case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__TYPE_KIND_PARAMETERIZED:
             unsetTypeKindParameterized();
             return;
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE:
+            setServiceConstructedAttribute( ( ServiceConstructedAttributes ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -196,6 +304,8 @@ public class ServiceConstructedAttributeImpl extends ConstructedAttributeImpl im
         switch( featureID ) {
         case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__TYPE_KIND_PARAMETERIZED:
             return isSetTypeKindParameterized();
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE:
+            return getServiceConstructedAttribute() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceConstructedAttributesImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceConstructedAttributesImpl.java
index 74cce02..705bbd2 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceConstructedAttributesImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceConstructedAttributesImpl.java
@@ -23,8 +23,10 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceConstructedAttributes;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS;
 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;
@@ -32,9 +34,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -46,6 +49,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceConstructedAttributesImpl#getServiceConstructedAttribute <em>Service Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceConstructedAttributesImpl#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -89,13 +93,100 @@ public class ServiceConstructedAttributesImpl extends MinimalEObjectImpl.Contain
     @Override
     public EList< ServiceConstructedAttribute > getServiceConstructedAttribute() {
         if( serviceConstructedAttribute == null ) {
-            serviceConstructedAttribute = new EObjectContainmentEList< ServiceConstructedAttribute >(
+            serviceConstructedAttribute = new EObjectContainmentWithInverseEList.Unsettable< ServiceConstructedAttribute >(
                     ServiceConstructedAttribute.class, this,
-                    NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE );
+                    NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE,
+                    NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTE__SERVICE_CONSTRUCTED_ATTRIBUTE );
         }
         return serviceConstructedAttribute;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetServiceConstructedAttribute() {
+        if( serviceConstructedAttribute != null )
+            ( ( InternalEList.Unsettable< ? > ) serviceConstructedAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetServiceConstructedAttribute() {
+        return serviceConstructedAttribute != null
+                && ( ( InternalEList.Unsettable< ? > ) serviceConstructedAttribute ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceNS getServiceNS() {
+        if( eContainerFeatureID() != NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS ) return null;
+        return ( ServiceNS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceNS( ServiceNS newServiceNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceNS,
+                NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceNS( ServiceNS newServiceNS ) {
+        if( newServiceNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS
+                        && newServiceNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceNS != null ) msgs = ( ( InternalEObject ) newServiceNS ).eInverseAdd( this,
+                    NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES, ServiceNS.class, msgs );
+            msgs = basicSetServiceNS( newServiceNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS, newServiceNS, newServiceNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getServiceConstructedAttribute() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceNS( ( ServiceNS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -106,10 +197,27 @@ public class ServiceConstructedAttributesImpl extends MinimalEObjectImpl.Contain
         switch( featureID ) {
         case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE:
             return ( ( InternalEList< ? > ) getServiceConstructedAttribute() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS:
+            return basicSetServiceNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES,
+                    ServiceNS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -120,6 +228,8 @@ public class ServiceConstructedAttributesImpl extends MinimalEObjectImpl.Contain
         switch( featureID ) {
         case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE:
             return getServiceConstructedAttribute();
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS:
+            return getServiceNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -137,6 +247,9 @@ public class ServiceConstructedAttributesImpl extends MinimalEObjectImpl.Contain
             getServiceConstructedAttribute().clear();
             getServiceConstructedAttribute().addAll( ( Collection< ? extends ServiceConstructedAttribute > ) newValue );
             return;
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -150,7 +263,10 @@ public class ServiceConstructedAttributesImpl extends MinimalEObjectImpl.Contain
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE:
-            getServiceConstructedAttribute().clear();
+            unsetServiceConstructedAttribute();
+            return;
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -165,7 +281,9 @@ public class ServiceConstructedAttributesImpl extends MinimalEObjectImpl.Contain
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_CONSTRUCTED_ATTRIBUTE:
-            return serviceConstructedAttribute != null && !serviceConstructedAttribute.isEmpty();
+            return isSetServiceConstructedAttribute();
+        case NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS:
+            return getServiceNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceDataAttributeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceDataAttributeImpl.java
index f3b63c5..676c243 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceDataAttributeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceDataAttributeImpl.java
@@ -22,15 +22,19 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceDataAttribute;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.Enumerator;
 
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -49,6 +53,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceDataAttributeImpl#getTypeKind <em>Type Kind</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceDataAttributeImpl#getUnderlyingType <em>Underlying Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceDataAttributeImpl#getUnderlyingTypeKind <em>Underlying Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceDataAttributeImpl#getServiceCDC <em>Service CDC</em>}</li>
  * </ul>
  *
  * @generated
@@ -74,6 +79,15 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
      */
     protected String fc = FC_EDEFAULT;
 
+    /**
+     * This is true if the Fc attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean fcESet;
+
     /**
      * The default value of the '{@link #getName() <em>Name</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -94,6 +108,15 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * The default value of the '{@link #getPresCond() <em>Pres Cond</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -143,6 +166,15 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
      */
     protected String presCondArgs = PRES_COND_ARGS_EDEFAULT;
 
+    /**
+     * This is true if the Pres Cond Args attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presCondArgsESet;
+
     /**
      * The default value of the '{@link #getPresCondArgsID() <em>Pres Cond Args ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -163,6 +195,15 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
      */
     protected String presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
 
+    /**
+     * This is true if the Pres Cond Args ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presCondArgsIDESet;
+
     /**
      * The default value of the '{@link #getType() <em>Type</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -183,6 +224,15 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
      */
     protected String type = TYPE_EDEFAULT;
 
+    /**
+     * This is true if the Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean typeESet;
+
     /**
      * The default value of the '{@link #getTypeKind() <em>Type Kind</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -233,6 +283,15 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
      */
     protected String underlyingType = UNDERLYING_TYPE_EDEFAULT;
 
+    /**
+     * This is true if the Underlying Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean underlyingTypeESet;
+
     /**
      * The default value of the '{@link #getUnderlyingTypeKind() <em>Underlying Type Kind</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -300,8 +359,35 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
     public void setFc( String newFc ) {
         String oldFc = fc;
         fc = newFc;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_DATA_ATTRIBUTE__FC, oldFc, fc ) );
+        boolean oldFcESet = fcESet;
+        fcESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_DATA_ATTRIBUTE__FC, oldFc, fc, !oldFcESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetFc() {
+        String oldFc = fc;
+        boolean oldFcESet = fcESet;
+        fc = FC_EDEFAULT;
+        fcESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_DATA_ATTRIBUTE__FC, oldFc, FC_EDEFAULT, oldFcESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetFc() {
+        return fcESet;
     }
 
     /**
@@ -323,8 +409,35 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
+        boolean oldNameESet = nameESet;
+        nameESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_DATA_ATTRIBUTE__NAME, oldName, name ) );
+                NsdPackage.SERVICE_DATA_ATTRIBUTE__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_DATA_ATTRIBUTE__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
     }
 
     /**
@@ -396,8 +509,37 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
     public void setPresCondArgs( String newPresCondArgs ) {
         String oldPresCondArgs = presCondArgs;
         presCondArgs = newPresCondArgs;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND_ARGS, oldPresCondArgs, presCondArgs ) );
+        boolean oldPresCondArgsESet = presCondArgsESet;
+        presCondArgsESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND_ARGS,
+                    oldPresCondArgs, presCondArgs, !oldPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresCondArgs() {
+        String oldPresCondArgs = presCondArgs;
+        boolean oldPresCondArgsESet = presCondArgsESet;
+        presCondArgs = PRES_COND_ARGS_EDEFAULT;
+        presCondArgsESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND_ARGS,
+                    oldPresCondArgs, PRES_COND_ARGS_EDEFAULT, oldPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresCondArgs() {
+        return presCondArgsESet;
     }
 
     /**
@@ -419,8 +561,37 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
     public void setPresCondArgsID( String newPresCondArgsID ) {
         String oldPresCondArgsID = presCondArgsID;
         presCondArgsID = newPresCondArgsID;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND_ARGS_ID, oldPresCondArgsID, presCondArgsID ) );
+        boolean oldPresCondArgsIDESet = presCondArgsIDESet;
+        presCondArgsIDESet = true;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND_ARGS_ID,
+                        oldPresCondArgsID, presCondArgsID, !oldPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresCondArgsID() {
+        String oldPresCondArgsID = presCondArgsID;
+        boolean oldPresCondArgsIDESet = presCondArgsIDESet;
+        presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
+        presCondArgsIDESet = false;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.UNSET, NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND_ARGS_ID,
+                        oldPresCondArgsID, PRES_COND_ARGS_ID_EDEFAULT, oldPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresCondArgsID() {
+        return presCondArgsIDESet;
     }
 
     /**
@@ -442,8 +613,35 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
     public void setType( String newType ) {
         String oldType = type;
         type = newType;
+        boolean oldTypeESet = typeESet;
+        typeESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE, oldType, type ) );
+                NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE, oldType, type, !oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetType() {
+        String oldType = type;
+        boolean oldTypeESet = typeESet;
+        type = TYPE_EDEFAULT;
+        typeESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE, oldType, TYPE_EDEFAULT, oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetType() {
+        return typeESet;
     }
 
     /**
@@ -515,8 +713,37 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
     public void setUnderlyingType( String newUnderlyingType ) {
         String oldUnderlyingType = underlyingType;
         underlyingType = newUnderlyingType;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE, oldUnderlyingType, underlyingType ) );
+        boolean oldUnderlyingTypeESet = underlyingTypeESet;
+        underlyingTypeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE,
+                    oldUnderlyingType, underlyingType, !oldUnderlyingTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetUnderlyingType() {
+        String oldUnderlyingType = underlyingType;
+        boolean oldUnderlyingTypeESet = underlyingTypeESet;
+        underlyingType = UNDERLYING_TYPE_EDEFAULT;
+        underlyingTypeESet = false;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.UNSET, NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE,
+                        oldUnderlyingType, UNDERLYING_TYPE_EDEFAULT, oldUnderlyingTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetUnderlyingType() {
+        return underlyingTypeESet;
     }
 
     /**
@@ -571,6 +798,95 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
         return underlyingTypeKindESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceCDC getServiceCDC() {
+        if( eContainerFeatureID() != NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC ) return null;
+        return ( ServiceCDC ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceCDC( ServiceCDC newServiceCDC, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceCDC, NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC,
+                msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceCDC( ServiceCDC newServiceCDC ) {
+        if( newServiceCDC != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC
+                        && newServiceCDC != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceCDC ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceCDC != null ) msgs = ( ( InternalEObject ) newServiceCDC ).eInverseAdd( this,
+                    NsdPackage.SERVICE_CDC__SERVICE_DATA_ATTRIBUTE, ServiceCDC.class, msgs );
+            msgs = basicSetServiceCDC( newServiceCDC, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC, newServiceCDC, newServiceCDC ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceCDC( ( ServiceCDC ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC:
+            return basicSetServiceCDC( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.SERVICE_CDC__SERVICE_DATA_ATTRIBUTE,
+                    ServiceCDC.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -597,6 +913,8 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
             return getUnderlyingType();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND:
             return getUnderlyingTypeKind();
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC:
+            return getServiceCDC();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -636,6 +954,9 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND:
             setUnderlyingTypeKind( ( DefinedAttributeTypeKind ) newValue );
             return;
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC:
+            setServiceCDC( ( ServiceCDC ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -649,32 +970,35 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__FC:
-            setFc( FC_EDEFAULT );
+            unsetFc();
             return;
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
             return;
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND:
             unsetPresCond();
             return;
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND_ARGS:
-            setPresCondArgs( PRES_COND_ARGS_EDEFAULT );
+            unsetPresCondArgs();
             return;
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND_ARGS_ID:
-            setPresCondArgsID( PRES_COND_ARGS_ID_EDEFAULT );
+            unsetPresCondArgsID();
             return;
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE:
-            setType( TYPE_EDEFAULT );
+            unsetType();
             return;
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE_KIND:
             unsetTypeKind();
             return;
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE:
-            setUnderlyingType( UNDERLYING_TYPE_EDEFAULT );
+            unsetUnderlyingType();
             return;
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND:
             unsetUnderlyingTypeKind();
             return;
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC:
+            setServiceCDC( ( ServiceCDC ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -688,26 +1012,25 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__FC:
-            return FC_EDEFAULT == null ? fc != null : !FC_EDEFAULT.equals( fc );
+            return isSetFc();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND:
             return isSetPresCond();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND_ARGS:
-            return PRES_COND_ARGS_EDEFAULT == null ? presCondArgs != null
-                    : !PRES_COND_ARGS_EDEFAULT.equals( presCondArgs );
+            return isSetPresCondArgs();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__PRES_COND_ARGS_ID:
-            return PRES_COND_ARGS_ID_EDEFAULT == null ? presCondArgsID != null
-                    : !PRES_COND_ARGS_ID_EDEFAULT.equals( presCondArgsID );
+            return isSetPresCondArgsID();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE:
-            return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals( type );
+            return isSetType();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE_KIND:
             return isSetTypeKind();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE:
-            return UNDERLYING_TYPE_EDEFAULT == null ? underlyingType != null
-                    : !UNDERLYING_TYPE_EDEFAULT.equals( underlyingType );
+            return isSetUnderlyingType();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND:
             return isSetUnderlyingTypeKind();
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__SERVICE_CDC:
+            return getServiceCDC() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -723,27 +1046,45 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (fc: " );
-        result.append( fc );
+        if( fcESet )
+            result.append( fc );
+        else
+            result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ", presCond: " );
         if( presCondESet )
             result.append( presCond );
         else
             result.append( "<unset>" );
         result.append( ", presCondArgs: " );
-        result.append( presCondArgs );
+        if( presCondArgsESet )
+            result.append( presCondArgs );
+        else
+            result.append( "<unset>" );
         result.append( ", presCondArgsID: " );
-        result.append( presCondArgsID );
+        if( presCondArgsIDESet )
+            result.append( presCondArgsID );
+        else
+            result.append( "<unset>" );
         result.append( ", type: " );
-        result.append( type );
+        if( typeESet )
+            result.append( type );
+        else
+            result.append( "<unset>" );
         result.append( ", typeKind: " );
         if( typeKindESet )
             result.append( typeKind );
         else
             result.append( "<unset>" );
         result.append( ", underlyingType: " );
-        result.append( underlyingType );
+        if( underlyingTypeESet )
+            result.append( underlyingType );
+        else
+            result.append( "<unset>" );
         result.append( ", underlyingTypeKind: " );
         if( underlyingTypeKindESet )
             result.append( underlyingTypeKind );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceNSImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceNSImpl.java
index 75650fd..3fdc7ff 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceNSImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceNSImpl.java
@@ -137,6 +137,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected Changes changes;
 
+    /**
+     * This is true if the Changes containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean changesESet;
+
     /**
      * The cached value of the '{@link #getFunctionalConstraints() <em>Functional Constraints</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -147,6 +156,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected FunctionalConstraints functionalConstraints;
 
+    /**
+     * This is true if the Functional Constraints containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean functionalConstraintsESet;
+
     /**
      * The cached value of the '{@link #getPresenceConditions() <em>Presence Conditions</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -157,6 +175,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected PresenceConditions presenceConditions;
 
+    /**
+     * This is true if the Presence Conditions containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presenceConditionsESet;
+
     /**
      * The cached value of the '{@link #getAbbreviations() <em>Abbreviations</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -167,6 +194,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected Abbreviations abbreviations;
 
+    /**
+     * This is true if the Abbreviations containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean abbreviationsESet;
+
     /**
      * The cached value of the '{@link #getServiceTypeRealizations() <em>Service Type Realizations</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -177,6 +213,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected ServiceTypeRealizations serviceTypeRealizations;
 
+    /**
+     * This is true if the Service Type Realizations containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean serviceTypeRealizationsESet;
+
     /**
      * The cached value of the '{@link #getServiceConstructedAttributes() <em>Service Constructed Attributes</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -187,6 +232,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected ServiceConstructedAttributes serviceConstructedAttributes;
 
+    /**
+     * This is true if the Service Constructed Attributes containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean serviceConstructedAttributesESet;
+
     /**
      * The cached value of the '{@link #getServiceCDCs() <em>Service CD Cs</em>}' containment reference.
      * <!-- begin-user-doc -->
@@ -197,6 +251,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected ServiceCDCs serviceCDCs;
 
+    /**
+     * This is true if the Service CD Cs containment reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean serviceCDCsESet;
+
     /**
      * The default value of the '{@link #getDescID() <em>Desc ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -217,6 +280,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected String descID = DESC_ID_EDEFAULT;
 
+    /**
+     * This is true if the Desc ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean descIDESet;
+
     /**
      * The default value of the '{@link #getId() <em>Id</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -237,6 +309,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected String id = ID_EDEFAULT;
 
+    /**
+     * This is true if the Id attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean idESet;
+
     /**
      * The default value of the '{@link #getPublicationStage() <em>Publication Stage</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -315,6 +396,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected XMLGregorianCalendar umlDate = UML_DATE_EDEFAULT;
 
+    /**
+     * This is true if the Uml Date attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean umlDateESet;
+
     /**
      * The default value of the '{@link #getUmlVersion() <em>Uml Version</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -335,6 +425,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
      */
     protected String umlVersion = UML_VERSION_EDEFAULT;
 
+    /**
+     * This is true if the Uml Version attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean umlVersionESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -372,9 +471,11 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
     public NotificationChain basicSetChanges( Changes newChanges, NotificationChain msgs ) {
         Changes oldChanges = changes;
         changes = newChanges;
+        boolean oldChangesESet = changesESet;
+        changesESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.SERVICE_NS__CHANGES, oldChanges, newChanges );
+                    NsdPackage.SERVICE_NS__CHANGES, oldChanges, newChanges, !oldChangesESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -393,14 +494,71 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
         if( newChanges != changes ) {
             NotificationChain msgs = null;
             if( changes != null ) msgs = ( ( InternalEObject ) changes ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__CHANGES, null, msgs );
+                    NsdPackage.CHANGES__SERVICE_NS, Changes.class, msgs );
             if( newChanges != null ) msgs = ( ( InternalEObject ) newChanges ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__CHANGES, null, msgs );
+                    NsdPackage.CHANGES__SERVICE_NS, Changes.class, msgs );
             msgs = basicSetChanges( newChanges, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_NS__CHANGES, newChanges, newChanges ) );
+        else {
+            boolean oldChangesESet = changesESet;
+            changesESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SERVICE_NS__CHANGES, newChanges, newChanges, !oldChangesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetChanges( NotificationChain msgs ) {
+        Changes oldChanges = changes;
+        changes = null;
+        boolean oldChangesESet = changesESet;
+        changesESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__CHANGES, oldChanges, null, oldChangesESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetChanges() {
+        if( changes != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) changes ).eInverseRemove( this, NsdPackage.CHANGES__SERVICE_NS, Changes.class,
+                    msgs );
+            msgs = basicUnsetChanges( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldChangesESet = changesESet;
+            changesESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__CHANGES, null, null, oldChangesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetChanges() {
+        return changesESet;
     }
 
     /**
@@ -422,9 +580,12 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
             NotificationChain msgs ) {
         FunctionalConstraints oldFunctionalConstraints = functionalConstraints;
         functionalConstraints = newFunctionalConstraints;
+        boolean oldFunctionalConstraintsESet = functionalConstraintsESet;
+        functionalConstraintsESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS, oldFunctionalConstraints, newFunctionalConstraints );
+                    NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS, oldFunctionalConstraints, newFunctionalConstraints,
+                    !oldFunctionalConstraintsESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -444,15 +605,74 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
             NotificationChain msgs = null;
             if( functionalConstraints != null )
                 msgs = ( ( InternalEObject ) functionalConstraints ).eInverseRemove( this,
-                        EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS, null, msgs );
+                        NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS, FunctionalConstraints.class, msgs );
             if( newFunctionalConstraints != null )
                 msgs = ( ( InternalEObject ) newFunctionalConstraints ).eInverseAdd( this,
-                        EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS, null, msgs );
+                        NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS, FunctionalConstraints.class, msgs );
             msgs = basicSetFunctionalConstraints( newFunctionalConstraints, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS, newFunctionalConstraints, newFunctionalConstraints ) );
+        else {
+            boolean oldFunctionalConstraintsESet = functionalConstraintsESet;
+            functionalConstraintsESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS,
+                        newFunctionalConstraints, newFunctionalConstraints, !oldFunctionalConstraintsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetFunctionalConstraints( NotificationChain msgs ) {
+        FunctionalConstraints oldFunctionalConstraints = functionalConstraints;
+        functionalConstraints = null;
+        boolean oldFunctionalConstraintsESet = functionalConstraintsESet;
+        functionalConstraintsESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS, oldFunctionalConstraints, null,
+                    oldFunctionalConstraintsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetFunctionalConstraints() {
+        if( functionalConstraints != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) functionalConstraints ).eInverseRemove( this,
+                    NsdPackage.FUNCTIONAL_CONSTRAINTS__SERVICE_NS, FunctionalConstraints.class, msgs );
+            msgs = basicUnsetFunctionalConstraints( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldFunctionalConstraintsESet = functionalConstraintsESet;
+            functionalConstraintsESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS, null, null, oldFunctionalConstraintsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetFunctionalConstraints() {
+        return functionalConstraintsESet;
     }
 
     /**
@@ -474,9 +694,12 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
             NotificationChain msgs ) {
         PresenceConditions oldPresenceConditions = presenceConditions;
         presenceConditions = newPresenceConditions;
+        boolean oldPresenceConditionsESet = presenceConditionsESet;
+        presenceConditionsESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS, oldPresenceConditions, newPresenceConditions );
+                    NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS, oldPresenceConditions, newPresenceConditions,
+                    !oldPresenceConditionsESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -495,14 +718,73 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
         if( newPresenceConditions != presenceConditions ) {
             NotificationChain msgs = null;
             if( presenceConditions != null ) msgs = ( ( InternalEObject ) presenceConditions ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS, null, msgs );
+                    NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS, PresenceConditions.class, msgs );
             if( newPresenceConditions != null ) msgs = ( ( InternalEObject ) newPresenceConditions ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS, null, msgs );
+                    NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS, PresenceConditions.class, msgs );
             msgs = basicSetPresenceConditions( newPresenceConditions, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS, newPresenceConditions, newPresenceConditions ) );
+        else {
+            boolean oldPresenceConditionsESet = presenceConditionsESet;
+            presenceConditionsESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS,
+                        newPresenceConditions, newPresenceConditions, !oldPresenceConditionsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetPresenceConditions( NotificationChain msgs ) {
+        PresenceConditions oldPresenceConditions = presenceConditions;
+        presenceConditions = null;
+        boolean oldPresenceConditionsESet = presenceConditionsESet;
+        presenceConditionsESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS, oldPresenceConditions, null,
+                    oldPresenceConditionsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresenceConditions() {
+        if( presenceConditions != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) presenceConditions ).eInverseRemove( this,
+                    NsdPackage.PRESENCE_CONDITIONS__SERVICE_NS, PresenceConditions.class, msgs );
+            msgs = basicUnsetPresenceConditions( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldPresenceConditionsESet = presenceConditionsESet;
+            presenceConditionsESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS, null, null, oldPresenceConditionsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresenceConditions() {
+        return presenceConditionsESet;
     }
 
     /**
@@ -523,9 +805,11 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
     public NotificationChain basicSetAbbreviations( Abbreviations newAbbreviations, NotificationChain msgs ) {
         Abbreviations oldAbbreviations = abbreviations;
         abbreviations = newAbbreviations;
+        boolean oldAbbreviationsESet = abbreviationsESet;
+        abbreviationsESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.SERVICE_NS__ABBREVIATIONS, oldAbbreviations, newAbbreviations );
+                    NsdPackage.SERVICE_NS__ABBREVIATIONS, oldAbbreviations, newAbbreviations, !oldAbbreviationsESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -544,14 +828,71 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
         if( newAbbreviations != abbreviations ) {
             NotificationChain msgs = null;
             if( abbreviations != null ) msgs = ( ( InternalEObject ) abbreviations ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__ABBREVIATIONS, null, msgs );
+                    NsdPackage.ABBREVIATIONS__SERVICE_NS, Abbreviations.class, msgs );
             if( newAbbreviations != null ) msgs = ( ( InternalEObject ) newAbbreviations ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__ABBREVIATIONS, null, msgs );
+                    NsdPackage.ABBREVIATIONS__SERVICE_NS, Abbreviations.class, msgs );
             msgs = basicSetAbbreviations( newAbbreviations, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_NS__ABBREVIATIONS, newAbbreviations, newAbbreviations ) );
+        else {
+            boolean oldAbbreviationsESet = abbreviationsESet;
+            abbreviationsESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SERVICE_NS__ABBREVIATIONS, newAbbreviations, newAbbreviations, !oldAbbreviationsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetAbbreviations( NotificationChain msgs ) {
+        Abbreviations oldAbbreviations = abbreviations;
+        abbreviations = null;
+        boolean oldAbbreviationsESet = abbreviationsESet;
+        abbreviationsESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__ABBREVIATIONS, oldAbbreviations, null, oldAbbreviationsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetAbbreviations() {
+        if( abbreviations != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) abbreviations ).eInverseRemove( this, NsdPackage.ABBREVIATIONS__SERVICE_NS,
+                    Abbreviations.class, msgs );
+            msgs = basicUnsetAbbreviations( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldAbbreviationsESet = abbreviationsESet;
+            abbreviationsESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__ABBREVIATIONS, null, null, oldAbbreviationsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetAbbreviations() {
+        return abbreviationsESet;
     }
 
     /**
@@ -573,10 +914,12 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
             NotificationChain msgs ) {
         ServiceTypeRealizations oldServiceTypeRealizations = serviceTypeRealizations;
         serviceTypeRealizations = newServiceTypeRealizations;
+        boolean oldServiceTypeRealizationsESet = serviceTypeRealizationsESet;
+        serviceTypeRealizationsESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
                     NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS, oldServiceTypeRealizations,
-                    newServiceTypeRealizations );
+                    newServiceTypeRealizations, !oldServiceTypeRealizationsESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -596,16 +939,74 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
             NotificationChain msgs = null;
             if( serviceTypeRealizations != null )
                 msgs = ( ( InternalEObject ) serviceTypeRealizations ).eInverseRemove( this,
-                        EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS, null, msgs );
+                        NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS, ServiceTypeRealizations.class, msgs );
             if( newServiceTypeRealizations != null )
                 msgs = ( ( InternalEObject ) newServiceTypeRealizations ).eInverseAdd( this,
-                        EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS, null, msgs );
+                        NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS, ServiceTypeRealizations.class, msgs );
             msgs = basicSetServiceTypeRealizations( newServiceTypeRealizations, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS,
-                    newServiceTypeRealizations, newServiceTypeRealizations ) );
+        else {
+            boolean oldServiceTypeRealizationsESet = serviceTypeRealizationsESet;
+            serviceTypeRealizationsESet = true;
+            if( eNotificationRequired() ) eNotify(
+                    new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS,
+                            newServiceTypeRealizations, newServiceTypeRealizations, !oldServiceTypeRealizationsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetServiceTypeRealizations( NotificationChain msgs ) {
+        ServiceTypeRealizations oldServiceTypeRealizations = serviceTypeRealizations;
+        serviceTypeRealizations = null;
+        boolean oldServiceTypeRealizationsESet = serviceTypeRealizationsESet;
+        serviceTypeRealizationsESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS, oldServiceTypeRealizations, null,
+                    oldServiceTypeRealizationsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetServiceTypeRealizations() {
+        if( serviceTypeRealizations != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) serviceTypeRealizations ).eInverseRemove( this,
+                    NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS, ServiceTypeRealizations.class, msgs );
+            msgs = basicUnsetServiceTypeRealizations( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldServiceTypeRealizationsESet = serviceTypeRealizationsESet;
+            serviceTypeRealizationsESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS, null, null, oldServiceTypeRealizationsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetServiceTypeRealizations() {
+        return serviceTypeRealizationsESet;
     }
 
     /**
@@ -627,10 +1028,12 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
             ServiceConstructedAttributes newServiceConstructedAttributes, NotificationChain msgs ) {
         ServiceConstructedAttributes oldServiceConstructedAttributes = serviceConstructedAttributes;
         serviceConstructedAttributes = newServiceConstructedAttributes;
+        boolean oldServiceConstructedAttributesESet = serviceConstructedAttributesESet;
+        serviceConstructedAttributesESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
                     NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES, oldServiceConstructedAttributes,
-                    newServiceConstructedAttributes );
+                    newServiceConstructedAttributes, !oldServiceConstructedAttributesESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -650,16 +1053,77 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
             NotificationChain msgs = null;
             if( serviceConstructedAttributes != null )
                 msgs = ( ( InternalEObject ) serviceConstructedAttributes ).eInverseRemove( this,
-                        EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES, null, msgs );
+                        NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS, ServiceConstructedAttributes.class,
+                        msgs );
             if( newServiceConstructedAttributes != null )
                 msgs = ( ( InternalEObject ) newServiceConstructedAttributes ).eInverseAdd( this,
-                        EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES, null, msgs );
+                        NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS, ServiceConstructedAttributes.class,
+                        msgs );
             msgs = basicSetServiceConstructedAttributes( newServiceConstructedAttributes, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES,
-                        newServiceConstructedAttributes, newServiceConstructedAttributes ) );
+        else {
+            boolean oldServiceConstructedAttributesESet = serviceConstructedAttributesESet;
+            serviceConstructedAttributesESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES, newServiceConstructedAttributes,
+                    newServiceConstructedAttributes, !oldServiceConstructedAttributesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetServiceConstructedAttributes( NotificationChain msgs ) {
+        ServiceConstructedAttributes oldServiceConstructedAttributes = serviceConstructedAttributes;
+        serviceConstructedAttributes = null;
+        boolean oldServiceConstructedAttributesESet = serviceConstructedAttributesESet;
+        serviceConstructedAttributesESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES, oldServiceConstructedAttributes, null,
+                    oldServiceConstructedAttributesESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetServiceConstructedAttributes() {
+        if( serviceConstructedAttributes != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) serviceConstructedAttributes ).eInverseRemove( this,
+                    NsdPackage.SERVICE_CONSTRUCTED_ATTRIBUTES__SERVICE_NS, ServiceConstructedAttributes.class, msgs );
+            msgs = basicUnsetServiceConstructedAttributes( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldServiceConstructedAttributesESet = serviceConstructedAttributesESet;
+            serviceConstructedAttributesESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES, null, null,
+                    oldServiceConstructedAttributesESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetServiceConstructedAttributes() {
+        return serviceConstructedAttributesESet;
     }
 
     /**
@@ -680,9 +1144,11 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
     public NotificationChain basicSetServiceCDCs( ServiceCDCs newServiceCDCs, NotificationChain msgs ) {
         ServiceCDCs oldServiceCDCs = serviceCDCs;
         serviceCDCs = newServiceCDCs;
+        boolean oldServiceCDCsESet = serviceCDCsESet;
+        serviceCDCsESet = true;
         if( eNotificationRequired() ) {
             ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
-                    NsdPackage.SERVICE_NS__SERVICE_CD_CS, oldServiceCDCs, newServiceCDCs );
+                    NsdPackage.SERVICE_NS__SERVICE_CD_CS, oldServiceCDCs, newServiceCDCs, !oldServiceCDCsESet );
             if( msgs == null )
                 msgs = notification;
             else
@@ -701,14 +1167,71 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
         if( newServiceCDCs != serviceCDCs ) {
             NotificationChain msgs = null;
             if( serviceCDCs != null ) msgs = ( ( InternalEObject ) serviceCDCs ).eInverseRemove( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__SERVICE_CD_CS, null, msgs );
+                    NsdPackage.SERVICE_CD_CS__SERVICE_NS, ServiceCDCs.class, msgs );
             if( newServiceCDCs != null ) msgs = ( ( InternalEObject ) newServiceCDCs ).eInverseAdd( this,
-                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__SERVICE_CD_CS, null, msgs );
+                    NsdPackage.SERVICE_CD_CS__SERVICE_NS, ServiceCDCs.class, msgs );
             msgs = basicSetServiceCDCs( newServiceCDCs, msgs );
             if( msgs != null ) msgs.dispatch();
         }
-        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_NS__SERVICE_CD_CS, newServiceCDCs, newServiceCDCs ) );
+        else {
+            boolean oldServiceCDCsESet = serviceCDCsESet;
+            serviceCDCsESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SERVICE_NS__SERVICE_CD_CS, newServiceCDCs, newServiceCDCs, !oldServiceCDCsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetServiceCDCs( NotificationChain msgs ) {
+        ServiceCDCs oldServiceCDCs = serviceCDCs;
+        serviceCDCs = null;
+        boolean oldServiceCDCsESet = serviceCDCsESet;
+        serviceCDCsESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__SERVICE_CD_CS, oldServiceCDCs, null, oldServiceCDCsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetServiceCDCs() {
+        if( serviceCDCs != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) serviceCDCs ).eInverseRemove( this, NsdPackage.SERVICE_CD_CS__SERVICE_NS,
+                    ServiceCDCs.class, msgs );
+            msgs = basicUnsetServiceCDCs( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldServiceCDCsESet = serviceCDCsESet;
+            serviceCDCsESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_NS__SERVICE_CD_CS, null, null, oldServiceCDCsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetServiceCDCs() {
+        return serviceCDCsESet;
     }
 
     /**
@@ -730,8 +1253,35 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
     public void setDescID( String newDescID ) {
         String oldDescID = descID;
         descID = newDescID;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_NS__DESC_ID, oldDescID, descID ) );
+        boolean oldDescIDESet = descIDESet;
+        descIDESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_NS__DESC_ID, oldDescID, descID, !oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDescID() {
+        String oldDescID = descID;
+        boolean oldDescIDESet = descIDESet;
+        descID = DESC_ID_EDEFAULT;
+        descIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_NS__DESC_ID, oldDescID, DESC_ID_EDEFAULT, oldDescIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDescID() {
+        return descIDESet;
     }
 
     /**
@@ -753,8 +1303,35 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
     public void setId( String newId ) {
         String oldId = id;
         id = newId;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_NS__ID, oldId, id ) );
+        boolean oldIdESet = idESet;
+        idESet = true;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_NS__ID, oldId, id, !oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetId() {
+        String oldId = id;
+        boolean oldIdESet = idESet;
+        id = ID_EDEFAULT;
+        idESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_NS__ID, oldId, ID_EDEFAULT, oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetId() {
+        return idESet;
     }
 
     /**
@@ -928,8 +1505,35 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
     public void setUmlDate( XMLGregorianCalendar newUmlDate ) {
         XMLGregorianCalendar oldUmlDate = umlDate;
         umlDate = newUmlDate;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_NS__UML_DATE, oldUmlDate, umlDate ) );
+        boolean oldUmlDateESet = umlDateESet;
+        umlDateESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_NS__UML_DATE, oldUmlDate, umlDate, !oldUmlDateESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetUmlDate() {
+        XMLGregorianCalendar oldUmlDate = umlDate;
+        boolean oldUmlDateESet = umlDateESet;
+        umlDate = UML_DATE_EDEFAULT;
+        umlDateESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_NS__UML_DATE, oldUmlDate, UML_DATE_EDEFAULT, oldUmlDateESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetUmlDate() {
+        return umlDateESet;
     }
 
     /**
@@ -951,8 +1555,78 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
     public void setUmlVersion( String newUmlVersion ) {
         String oldUmlVersion = umlVersion;
         umlVersion = newUmlVersion;
+        boolean oldUmlVersionESet = umlVersionESet;
+        umlVersionESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_NS__UML_VERSION, oldUmlVersion, umlVersion ) );
+                NsdPackage.SERVICE_NS__UML_VERSION, oldUmlVersion, umlVersion, !oldUmlVersionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetUmlVersion() {
+        String oldUmlVersion = umlVersion;
+        boolean oldUmlVersionESet = umlVersionESet;
+        umlVersion = UML_VERSION_EDEFAULT;
+        umlVersionESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_NS__UML_VERSION, oldUmlVersion, UML_VERSION_EDEFAULT, oldUmlVersionESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetUmlVersion() {
+        return umlVersionESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_NS__CHANGES:
+            if( changes != null ) msgs = ( ( InternalEObject ) changes ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__CHANGES, null, msgs );
+            return basicSetChanges( ( Changes ) otherEnd, msgs );
+        case NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS:
+            if( functionalConstraints != null )
+                msgs = ( ( InternalEObject ) functionalConstraints ).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS, null, msgs );
+            return basicSetFunctionalConstraints( ( FunctionalConstraints ) otherEnd, msgs );
+        case NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS:
+            if( presenceConditions != null ) msgs = ( ( InternalEObject ) presenceConditions ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS, null, msgs );
+            return basicSetPresenceConditions( ( PresenceConditions ) otherEnd, msgs );
+        case NsdPackage.SERVICE_NS__ABBREVIATIONS:
+            if( abbreviations != null ) msgs = ( ( InternalEObject ) abbreviations ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__ABBREVIATIONS, null, msgs );
+            return basicSetAbbreviations( ( Abbreviations ) otherEnd, msgs );
+        case NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS:
+            if( serviceTypeRealizations != null )
+                msgs = ( ( InternalEObject ) serviceTypeRealizations ).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS, null, msgs );
+            return basicSetServiceTypeRealizations( ( ServiceTypeRealizations ) otherEnd, msgs );
+        case NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES:
+            if( serviceConstructedAttributes != null )
+                msgs = ( ( InternalEObject ) serviceConstructedAttributes ).eInverseRemove( this,
+                        EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES, null, msgs );
+            return basicSetServiceConstructedAttributes( ( ServiceConstructedAttributes ) otherEnd, msgs );
+        case NsdPackage.SERVICE_NS__SERVICE_CD_CS:
+            if( serviceCDCs != null ) msgs = ( ( InternalEObject ) serviceCDCs ).eInverseRemove( this,
+                    EOPPOSITE_FEATURE_BASE - NsdPackage.SERVICE_NS__SERVICE_CD_CS, null, msgs );
+            return basicSetServiceCDCs( ( ServiceCDCs ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
     }
 
     /**
@@ -1014,19 +1688,19 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
     public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_NS__CHANGES:
-            return basicSetChanges( null, msgs );
+            return basicUnsetChanges( msgs );
         case NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS:
-            return basicSetFunctionalConstraints( null, msgs );
+            return basicUnsetFunctionalConstraints( msgs );
         case NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS:
-            return basicSetPresenceConditions( null, msgs );
+            return basicUnsetPresenceConditions( msgs );
         case NsdPackage.SERVICE_NS__ABBREVIATIONS:
-            return basicSetAbbreviations( null, msgs );
+            return basicUnsetAbbreviations( msgs );
         case NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS:
-            return basicSetServiceTypeRealizations( null, msgs );
+            return basicUnsetServiceTypeRealizations( msgs );
         case NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES:
-            return basicSetServiceConstructedAttributes( null, msgs );
+            return basicUnsetServiceConstructedAttributes( msgs );
         case NsdPackage.SERVICE_NS__SERVICE_CD_CS:
-            return basicSetServiceCDCs( null, msgs );
+            return basicUnsetServiceCDCs( msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -1145,31 +1819,31 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
             unsetVersion();
             return;
         case NsdPackage.SERVICE_NS__CHANGES:
-            setChanges( ( Changes ) null );
+            unsetChanges();
             return;
         case NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS:
-            setFunctionalConstraints( ( FunctionalConstraints ) null );
+            unsetFunctionalConstraints();
             return;
         case NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS:
-            setPresenceConditions( ( PresenceConditions ) null );
+            unsetPresenceConditions();
             return;
         case NsdPackage.SERVICE_NS__ABBREVIATIONS:
-            setAbbreviations( ( Abbreviations ) null );
+            unsetAbbreviations();
             return;
         case NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS:
-            setServiceTypeRealizations( ( ServiceTypeRealizations ) null );
+            unsetServiceTypeRealizations();
             return;
         case NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES:
-            setServiceConstructedAttributes( ( ServiceConstructedAttributes ) null );
+            unsetServiceConstructedAttributes();
             return;
         case NsdPackage.SERVICE_NS__SERVICE_CD_CS:
-            setServiceCDCs( ( ServiceCDCs ) null );
+            unsetServiceCDCs();
             return;
         case NsdPackage.SERVICE_NS__DESC_ID:
-            setDescID( DESC_ID_EDEFAULT );
+            unsetDescID();
             return;
         case NsdPackage.SERVICE_NS__ID:
-            setId( ID_EDEFAULT );
+            unsetId();
             return;
         case NsdPackage.SERVICE_NS__PUBLICATION_STAGE:
             unsetPublicationStage();
@@ -1178,10 +1852,10 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
             unsetRevision();
             return;
         case NsdPackage.SERVICE_NS__UML_DATE:
-            setUmlDate( UML_DATE_EDEFAULT );
+            unsetUmlDate();
             return;
         case NsdPackage.SERVICE_NS__UML_VERSION:
-            setUmlVersion( UML_VERSION_EDEFAULT );
+            unsetUmlVersion();
             return;
         }
         super.eUnset( featureID );
@@ -1200,31 +1874,31 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
         case NsdPackage.SERVICE_NS__VERSION:
             return isSetVersion();
         case NsdPackage.SERVICE_NS__CHANGES:
-            return changes != null;
+            return isSetChanges();
         case NsdPackage.SERVICE_NS__FUNCTIONAL_CONSTRAINTS:
-            return functionalConstraints != null;
+            return isSetFunctionalConstraints();
         case NsdPackage.SERVICE_NS__PRESENCE_CONDITIONS:
-            return presenceConditions != null;
+            return isSetPresenceConditions();
         case NsdPackage.SERVICE_NS__ABBREVIATIONS:
-            return abbreviations != null;
+            return isSetAbbreviations();
         case NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS:
-            return serviceTypeRealizations != null;
+            return isSetServiceTypeRealizations();
         case NsdPackage.SERVICE_NS__SERVICE_CONSTRUCTED_ATTRIBUTES:
-            return serviceConstructedAttributes != null;
+            return isSetServiceConstructedAttributes();
         case NsdPackage.SERVICE_NS__SERVICE_CD_CS:
-            return serviceCDCs != null;
+            return isSetServiceCDCs();
         case NsdPackage.SERVICE_NS__DESC_ID:
-            return DESC_ID_EDEFAULT == null ? descID != null : !DESC_ID_EDEFAULT.equals( descID );
+            return isSetDescID();
         case NsdPackage.SERVICE_NS__ID:
-            return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals( id );
+            return isSetId();
         case NsdPackage.SERVICE_NS__PUBLICATION_STAGE:
             return isSetPublicationStage();
         case NsdPackage.SERVICE_NS__REVISION:
             return isSetRevision();
         case NsdPackage.SERVICE_NS__UML_DATE:
-            return UML_DATE_EDEFAULT == null ? umlDate != null : !UML_DATE_EDEFAULT.equals( umlDate );
+            return isSetUmlDate();
         case NsdPackage.SERVICE_NS__UML_VERSION:
-            return UML_VERSION_EDEFAULT == null ? umlVersion != null : !UML_VERSION_EDEFAULT.equals( umlVersion );
+            return isSetUmlVersion();
         }
         return super.eIsSet( featureID );
     }
@@ -1290,9 +1964,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
         else
             result.append( "<unset>" );
         result.append( ", descID: " );
-        result.append( descID );
+        if( descIDESet )
+            result.append( descID );
+        else
+            result.append( "<unset>" );
         result.append( ", id: " );
-        result.append( id );
+        if( idESet )
+            result.append( id );
+        else
+            result.append( "<unset>" );
         result.append( ", publicationStage: " );
         if( publicationStageESet )
             result.append( publicationStage );
@@ -1304,9 +1984,15 @@ public class ServiceNSImpl extends CopyrightedImpl implements ServiceNS {
         else
             result.append( "<unset>" );
         result.append( ", umlDate: " );
-        result.append( umlDate );
+        if( umlDateESet )
+            result.append( umlDate );
+        else
+            result.append( "<unset>" );
         result.append( ", umlVersion: " );
-        result.append( umlVersion );
+        if( umlVersionESet )
+            result.append( umlVersion );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceNsUsageImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceNsUsageImpl.java
index 2f21152..75340ce 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceNsUsageImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceNsUsageImpl.java
@@ -19,6 +19,7 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServiceNS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AppliesToType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage;
@@ -35,7 +36,8 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -50,6 +52,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceNsUsageImpl#getId <em>Id</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceNsUsageImpl#getPublicationStage <em>Publication Stage</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceNsUsageImpl#getRevision <em>Revision</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceNsUsageImpl#getApplicableServiceNS <em>Applicable Service NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -85,6 +88,15 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
      */
     protected String id = ID_EDEFAULT;
 
+    /**
+     * This is true if the Id attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean idESet;
+
     /**
      * The default value of the '{@link #getPublicationStage() <em>Publication Stage</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -170,12 +182,32 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
     @Override
     public EList< AppliesToType > getAppliesTo() {
         if( appliesTo == null ) {
-            appliesTo = new EObjectContainmentEList< AppliesToType >( AppliesToType.class, this,
-                    NsdPackage.SERVICE_NS_USAGE__APPLIES_TO );
+            appliesTo = new EObjectContainmentWithInverseEList.Unsettable< AppliesToType >( AppliesToType.class, this,
+                    NsdPackage.SERVICE_NS_USAGE__APPLIES_TO, NsdPackage.APPLIES_TO_TYPE__SERVICE_NS_USAGE );
         }
         return appliesTo;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetAppliesTo() {
+        if( appliesTo != null ) ( ( InternalEList.Unsettable< ? > ) appliesTo ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetAppliesTo() {
+        return appliesTo != null && ( ( InternalEList.Unsettable< ? > ) appliesTo ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -195,8 +227,35 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
     public void setId( String newId ) {
         String oldId = id;
         id = newId;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_NS_USAGE__ID, oldId, id ) );
+        boolean oldIdESet = idESet;
+        idESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_NS_USAGE__ID, oldId, id, !oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetId() {
+        String oldId = id;
+        boolean oldIdESet = idESet;
+        id = ID_EDEFAULT;
+        idESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_NS_USAGE__ID, oldId, ID_EDEFAULT, oldIdESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetId() {
+        return idESet;
     }
 
     /**
@@ -301,6 +360,72 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
         return revisionESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ApplicableServiceNS getApplicableServiceNS() {
+        if( eContainerFeatureID() != NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS ) return null;
+        return ( ApplicableServiceNS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetApplicableServiceNS( ApplicableServiceNS newApplicableServiceNS,
+            NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newApplicableServiceNS,
+                NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setApplicableServiceNS( ApplicableServiceNS newApplicableServiceNS ) {
+        if( newApplicableServiceNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS
+                        && newApplicableServiceNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newApplicableServiceNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newApplicableServiceNS != null )
+                msgs = ( ( InternalEObject ) newApplicableServiceNS ).eInverseAdd( this,
+                        NsdPackage.APPLICABLE_SERVICE_NS__SERVICE_NS_USAGE, ApplicableServiceNS.class, msgs );
+            msgs = basicSetApplicableServiceNS( newApplicableServiceNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS, newApplicableServiceNS, newApplicableServiceNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_NS_USAGE__APPLIES_TO:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getAppliesTo() ).basicAdd( otherEnd,
+                    msgs );
+        case NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetApplicableServiceNS( ( ApplicableServiceNS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -311,10 +436,27 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
         switch( featureID ) {
         case NsdPackage.SERVICE_NS_USAGE__APPLIES_TO:
             return ( ( InternalEList< ? > ) getAppliesTo() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS:
+            return basicSetApplicableServiceNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.APPLICABLE_SERVICE_NS__SERVICE_NS_USAGE,
+                    ApplicableServiceNS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -331,6 +473,8 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
             return getPublicationStage();
         case NsdPackage.SERVICE_NS_USAGE__REVISION:
             return getRevision();
+        case NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS:
+            return getApplicableServiceNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -357,6 +501,9 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
         case NsdPackage.SERVICE_NS_USAGE__REVISION:
             setRevision( ( String ) newValue );
             return;
+        case NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS:
+            setApplicableServiceNS( ( ApplicableServiceNS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -370,10 +517,10 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_NS_USAGE__APPLIES_TO:
-            getAppliesTo().clear();
+            unsetAppliesTo();
             return;
         case NsdPackage.SERVICE_NS_USAGE__ID:
-            setId( ID_EDEFAULT );
+            unsetId();
             return;
         case NsdPackage.SERVICE_NS_USAGE__PUBLICATION_STAGE:
             unsetPublicationStage();
@@ -381,6 +528,9 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
         case NsdPackage.SERVICE_NS_USAGE__REVISION:
             unsetRevision();
             return;
+        case NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS:
+            setApplicableServiceNS( ( ApplicableServiceNS ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -394,13 +544,15 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_NS_USAGE__APPLIES_TO:
-            return appliesTo != null && !appliesTo.isEmpty();
+            return isSetAppliesTo();
         case NsdPackage.SERVICE_NS_USAGE__ID:
-            return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals( id );
+            return isSetId();
         case NsdPackage.SERVICE_NS_USAGE__PUBLICATION_STAGE:
             return isSetPublicationStage();
         case NsdPackage.SERVICE_NS_USAGE__REVISION:
             return isSetRevision();
+        case NsdPackage.SERVICE_NS_USAGE__APPLICABLE_SERVICE_NS:
+            return getApplicableServiceNS() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -416,7 +568,10 @@ public class ServiceNsUsageImpl extends NSDObjectWithVersionAndReleaseImpl imple
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (id: " );
-        result.append( id );
+        if( idESet )
+            result.append( id );
+        else
+            result.append( "<unset>" );
         result.append( ", publicationStage: " );
         if( publicationStageESet )
             result.append( publicationStage );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceParameterImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceParameterImpl.java
index 9bf8d05..aa858ed 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceParameterImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceParameterImpl.java
@@ -19,6 +19,7 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter;
@@ -27,11 +28,14 @@ import java.math.BigDecimal;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.Enumerator;
 
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -47,6 +51,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceParameterImpl#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceParameterImpl#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceParameterImpl#getTypeKind <em>Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceParameterImpl#getCDC <em>CDC</em>}</li>
  * </ul>
  *
  * @generated
@@ -72,6 +77,15 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
      */
     protected String defaultValue = DEFAULT_VALUE_EDEFAULT;
 
+    /**
+     * This is true if the Default Value attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean defaultValueESet;
+
     /**
      * The default value of the '{@link #getMaxValue() <em>Max Value</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -92,6 +106,15 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
      */
     protected BigDecimal maxValue = MAX_VALUE_EDEFAULT;
 
+    /**
+     * This is true if the Max Value attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean maxValueESet;
+
     /**
      * The default value of the '{@link #getMinValue() <em>Min Value</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -112,6 +135,15 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
      */
     protected BigDecimal minValue = MIN_VALUE_EDEFAULT;
 
+    /**
+     * This is true if the Min Value attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean minValueESet;
+
     /**
      * The default value of the '{@link #getName() <em>Name</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -132,6 +164,15 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * The default value of the '{@link #getType() <em>Type</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -152,6 +193,15 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
      */
     protected String type = TYPE_EDEFAULT;
 
+    /**
+     * This is true if the Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean typeESet;
+
     /**
      * The default value of the '{@link #getTypeKind() <em>Type Kind</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -220,8 +270,36 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
     public void setDefaultValue( String newDefaultValue ) {
         String oldDefaultValue = defaultValue;
         defaultValue = newDefaultValue;
+        boolean oldDefaultValueESet = defaultValueESet;
+        defaultValueESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_PARAMETER__DEFAULT_VALUE, oldDefaultValue, defaultValue ) );
+                NsdPackage.SERVICE_PARAMETER__DEFAULT_VALUE, oldDefaultValue, defaultValue, !oldDefaultValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDefaultValue() {
+        String oldDefaultValue = defaultValue;
+        boolean oldDefaultValueESet = defaultValueESet;
+        defaultValue = DEFAULT_VALUE_EDEFAULT;
+        defaultValueESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SERVICE_PARAMETER__DEFAULT_VALUE,
+                    oldDefaultValue, DEFAULT_VALUE_EDEFAULT, oldDefaultValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDefaultValue() {
+        return defaultValueESet;
     }
 
     /**
@@ -243,8 +321,35 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
     public void setMaxValue( BigDecimal newMaxValue ) {
         BigDecimal oldMaxValue = maxValue;
         maxValue = newMaxValue;
+        boolean oldMaxValueESet = maxValueESet;
+        maxValueESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_PARAMETER__MAX_VALUE, oldMaxValue, maxValue ) );
+                NsdPackage.SERVICE_PARAMETER__MAX_VALUE, oldMaxValue, maxValue, !oldMaxValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetMaxValue() {
+        BigDecimal oldMaxValue = maxValue;
+        boolean oldMaxValueESet = maxValueESet;
+        maxValue = MAX_VALUE_EDEFAULT;
+        maxValueESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_PARAMETER__MAX_VALUE, oldMaxValue, MAX_VALUE_EDEFAULT, oldMaxValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetMaxValue() {
+        return maxValueESet;
     }
 
     /**
@@ -266,8 +371,35 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
     public void setMinValue( BigDecimal newMinValue ) {
         BigDecimal oldMinValue = minValue;
         minValue = newMinValue;
+        boolean oldMinValueESet = minValueESet;
+        minValueESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_PARAMETER__MIN_VALUE, oldMinValue, minValue ) );
+                NsdPackage.SERVICE_PARAMETER__MIN_VALUE, oldMinValue, minValue, !oldMinValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetMinValue() {
+        BigDecimal oldMinValue = minValue;
+        boolean oldMinValueESet = minValueESet;
+        minValue = MIN_VALUE_EDEFAULT;
+        minValueESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_PARAMETER__MIN_VALUE, oldMinValue, MIN_VALUE_EDEFAULT, oldMinValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetMinValue() {
+        return minValueESet;
     }
 
     /**
@@ -289,8 +421,35 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_PARAMETER__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_PARAMETER__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_PARAMETER__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
     }
 
     /**
@@ -312,8 +471,35 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
     public void setType( String newType ) {
         String oldType = type;
         type = newType;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_PARAMETER__TYPE, oldType, type ) );
+        boolean oldTypeESet = typeESet;
+        typeESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_PARAMETER__TYPE, oldType, type, !oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetType() {
+        String oldType = type;
+        boolean oldTypeESet = typeESet;
+        type = TYPE_EDEFAULT;
+        typeESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SERVICE_PARAMETER__TYPE, oldType, TYPE_EDEFAULT, oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetType() {
+        return typeESet;
     }
 
     /**
@@ -366,6 +552,92 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
         return typeKindESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public CDC getCDC() {
+        if( eContainerFeatureID() != NsdPackage.SERVICE_PARAMETER__CDC ) return null;
+        return ( CDC ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetCDC( CDC newCDC, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newCDC, NsdPackage.SERVICE_PARAMETER__CDC, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setCDC( CDC newCDC ) {
+        if( newCDC != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SERVICE_PARAMETER__CDC && newCDC != null ) ) {
+            if( EcoreUtil.isAncestor( this, newCDC ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newCDC != null ) msgs = ( ( InternalEObject ) newCDC ).eInverseAdd( this,
+                    NsdPackage.CDC__SERVICE_PARAMETER, CDC.class, msgs );
+            msgs = basicSetCDC( newCDC, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_PARAMETER__CDC, newCDC, newCDC ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_PARAMETER__CDC:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetCDC( ( CDC ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_PARAMETER__CDC:
+            return basicSetCDC( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SERVICE_PARAMETER__CDC:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.CDC__SERVICE_PARAMETER, CDC.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -386,6 +658,8 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
             return getType();
         case NsdPackage.SERVICE_PARAMETER__TYPE_KIND:
             return getTypeKind();
+        case NsdPackage.SERVICE_PARAMETER__CDC:
+            return getCDC();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -416,6 +690,9 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
         case NsdPackage.SERVICE_PARAMETER__TYPE_KIND:
             setTypeKind( ( Enumerator ) newValue );
             return;
+        case NsdPackage.SERVICE_PARAMETER__CDC:
+            setCDC( ( CDC ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -429,23 +706,26 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_PARAMETER__DEFAULT_VALUE:
-            setDefaultValue( DEFAULT_VALUE_EDEFAULT );
+            unsetDefaultValue();
             return;
         case NsdPackage.SERVICE_PARAMETER__MAX_VALUE:
-            setMaxValue( MAX_VALUE_EDEFAULT );
+            unsetMaxValue();
             return;
         case NsdPackage.SERVICE_PARAMETER__MIN_VALUE:
-            setMinValue( MIN_VALUE_EDEFAULT );
+            unsetMinValue();
             return;
         case NsdPackage.SERVICE_PARAMETER__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
             return;
         case NsdPackage.SERVICE_PARAMETER__TYPE:
-            setType( TYPE_EDEFAULT );
+            unsetType();
             return;
         case NsdPackage.SERVICE_PARAMETER__TYPE_KIND:
             unsetTypeKind();
             return;
+        case NsdPackage.SERVICE_PARAMETER__CDC:
+            setCDC( ( CDC ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -459,18 +739,19 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_PARAMETER__DEFAULT_VALUE:
-            return DEFAULT_VALUE_EDEFAULT == null ? defaultValue != null
-                    : !DEFAULT_VALUE_EDEFAULT.equals( defaultValue );
+            return isSetDefaultValue();
         case NsdPackage.SERVICE_PARAMETER__MAX_VALUE:
-            return MAX_VALUE_EDEFAULT == null ? maxValue != null : !MAX_VALUE_EDEFAULT.equals( maxValue );
+            return isSetMaxValue();
         case NsdPackage.SERVICE_PARAMETER__MIN_VALUE:
-            return MIN_VALUE_EDEFAULT == null ? minValue != null : !MIN_VALUE_EDEFAULT.equals( minValue );
+            return isSetMinValue();
         case NsdPackage.SERVICE_PARAMETER__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
         case NsdPackage.SERVICE_PARAMETER__TYPE:
-            return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals( type );
+            return isSetType();
         case NsdPackage.SERVICE_PARAMETER__TYPE_KIND:
             return isSetTypeKind();
+        case NsdPackage.SERVICE_PARAMETER__CDC:
+            return getCDC() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -486,15 +767,30 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (defaultValue: " );
-        result.append( defaultValue );
+        if( defaultValueESet )
+            result.append( defaultValue );
+        else
+            result.append( "<unset>" );
         result.append( ", maxValue: " );
-        result.append( maxValue );
+        if( maxValueESet )
+            result.append( maxValue );
+        else
+            result.append( "<unset>" );
         result.append( ", minValue: " );
-        result.append( minValue );
+        if( minValueESet )
+            result.append( minValue );
+        else
+            result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ", type: " );
-        result.append( type );
+        if( typeESet )
+            result.append( type );
+        else
+            result.append( "<unset>" );
         result.append( ", typeKind: " );
         if( typeKindESet )
             result.append( typeKind );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeImpl.java
index 5cc932b..d386b85 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeImpl.java
@@ -20,15 +20,19 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ACSIServicesKind;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceType;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 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.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -39,6 +43,7 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeImpl#getName <em>Name</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeImpl#getApplicableServices <em>Applicable Services</em>}</li>
  * </ul>
  *
  * @generated
@@ -142,6 +147,96 @@ public class ServiceTypeImpl extends MinimalEObjectImpl.Container implements Ser
         return nameESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ApplicableServices getApplicableServices() {
+        if( eContainerFeatureID() != NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES ) return null;
+        return ( ApplicableServices ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetApplicableServices( ApplicableServices newApplicableServices,
+            NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newApplicableServices,
+                NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setApplicableServices( ApplicableServices newApplicableServices ) {
+        if( newApplicableServices != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES
+                        && newApplicableServices != null ) ) {
+            if( EcoreUtil.isAncestor( this, newApplicableServices ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newApplicableServices != null ) msgs = ( ( InternalEObject ) newApplicableServices ).eInverseAdd( this,
+                    NsdPackage.APPLICABLE_SERVICES__SERVICE, ApplicableServices.class, msgs );
+            msgs = basicSetApplicableServices( newApplicableServices, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES, newApplicableServices, newApplicableServices ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetApplicableServices( ( ApplicableServices ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES:
+            return basicSetApplicableServices( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.APPLICABLE_SERVICES__SERVICE,
+                    ApplicableServices.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -152,6 +247,8 @@ public class ServiceTypeImpl extends MinimalEObjectImpl.Container implements Ser
         switch( featureID ) {
         case NsdPackage.SERVICE_TYPE__NAME:
             return getName();
+        case NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES:
+            return getApplicableServices();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -167,6 +264,9 @@ public class ServiceTypeImpl extends MinimalEObjectImpl.Container implements Ser
         case NsdPackage.SERVICE_TYPE__NAME:
             setName( ( ACSIServicesKind ) newValue );
             return;
+        case NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES:
+            setApplicableServices( ( ApplicableServices ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -182,6 +282,9 @@ public class ServiceTypeImpl extends MinimalEObjectImpl.Container implements Ser
         case NsdPackage.SERVICE_TYPE__NAME:
             unsetName();
             return;
+        case NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES:
+            setApplicableServices( ( ApplicableServices ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -196,6 +299,8 @@ public class ServiceTypeImpl extends MinimalEObjectImpl.Container implements Ser
         switch( featureID ) {
         case NsdPackage.SERVICE_TYPE__NAME:
             return isSetName();
+        case NsdPackage.SERVICE_TYPE__APPLICABLE_SERVICES:
+            return getApplicableServices() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeRealizationImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeRealizationImpl.java
deleted file mode 100644
index f031020..0000000
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeRealizationImpl.java
+++ /dev/null
@@ -1,602 +0,0 @@
-/**
- *  Copyright (c) 2019 CentraleSupélec & EDF.
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  This file is part of the RiseClipse tool
- *  
- *  Contributors:
- *      Computer Science Department, CentraleSupélec
- *      EDF R&D
- *  Contacts:
- *      dominique.marcadet@centralesupelec.fr
- *      aurelie.dehouck-neveu@edf.fr
- *  Web site:
- *      http://wdi.supelec.fr/software/RiseClipse/
- * 
- */
-package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
-
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.common.util.Enumerator;
-
-import org.eclipse.emf.ecore.EClass;
-
-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>Service Type Realization</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl#getFc <em>Fc</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl#getName <em>Name</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl#getPresCond <em>Pres Cond</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl#getPresCondArgs <em>Pres Cond Args</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl#getPresCondArgsID <em>Pres Cond Args ID</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl#getType <em>Type</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationImpl#getTypeKind <em>Type Kind</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class ServiceTypeRealizationImpl extends MinimalEObjectImpl.Container implements ServiceTypeRealization {
-    /**
-     * The default value of the '{@link #getFc() <em>Fc</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getFc()
-     * @generated
-     * @ordered
-     */
-    protected static final String FC_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getFc() <em>Fc</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getFc()
-     * @generated
-     * @ordered
-     */
-    protected String fc = FC_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getName()
-     * @generated
-     * @ordered
-     */
-    protected static final String NAME_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getName()
-     * @generated
-     * @ordered
-     */
-    protected String name = NAME_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getPresCond() <em>Pres Cond</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getPresCond()
-     * @generated
-     * @ordered
-     */
-    protected static final String PRES_COND_EDEFAULT = "M";
-
-    /**
-     * The cached value of the '{@link #getPresCond() <em>Pres Cond</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getPresCond()
-     * @generated
-     * @ordered
-     */
-    protected String presCond = PRES_COND_EDEFAULT;
-
-    /**
-     * This is true if the Pres Cond attribute has been set.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    protected boolean presCondESet;
-
-    /**
-     * The default value of the '{@link #getPresCondArgs() <em>Pres Cond Args</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getPresCondArgs()
-     * @generated
-     * @ordered
-     */
-    protected static final String PRES_COND_ARGS_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getPresCondArgs() <em>Pres Cond Args</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getPresCondArgs()
-     * @generated
-     * @ordered
-     */
-    protected String presCondArgs = PRES_COND_ARGS_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getPresCondArgsID() <em>Pres Cond Args ID</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getPresCondArgsID()
-     * @generated
-     * @ordered
-     */
-    protected static final String PRES_COND_ARGS_ID_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getPresCondArgsID() <em>Pres Cond Args ID</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getPresCondArgsID()
-     * @generated
-     * @ordered
-     */
-    protected String presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getType() <em>Type</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getType()
-     * @generated
-     * @ordered
-     */
-    protected static final String TYPE_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getType()
-     * @generated
-     * @ordered
-     */
-    protected String type = TYPE_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getTypeKind() <em>Type Kind</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getTypeKind()
-     * @generated
-     * @ordered
-     */
-    protected static final Enumerator TYPE_KIND_EDEFAULT = ( Enumerator ) NsdFactory.eINSTANCE
-            .createFromString( NsdPackage.eINSTANCE.getAttributeTypeKind(), "BASIC" );
-
-    /**
-     * The cached value of the '{@link #getTypeKind() <em>Type Kind</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getTypeKind()
-     * @generated
-     * @ordered
-     */
-    protected Enumerator typeKind = TYPE_KIND_EDEFAULT;
-
-    /**
-     * This is true if the Type Kind attribute has been set.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    protected boolean typeKindESet;
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected ServiceTypeRealizationImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    protected EClass eStaticClass() {
-        return NsdPackage.Literals.SERVICE_TYPE_REALIZATION;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public String getFc() {
-        return fc;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void setFc( String newFc ) {
-        String oldFc = fc;
-        fc = newFc;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.SERVICE_TYPE_REALIZATION__FC, oldFc, fc ) );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void setName( String newName ) {
-        String oldName = name;
-        name = newName;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_TYPE_REALIZATION__NAME, oldName, name ) );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public String getPresCond() {
-        return presCond;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void setPresCond( String newPresCond ) {
-        String oldPresCond = presCond;
-        presCond = newPresCond;
-        boolean oldPresCondESet = presCondESet;
-        presCondESet = true;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND, oldPresCond, presCond, !oldPresCondESet ) );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void unsetPresCond() {
-        String oldPresCond = presCond;
-        boolean oldPresCondESet = presCondESet;
-        presCond = PRES_COND_EDEFAULT;
-        presCondESet = false;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
-                NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND, oldPresCond, PRES_COND_EDEFAULT, oldPresCondESet ) );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public boolean isSetPresCond() {
-        return presCondESet;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public String getPresCondArgs() {
-        return presCondArgs;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void setPresCondArgs( String newPresCondArgs ) {
-        String oldPresCondArgs = presCondArgs;
-        presCondArgs = newPresCondArgs;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS, oldPresCondArgs, presCondArgs ) );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public String getPresCondArgsID() {
-        return presCondArgsID;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void setPresCondArgsID( String newPresCondArgsID ) {
-        String oldPresCondArgsID = presCondArgsID;
-        presCondArgsID = newPresCondArgsID;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS_ID, oldPresCondArgsID, presCondArgsID ) );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public String getType() {
-        return type;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void setType( String newType ) {
-        String oldType = type;
-        type = newType;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_TYPE_REALIZATION__TYPE, oldType, type ) );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public Enumerator getTypeKind() {
-        return typeKind;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void setTypeKind( Enumerator newTypeKind ) {
-        Enumerator oldTypeKind = typeKind;
-        typeKind = newTypeKind;
-        boolean oldTypeKindESet = typeKindESet;
-        typeKindESet = true;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SERVICE_TYPE_REALIZATION__TYPE_KIND, oldTypeKind, typeKind, !oldTypeKindESet ) );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void unsetTypeKind() {
-        Enumerator oldTypeKind = typeKind;
-        boolean oldTypeKindESet = typeKindESet;
-        typeKind = TYPE_KIND_EDEFAULT;
-        typeKindESet = false;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
-                NsdPackage.SERVICE_TYPE_REALIZATION__TYPE_KIND, oldTypeKind, TYPE_KIND_EDEFAULT, oldTypeKindESet ) );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public boolean isSetTypeKind() {
-        return typeKindESet;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public Object eGet( int featureID, boolean resolve, boolean coreType ) {
-        switch( featureID ) {
-        case NsdPackage.SERVICE_TYPE_REALIZATION__FC:
-            return getFc();
-        case NsdPackage.SERVICE_TYPE_REALIZATION__NAME:
-            return getName();
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND:
-            return getPresCond();
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS:
-            return getPresCondArgs();
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS_ID:
-            return getPresCondArgsID();
-        case NsdPackage.SERVICE_TYPE_REALIZATION__TYPE:
-            return getType();
-        case NsdPackage.SERVICE_TYPE_REALIZATION__TYPE_KIND:
-            return getTypeKind();
-        }
-        return super.eGet( featureID, resolve, coreType );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void eSet( int featureID, Object newValue ) {
-        switch( featureID ) {
-        case NsdPackage.SERVICE_TYPE_REALIZATION__FC:
-            setFc( ( String ) newValue );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__NAME:
-            setName( ( String ) newValue );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND:
-            setPresCond( ( String ) newValue );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS:
-            setPresCondArgs( ( String ) newValue );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS_ID:
-            setPresCondArgsID( ( String ) newValue );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__TYPE:
-            setType( ( String ) newValue );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__TYPE_KIND:
-            setTypeKind( ( Enumerator ) newValue );
-            return;
-        }
-        super.eSet( featureID, newValue );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public void eUnset( int featureID ) {
-        switch( featureID ) {
-        case NsdPackage.SERVICE_TYPE_REALIZATION__FC:
-            setFc( FC_EDEFAULT );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__NAME:
-            setName( NAME_EDEFAULT );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND:
-            unsetPresCond();
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS:
-            setPresCondArgs( PRES_COND_ARGS_EDEFAULT );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS_ID:
-            setPresCondArgsID( PRES_COND_ARGS_ID_EDEFAULT );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__TYPE:
-            setType( TYPE_EDEFAULT );
-            return;
-        case NsdPackage.SERVICE_TYPE_REALIZATION__TYPE_KIND:
-            unsetTypeKind();
-            return;
-        }
-        super.eUnset( featureID );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public boolean eIsSet( int featureID ) {
-        switch( featureID ) {
-        case NsdPackage.SERVICE_TYPE_REALIZATION__FC:
-            return FC_EDEFAULT == null ? fc != null : !FC_EDEFAULT.equals( fc );
-        case NsdPackage.SERVICE_TYPE_REALIZATION__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND:
-            return isSetPresCond();
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS:
-            return PRES_COND_ARGS_EDEFAULT == null ? presCondArgs != null
-                    : !PRES_COND_ARGS_EDEFAULT.equals( presCondArgs );
-        case NsdPackage.SERVICE_TYPE_REALIZATION__PRES_COND_ARGS_ID:
-            return PRES_COND_ARGS_ID_EDEFAULT == null ? presCondArgsID != null
-                    : !PRES_COND_ARGS_ID_EDEFAULT.equals( presCondArgsID );
-        case NsdPackage.SERVICE_TYPE_REALIZATION__TYPE:
-            return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals( type );
-        case NsdPackage.SERVICE_TYPE_REALIZATION__TYPE_KIND:
-            return isSetTypeKind();
-        }
-        return super.eIsSet( featureID );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public String toString() {
-        if( eIsProxy() ) return super.toString();
-
-        StringBuilder result = new StringBuilder( super.toString() );
-        result.append( " (fc: " );
-        result.append( fc );
-        result.append( ", name: " );
-        result.append( name );
-        result.append( ", presCond: " );
-        if( presCondESet )
-            result.append( presCond );
-        else
-            result.append( "<unset>" );
-        result.append( ", presCondArgs: " );
-        result.append( presCondArgs );
-        result.append( ", presCondArgsID: " );
-        result.append( presCondArgsID );
-        result.append( ", type: " );
-        result.append( type );
-        result.append( ", typeKind: " );
-        if( typeKindESet )
-            result.append( typeKind );
-        else
-            result.append( "<unset>" );
-        result.append( ')' );
-        return result.toString();
-    }
-
-} //ServiceTypeRealizationImpl
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeRealizationsImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeRealizationsImpl.java
index 5d7837c..5390ad5 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeRealizationsImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/ServiceTypeRealizationsImpl.java
@@ -21,10 +21,12 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceNS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations;
 
 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;
@@ -32,9 +34,10 @@ 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.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
@@ -46,6 +49,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationsImpl#getServiceTypeRealization <em>Service Type Realization</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceTypeRealizationsImpl#getServiceNS <em>Service NS</em>}</li>
  * </ul>
  *
  * @generated
@@ -88,12 +92,97 @@ public class ServiceTypeRealizationsImpl extends MinimalEObjectImpl.Container im
     @Override
     public EList< ConstructedAttribute > getServiceTypeRealization() {
         if( serviceTypeRealization == null ) {
-            serviceTypeRealization = new EObjectContainmentEList< ConstructedAttribute >( ConstructedAttribute.class,
-                    this, NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION );
+            serviceTypeRealization = new EObjectContainmentWithInverseEList.Unsettable< ConstructedAttribute >(
+                    ConstructedAttribute.class, this, NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION,
+                    NsdPackage.CONSTRUCTED_ATTRIBUTE__SERVICE_TYPE_REALIZATIONS );
         }
         return serviceTypeRealization;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetServiceTypeRealization() {
+        if( serviceTypeRealization != null ) ( ( InternalEList.Unsettable< ? > ) serviceTypeRealization ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetServiceTypeRealization() {
+        return serviceTypeRealization != null && ( ( InternalEList.Unsettable< ? > ) serviceTypeRealization ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ServiceNS getServiceNS() {
+        if( eContainerFeatureID() != NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS ) return null;
+        return ( ServiceNS ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetServiceNS( ServiceNS newServiceNS, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newServiceNS, NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS,
+                msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setServiceNS( ServiceNS newServiceNS ) {
+        if( newServiceNS != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS
+                        && newServiceNS != null ) ) {
+            if( EcoreUtil.isAncestor( this, newServiceNS ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newServiceNS != null ) msgs = ( ( InternalEObject ) newServiceNS ).eInverseAdd( this,
+                    NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS, ServiceNS.class, msgs );
+            msgs = basicSetServiceNS( newServiceNS, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS, newServiceNS, newServiceNS ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getServiceTypeRealization() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetServiceNS( ( ServiceNS ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -104,10 +193,27 @@ public class ServiceTypeRealizationsImpl extends MinimalEObjectImpl.Container im
         switch( featureID ) {
         case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION:
             return ( ( InternalEList< ? > ) getServiceTypeRealization() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS:
+            return basicSetServiceNS( null, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.SERVICE_NS__SERVICE_TYPE_REALIZATIONS,
+                    ServiceNS.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -118,6 +224,8 @@ public class ServiceTypeRealizationsImpl extends MinimalEObjectImpl.Container im
         switch( featureID ) {
         case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION:
             return getServiceTypeRealization();
+        case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS:
+            return getServiceNS();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -135,6 +243,9 @@ public class ServiceTypeRealizationsImpl extends MinimalEObjectImpl.Container im
             getServiceTypeRealization().clear();
             getServiceTypeRealization().addAll( ( Collection< ? extends ConstructedAttribute > ) newValue );
             return;
+        case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -148,7 +259,10 @@ public class ServiceTypeRealizationsImpl extends MinimalEObjectImpl.Container im
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION:
-            getServiceTypeRealization().clear();
+            unsetServiceTypeRealization();
+            return;
+        case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS:
+            setServiceNS( ( ServiceNS ) null );
             return;
         }
         super.eUnset( featureID );
@@ -163,7 +277,9 @@ public class ServiceTypeRealizationsImpl extends MinimalEObjectImpl.Container im
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_TYPE_REALIZATION:
-            return serviceTypeRealization != null && !serviceTypeRealization.isEmpty();
+            return isSetServiceTypeRealization();
+        case NsdPackage.SERVICE_TYPE_REALIZATIONS__SERVICE_NS:
+            return getServiceNS() != null;
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java
index 3bbffb3..d18a214 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java
@@ -19,6 +19,7 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute;
@@ -27,11 +28,14 @@ import java.math.BigDecimal;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.Enumerator;
 
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -54,6 +58,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getSizeAttribute <em>Size Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getTypeKind <em>Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getConstructedAttribute <em>Constructed Attribute</em>}</li>
  * </ul>
  *
  * @generated
@@ -79,6 +84,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected String defaultValue = DEFAULT_VALUE_EDEFAULT;
 
+    /**
+     * This is true if the Default Value attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean defaultValueESet;
+
     /**
      * The default value of the '{@link #isIsArray() <em>Is Array</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -128,6 +142,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected String maxIndexAttribute = MAX_INDEX_ATTRIBUTE_EDEFAULT;
 
+    /**
+     * This is true if the Max Index Attribute attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean maxIndexAttributeESet;
+
     /**
      * The default value of the '{@link #getMaxValue() <em>Max Value</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -148,6 +171,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected BigDecimal maxValue = MAX_VALUE_EDEFAULT;
 
+    /**
+     * This is true if the Max Value attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean maxValueESet;
+
     /**
      * The default value of the '{@link #getMinIndex() <em>Min Index</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -197,6 +229,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected BigDecimal minValue = MIN_VALUE_EDEFAULT;
 
+    /**
+     * This is true if the Min Value attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean minValueESet;
+
     /**
      * The default value of the '{@link #getName() <em>Name</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -217,6 +258,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * The default value of the '{@link #getPresCond() <em>Pres Cond</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -266,6 +316,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected String presCondArgs = PRES_COND_ARGS_EDEFAULT;
 
+    /**
+     * This is true if the Pres Cond Args attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presCondArgsESet;
+
     /**
      * The default value of the '{@link #getPresCondArgsID() <em>Pres Cond Args ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -286,6 +345,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected String presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
 
+    /**
+     * This is true if the Pres Cond Args ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presCondArgsIDESet;
+
     /**
      * The default value of the '{@link #getSizeAttribute() <em>Size Attribute</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -306,6 +374,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected String sizeAttribute = SIZE_ATTRIBUTE_EDEFAULT;
 
+    /**
+     * This is true if the Size Attribute attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean sizeAttributeESet;
+
     /**
      * The default value of the '{@link #getType() <em>Type</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -326,6 +403,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected String type = TYPE_EDEFAULT;
 
+    /**
+     * This is true if the Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean typeESet;
+
     /**
      * The default value of the '{@link #getTypeKind() <em>Type Kind</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -394,8 +480,36 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public void setDefaultValue( String newDefaultValue ) {
         String oldDefaultValue = defaultValue;
         defaultValue = newDefaultValue;
+        boolean oldDefaultValueESet = defaultValueESet;
+        defaultValueESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_ATTRIBUTE__DEFAULT_VALUE, oldDefaultValue, defaultValue ) );
+                NsdPackage.SUB_DATA_ATTRIBUTE__DEFAULT_VALUE, oldDefaultValue, defaultValue, !oldDefaultValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetDefaultValue() {
+        String oldDefaultValue = defaultValue;
+        boolean oldDefaultValueESet = defaultValueESet;
+        defaultValue = DEFAULT_VALUE_EDEFAULT;
+        defaultValueESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SUB_DATA_ATTRIBUTE__DEFAULT_VALUE,
+                    oldDefaultValue, DEFAULT_VALUE_EDEFAULT, oldDefaultValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetDefaultValue() {
+        return defaultValueESet;
     }
 
     /**
@@ -467,8 +581,37 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public void setMaxIndexAttribute( String newMaxIndexAttribute ) {
         String oldMaxIndexAttribute = maxIndexAttribute;
         maxIndexAttribute = newMaxIndexAttribute;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_ATTRIBUTE__MAX_INDEX_ATTRIBUTE, oldMaxIndexAttribute, maxIndexAttribute ) );
+        boolean oldMaxIndexAttributeESet = maxIndexAttributeESet;
+        maxIndexAttributeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_ATTRIBUTE__MAX_INDEX_ATTRIBUTE,
+                    oldMaxIndexAttribute, maxIndexAttribute, !oldMaxIndexAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetMaxIndexAttribute() {
+        String oldMaxIndexAttribute = maxIndexAttribute;
+        boolean oldMaxIndexAttributeESet = maxIndexAttributeESet;
+        maxIndexAttribute = MAX_INDEX_ATTRIBUTE_EDEFAULT;
+        maxIndexAttributeESet = false;
+        if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.UNSET, NsdPackage.SUB_DATA_ATTRIBUTE__MAX_INDEX_ATTRIBUTE,
+                        oldMaxIndexAttribute, MAX_INDEX_ATTRIBUTE_EDEFAULT, oldMaxIndexAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetMaxIndexAttribute() {
+        return maxIndexAttributeESet;
     }
 
     /**
@@ -490,8 +633,35 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public void setMaxValue( BigDecimal newMaxValue ) {
         BigDecimal oldMaxValue = maxValue;
         maxValue = newMaxValue;
+        boolean oldMaxValueESet = maxValueESet;
+        maxValueESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_ATTRIBUTE__MAX_VALUE, oldMaxValue, maxValue ) );
+                NsdPackage.SUB_DATA_ATTRIBUTE__MAX_VALUE, oldMaxValue, maxValue, !oldMaxValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetMaxValue() {
+        BigDecimal oldMaxValue = maxValue;
+        boolean oldMaxValueESet = maxValueESet;
+        maxValue = MAX_VALUE_EDEFAULT;
+        maxValueESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SUB_DATA_ATTRIBUTE__MAX_VALUE, oldMaxValue, MAX_VALUE_EDEFAULT, oldMaxValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetMaxValue() {
+        return maxValueESet;
     }
 
     /**
@@ -563,8 +733,35 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public void setMinValue( BigDecimal newMinValue ) {
         BigDecimal oldMinValue = minValue;
         minValue = newMinValue;
+        boolean oldMinValueESet = minValueESet;
+        minValueESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_ATTRIBUTE__MIN_VALUE, oldMinValue, minValue ) );
+                NsdPackage.SUB_DATA_ATTRIBUTE__MIN_VALUE, oldMinValue, minValue, !oldMinValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetMinValue() {
+        BigDecimal oldMinValue = minValue;
+        boolean oldMinValueESet = minValueESet;
+        minValue = MIN_VALUE_EDEFAULT;
+        minValueESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SUB_DATA_ATTRIBUTE__MIN_VALUE, oldMinValue, MIN_VALUE_EDEFAULT, oldMinValueESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetMinValue() {
+        return minValueESet;
     }
 
     /**
@@ -586,8 +783,35 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_ATTRIBUTE__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SUB_DATA_ATTRIBUTE__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SUB_DATA_ATTRIBUTE__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
     }
 
     /**
@@ -659,8 +883,36 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public void setPresCondArgs( String newPresCondArgs ) {
         String oldPresCondArgs = presCondArgs;
         presCondArgs = newPresCondArgs;
+        boolean oldPresCondArgsESet = presCondArgsESet;
+        presCondArgsESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND_ARGS, oldPresCondArgs, presCondArgs ) );
+                NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND_ARGS, oldPresCondArgs, presCondArgs, !oldPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresCondArgs() {
+        String oldPresCondArgs = presCondArgs;
+        boolean oldPresCondArgsESet = presCondArgsESet;
+        presCondArgs = PRES_COND_ARGS_EDEFAULT;
+        presCondArgsESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND_ARGS,
+                    oldPresCondArgs, PRES_COND_ARGS_EDEFAULT, oldPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresCondArgs() {
+        return presCondArgsESet;
     }
 
     /**
@@ -682,8 +934,37 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public void setPresCondArgsID( String newPresCondArgsID ) {
         String oldPresCondArgsID = presCondArgsID;
         presCondArgsID = newPresCondArgsID;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND_ARGS_ID, oldPresCondArgsID, presCondArgsID ) );
+        boolean oldPresCondArgsIDESet = presCondArgsIDESet;
+        presCondArgsIDESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND_ARGS_ID,
+                    oldPresCondArgsID, presCondArgsID, !oldPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresCondArgsID() {
+        String oldPresCondArgsID = presCondArgsID;
+        boolean oldPresCondArgsIDESet = presCondArgsIDESet;
+        presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
+        presCondArgsIDESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND_ARGS_ID,
+                    oldPresCondArgsID, PRES_COND_ARGS_ID_EDEFAULT, oldPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresCondArgsID() {
+        return presCondArgsIDESet;
     }
 
     /**
@@ -705,8 +986,37 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public void setSizeAttribute( String newSizeAttribute ) {
         String oldSizeAttribute = sizeAttribute;
         sizeAttribute = newSizeAttribute;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_ATTRIBUTE__SIZE_ATTRIBUTE, oldSizeAttribute, sizeAttribute ) );
+        boolean oldSizeAttributeESet = sizeAttributeESet;
+        sizeAttributeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_ATTRIBUTE__SIZE_ATTRIBUTE,
+                    oldSizeAttribute, sizeAttribute, !oldSizeAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetSizeAttribute() {
+        String oldSizeAttribute = sizeAttribute;
+        boolean oldSizeAttributeESet = sizeAttributeESet;
+        sizeAttribute = SIZE_ATTRIBUTE_EDEFAULT;
+        sizeAttributeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SUB_DATA_ATTRIBUTE__SIZE_ATTRIBUTE,
+                    oldSizeAttribute, SIZE_ATTRIBUTE_EDEFAULT, oldSizeAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetSizeAttribute() {
+        return sizeAttributeESet;
     }
 
     /**
@@ -728,8 +1038,35 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public void setType( String newType ) {
         String oldType = type;
         type = newType;
-        if( eNotificationRequired() ) eNotify(
-                new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_ATTRIBUTE__TYPE, oldType, type ) );
+        boolean oldTypeESet = typeESet;
+        typeESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SUB_DATA_ATTRIBUTE__TYPE, oldType, type, !oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetType() {
+        String oldType = type;
+        boolean oldTypeESet = typeESet;
+        type = TYPE_EDEFAULT;
+        typeESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SUB_DATA_ATTRIBUTE__TYPE, oldType, TYPE_EDEFAULT, oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetType() {
+        return typeESet;
     }
 
     /**
@@ -782,6 +1119,98 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         return typeKindESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ConstructedAttribute getConstructedAttribute() {
+        if( eContainerFeatureID() != NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE ) return null;
+        return ( ConstructedAttribute ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetConstructedAttribute( ConstructedAttribute newConstructedAttribute,
+            NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newConstructedAttribute,
+                NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setConstructedAttribute( ConstructedAttribute newConstructedAttribute ) {
+        if( newConstructedAttribute != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE
+                        && newConstructedAttribute != null ) ) {
+            if( EcoreUtil.isAncestor( this, newConstructedAttribute ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) newConstructedAttribute ).eInverseAdd( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__SUB_DATA_ATTRIBUTE, ConstructedAttribute.class, msgs );
+            msgs = basicSetConstructedAttribute( newConstructedAttribute, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() ) eNotify(
+                new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE,
+                        newConstructedAttribute, newConstructedAttribute ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetConstructedAttribute( ( ConstructedAttribute ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
+            return basicSetConstructedAttribute( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.CONSTRUCTED_ATTRIBUTE__SUB_DATA_ATTRIBUTE,
+                    ConstructedAttribute.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -816,6 +1245,8 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
             return getType();
         case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE_KIND:
             return getTypeKind();
+        case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
+            return getConstructedAttribute();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -867,6 +1298,9 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE_KIND:
             setTypeKind( ( Enumerator ) newValue );
             return;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
+            setConstructedAttribute( ( ConstructedAttribute ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -880,44 +1314,47 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SUB_DATA_ATTRIBUTE__DEFAULT_VALUE:
-            setDefaultValue( DEFAULT_VALUE_EDEFAULT );
+            unsetDefaultValue();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__IS_ARRAY:
             unsetIsArray();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__MAX_INDEX_ATTRIBUTE:
-            setMaxIndexAttribute( MAX_INDEX_ATTRIBUTE_EDEFAULT );
+            unsetMaxIndexAttribute();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__MAX_VALUE:
-            setMaxValue( MAX_VALUE_EDEFAULT );
+            unsetMaxValue();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__MIN_INDEX:
             unsetMinIndex();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__MIN_VALUE:
-            setMinValue( MIN_VALUE_EDEFAULT );
+            unsetMinValue();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND:
             unsetPresCond();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND_ARGS:
-            setPresCondArgs( PRES_COND_ARGS_EDEFAULT );
+            unsetPresCondArgs();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND_ARGS_ID:
-            setPresCondArgsID( PRES_COND_ARGS_ID_EDEFAULT );
+            unsetPresCondArgsID();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__SIZE_ATTRIBUTE:
-            setSizeAttribute( SIZE_ATTRIBUTE_EDEFAULT );
+            unsetSizeAttribute();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE:
-            setType( TYPE_EDEFAULT );
+            unsetType();
             return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE_KIND:
             unsetTypeKind();
             return;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
+            setConstructedAttribute( ( ConstructedAttribute ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -931,36 +1368,33 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.SUB_DATA_ATTRIBUTE__DEFAULT_VALUE:
-            return DEFAULT_VALUE_EDEFAULT == null ? defaultValue != null
-                    : !DEFAULT_VALUE_EDEFAULT.equals( defaultValue );
+            return isSetDefaultValue();
         case NsdPackage.SUB_DATA_ATTRIBUTE__IS_ARRAY:
             return isSetIsArray();
         case NsdPackage.SUB_DATA_ATTRIBUTE__MAX_INDEX_ATTRIBUTE:
-            return MAX_INDEX_ATTRIBUTE_EDEFAULT == null ? maxIndexAttribute != null
-                    : !MAX_INDEX_ATTRIBUTE_EDEFAULT.equals( maxIndexAttribute );
+            return isSetMaxIndexAttribute();
         case NsdPackage.SUB_DATA_ATTRIBUTE__MAX_VALUE:
-            return MAX_VALUE_EDEFAULT == null ? maxValue != null : !MAX_VALUE_EDEFAULT.equals( maxValue );
+            return isSetMaxValue();
         case NsdPackage.SUB_DATA_ATTRIBUTE__MIN_INDEX:
             return isSetMinIndex();
         case NsdPackage.SUB_DATA_ATTRIBUTE__MIN_VALUE:
-            return MIN_VALUE_EDEFAULT == null ? minValue != null : !MIN_VALUE_EDEFAULT.equals( minValue );
+            return isSetMinValue();
         case NsdPackage.SUB_DATA_ATTRIBUTE__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
         case NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND:
             return isSetPresCond();
         case NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND_ARGS:
-            return PRES_COND_ARGS_EDEFAULT == null ? presCondArgs != null
-                    : !PRES_COND_ARGS_EDEFAULT.equals( presCondArgs );
+            return isSetPresCondArgs();
         case NsdPackage.SUB_DATA_ATTRIBUTE__PRES_COND_ARGS_ID:
-            return PRES_COND_ARGS_ID_EDEFAULT == null ? presCondArgsID != null
-                    : !PRES_COND_ARGS_ID_EDEFAULT.equals( presCondArgsID );
+            return isSetPresCondArgsID();
         case NsdPackage.SUB_DATA_ATTRIBUTE__SIZE_ATTRIBUTE:
-            return SIZE_ATTRIBUTE_EDEFAULT == null ? sizeAttribute != null
-                    : !SIZE_ATTRIBUTE_EDEFAULT.equals( sizeAttribute );
+            return isSetSizeAttribute();
         case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE:
-            return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals( type );
+            return isSetType();
         case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE_KIND:
             return isSetTypeKind();
+        case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
+            return getConstructedAttribute() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -976,38 +1410,65 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (defaultValue: " );
-        result.append( defaultValue );
+        if( defaultValueESet )
+            result.append( defaultValue );
+        else
+            result.append( "<unset>" );
         result.append( ", isArray: " );
         if( isArrayESet )
             result.append( isArray );
         else
             result.append( "<unset>" );
         result.append( ", maxIndexAttribute: " );
-        result.append( maxIndexAttribute );
+        if( maxIndexAttributeESet )
+            result.append( maxIndexAttribute );
+        else
+            result.append( "<unset>" );
         result.append( ", maxValue: " );
-        result.append( maxValue );
+        if( maxValueESet )
+            result.append( maxValue );
+        else
+            result.append( "<unset>" );
         result.append( ", minIndex: " );
         if( minIndexESet )
             result.append( minIndex );
         else
             result.append( "<unset>" );
         result.append( ", minValue: " );
-        result.append( minValue );
+        if( minValueESet )
+            result.append( minValue );
+        else
+            result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ", presCond: " );
         if( presCondESet )
             result.append( presCond );
         else
             result.append( "<unset>" );
         result.append( ", presCondArgs: " );
-        result.append( presCondArgs );
+        if( presCondArgsESet )
+            result.append( presCondArgs );
+        else
+            result.append( "<unset>" );
         result.append( ", presCondArgsID: " );
-        result.append( presCondArgsID );
+        if( presCondArgsIDESet )
+            result.append( presCondArgsID );
+        else
+            result.append( "<unset>" );
         result.append( ", sizeAttribute: " );
-        result.append( sizeAttribute );
+        if( sizeAttributeESet )
+            result.append( sizeAttribute );
+        else
+            result.append( "<unset>" );
         result.append( ", type: " );
-        result.append( type );
+        if( typeESet )
+            result.append( type );
+        else
+            result.append( "<unset>" );
         result.append( ", typeKind: " );
         if( typeKindESet )
             result.append( typeKind );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java
index 794ede0..6c18d30 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java
@@ -19,15 +19,19 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject;
 
 import org.eclipse.emf.common.notify.Notification;
 
+import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.ecore.EClass;
 
+import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 
 /**
  * <!-- begin-user-doc -->
@@ -48,6 +52,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getUnderlyingType <em>Underlying Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getUnderlyingTypeKind <em>Underlying Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getCDC <em>CDC</em>}</li>
  * </ul>
  *
  * @generated
@@ -102,6 +107,15 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
      */
     protected String maxIndexAttribute = MAX_INDEX_ATTRIBUTE_EDEFAULT;
 
+    /**
+     * This is true if the Max Index Attribute attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean maxIndexAttributeESet;
+
     /**
      * The default value of the '{@link #getMinIndex() <em>Min Index</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -151,6 +165,15 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
      */
     protected String name = NAME_EDEFAULT;
 
+    /**
+     * This is true if the Name attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean nameESet;
+
     /**
      * The default value of the '{@link #getPresCond() <em>Pres Cond</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -200,6 +223,15 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
      */
     protected String presCondArgs = PRES_COND_ARGS_EDEFAULT;
 
+    /**
+     * This is true if the Pres Cond Args attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presCondArgsESet;
+
     /**
      * The default value of the '{@link #getPresCondArgsID() <em>Pres Cond Args ID</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -220,6 +252,15 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
      */
     protected String presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
 
+    /**
+     * This is true if the Pres Cond Args ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean presCondArgsIDESet;
+
     /**
      * The default value of the '{@link #getSizeAttribute() <em>Size Attribute</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -240,6 +281,15 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
      */
     protected String sizeAttribute = SIZE_ATTRIBUTE_EDEFAULT;
 
+    /**
+     * This is true if the Size Attribute attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean sizeAttributeESet;
+
     /**
      * The default value of the '{@link #getType() <em>Type</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -260,6 +310,15 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
      */
     protected String type = TYPE_EDEFAULT;
 
+    /**
+     * This is true if the Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean typeESet;
+
     /**
      * The default value of the '{@link #getUnderlyingType() <em>Underlying Type</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -280,6 +339,15 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
      */
     protected String underlyingType = UNDERLYING_TYPE_EDEFAULT;
 
+    /**
+     * This is true if the Underlying Type attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean underlyingTypeESet;
+
     /**
      * The default value of the '{@link #getUnderlyingTypeKind() <em>Underlying Type Kind</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -397,8 +465,37 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
     public void setMaxIndexAttribute( String newMaxIndexAttribute ) {
         String oldMaxIndexAttribute = maxIndexAttribute;
         maxIndexAttribute = newMaxIndexAttribute;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_OBJECT__MAX_INDEX_ATTRIBUTE, oldMaxIndexAttribute, maxIndexAttribute ) );
+        boolean oldMaxIndexAttributeESet = maxIndexAttributeESet;
+        maxIndexAttributeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_OBJECT__MAX_INDEX_ATTRIBUTE,
+                    oldMaxIndexAttribute, maxIndexAttribute, !oldMaxIndexAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetMaxIndexAttribute() {
+        String oldMaxIndexAttribute = maxIndexAttribute;
+        boolean oldMaxIndexAttributeESet = maxIndexAttributeESet;
+        maxIndexAttribute = MAX_INDEX_ATTRIBUTE_EDEFAULT;
+        maxIndexAttributeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SUB_DATA_OBJECT__MAX_INDEX_ATTRIBUTE,
+                    oldMaxIndexAttribute, MAX_INDEX_ATTRIBUTE_EDEFAULT, oldMaxIndexAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetMaxIndexAttribute() {
+        return maxIndexAttributeESet;
     }
 
     /**
@@ -470,8 +567,35 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
     public void setName( String newName ) {
         String oldName = name;
         name = newName;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_OBJECT__NAME, oldName, name ) );
+        boolean oldNameESet = nameESet;
+        nameESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SUB_DATA_OBJECT__NAME, oldName, name, !oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetName() {
+        String oldName = name;
+        boolean oldNameESet = nameESet;
+        name = NAME_EDEFAULT;
+        nameESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SUB_DATA_OBJECT__NAME, oldName, NAME_EDEFAULT, oldNameESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetName() {
+        return nameESet;
     }
 
     /**
@@ -543,8 +667,36 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
     public void setPresCondArgs( String newPresCondArgs ) {
         String oldPresCondArgs = presCondArgs;
         presCondArgs = newPresCondArgs;
+        boolean oldPresCondArgsESet = presCondArgsESet;
+        presCondArgsESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_OBJECT__PRES_COND_ARGS, oldPresCondArgs, presCondArgs ) );
+                NsdPackage.SUB_DATA_OBJECT__PRES_COND_ARGS, oldPresCondArgs, presCondArgs, !oldPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresCondArgs() {
+        String oldPresCondArgs = presCondArgs;
+        boolean oldPresCondArgsESet = presCondArgsESet;
+        presCondArgs = PRES_COND_ARGS_EDEFAULT;
+        presCondArgsESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SUB_DATA_OBJECT__PRES_COND_ARGS,
+                    oldPresCondArgs, PRES_COND_ARGS_EDEFAULT, oldPresCondArgsESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresCondArgs() {
+        return presCondArgsESet;
     }
 
     /**
@@ -566,8 +718,37 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
     public void setPresCondArgsID( String newPresCondArgsID ) {
         String oldPresCondArgsID = presCondArgsID;
         presCondArgsID = newPresCondArgsID;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_OBJECT__PRES_COND_ARGS_ID, oldPresCondArgsID, presCondArgsID ) );
+        boolean oldPresCondArgsIDESet = presCondArgsIDESet;
+        presCondArgsIDESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_OBJECT__PRES_COND_ARGS_ID,
+                    oldPresCondArgsID, presCondArgsID, !oldPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetPresCondArgsID() {
+        String oldPresCondArgsID = presCondArgsID;
+        boolean oldPresCondArgsIDESet = presCondArgsIDESet;
+        presCondArgsID = PRES_COND_ARGS_ID_EDEFAULT;
+        presCondArgsIDESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SUB_DATA_OBJECT__PRES_COND_ARGS_ID,
+                    oldPresCondArgsID, PRES_COND_ARGS_ID_EDEFAULT, oldPresCondArgsIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetPresCondArgsID() {
+        return presCondArgsIDESet;
     }
 
     /**
@@ -589,8 +770,36 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
     public void setSizeAttribute( String newSizeAttribute ) {
         String oldSizeAttribute = sizeAttribute;
         sizeAttribute = newSizeAttribute;
+        boolean oldSizeAttributeESet = sizeAttributeESet;
+        sizeAttributeESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_OBJECT__SIZE_ATTRIBUTE, oldSizeAttribute, sizeAttribute ) );
+                NsdPackage.SUB_DATA_OBJECT__SIZE_ATTRIBUTE, oldSizeAttribute, sizeAttribute, !oldSizeAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetSizeAttribute() {
+        String oldSizeAttribute = sizeAttribute;
+        boolean oldSizeAttributeESet = sizeAttributeESet;
+        sizeAttribute = SIZE_ATTRIBUTE_EDEFAULT;
+        sizeAttributeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SUB_DATA_OBJECT__SIZE_ATTRIBUTE,
+                    oldSizeAttribute, SIZE_ATTRIBUTE_EDEFAULT, oldSizeAttributeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetSizeAttribute() {
+        return sizeAttributeESet;
     }
 
     /**
@@ -612,8 +821,35 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
     public void setType( String newType ) {
         String oldType = type;
         type = newType;
-        if( eNotificationRequired() )
-            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_OBJECT__TYPE, oldType, type ) );
+        boolean oldTypeESet = typeESet;
+        typeESet = true;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.SUB_DATA_OBJECT__TYPE, oldType, type, !oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetType() {
+        String oldType = type;
+        boolean oldTypeESet = typeESet;
+        type = TYPE_EDEFAULT;
+        typeESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.SUB_DATA_OBJECT__TYPE, oldType, TYPE_EDEFAULT, oldTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetType() {
+        return typeESet;
     }
 
     /**
@@ -635,8 +871,37 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
     public void setUnderlyingType( String newUnderlyingType ) {
         String oldUnderlyingType = underlyingType;
         underlyingType = newUnderlyingType;
-        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.SUB_DATA_OBJECT__UNDERLYING_TYPE, oldUnderlyingType, underlyingType ) );
+        boolean oldUnderlyingTypeESet = underlyingTypeESet;
+        underlyingTypeESet = true;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_OBJECT__UNDERLYING_TYPE,
+                    oldUnderlyingType, underlyingType, !oldUnderlyingTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetUnderlyingType() {
+        String oldUnderlyingType = underlyingType;
+        boolean oldUnderlyingTypeESet = underlyingTypeESet;
+        underlyingType = UNDERLYING_TYPE_EDEFAULT;
+        underlyingTypeESet = false;
+        if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.UNSET, NsdPackage.SUB_DATA_OBJECT__UNDERLYING_TYPE,
+                    oldUnderlyingType, UNDERLYING_TYPE_EDEFAULT, oldUnderlyingTypeESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetUnderlyingType() {
+        return underlyingTypeESet;
     }
 
     /**
@@ -691,6 +956,92 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         return underlyingTypeKindESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public CDC getCDC() {
+        if( eContainerFeatureID() != NsdPackage.SUB_DATA_OBJECT__CDC ) return null;
+        return ( CDC ) eInternalContainer();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetCDC( CDC newCDC, NotificationChain msgs ) {
+        msgs = eBasicSetContainer( ( InternalEObject ) newCDC, NsdPackage.SUB_DATA_OBJECT__CDC, msgs );
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setCDC( CDC newCDC ) {
+        if( newCDC != eInternalContainer()
+                || ( eContainerFeatureID() != NsdPackage.SUB_DATA_OBJECT__CDC && newCDC != null ) ) {
+            if( EcoreUtil.isAncestor( this, newCDC ) )
+                throw new IllegalArgumentException( "Recursive containment not allowed for " + toString() );
+            NotificationChain msgs = null;
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            if( newCDC != null ) msgs = ( ( InternalEObject ) newCDC ).eInverseAdd( this,
+                    NsdPackage.CDC__SUB_DATA_OBJECT, CDC.class, msgs );
+            msgs = basicSetCDC( newCDC, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else if( eNotificationRequired() )
+            eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_OBJECT__CDC, newCDC, newCDC ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SUB_DATA_OBJECT__CDC:
+            if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
+            return basicSetCDC( ( CDC ) otherEnd, msgs );
+        }
+        return super.eInverseAdd( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.SUB_DATA_OBJECT__CDC:
+            return basicSetCDC( null, msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eBasicRemoveFromContainerFeature( NotificationChain msgs ) {
+        switch( eContainerFeatureID() ) {
+        case NsdPackage.SUB_DATA_OBJECT__CDC:
+            return eInternalContainer().eInverseRemove( this, NsdPackage.CDC__SUB_DATA_OBJECT, CDC.class, msgs );
+        }
+        return super.eBasicRemoveFromContainerFeature( msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -721,6 +1072,8 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
             return getUnderlyingType();
         case NsdPackage.SUB_DATA_OBJECT__UNDERLYING_TYPE_KIND:
             return getUnderlyingTypeKind();
+        case NsdPackage.SUB_DATA_OBJECT__CDC:
+            return getCDC();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -766,6 +1119,9 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         case NsdPackage.SUB_DATA_OBJECT__UNDERLYING_TYPE_KIND:
             setUnderlyingTypeKind( ( DefinedAttributeTypeKind ) newValue );
             return;
+        case NsdPackage.SUB_DATA_OBJECT__CDC:
+            setCDC( ( CDC ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -782,35 +1138,38 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
             unsetIsArray();
             return;
         case NsdPackage.SUB_DATA_OBJECT__MAX_INDEX_ATTRIBUTE:
-            setMaxIndexAttribute( MAX_INDEX_ATTRIBUTE_EDEFAULT );
+            unsetMaxIndexAttribute();
             return;
         case NsdPackage.SUB_DATA_OBJECT__MIN_INDEX:
             unsetMinIndex();
             return;
         case NsdPackage.SUB_DATA_OBJECT__NAME:
-            setName( NAME_EDEFAULT );
+            unsetName();
             return;
         case NsdPackage.SUB_DATA_OBJECT__PRES_COND:
             unsetPresCond();
             return;
         case NsdPackage.SUB_DATA_OBJECT__PRES_COND_ARGS:
-            setPresCondArgs( PRES_COND_ARGS_EDEFAULT );
+            unsetPresCondArgs();
             return;
         case NsdPackage.SUB_DATA_OBJECT__PRES_COND_ARGS_ID:
-            setPresCondArgsID( PRES_COND_ARGS_ID_EDEFAULT );
+            unsetPresCondArgsID();
             return;
         case NsdPackage.SUB_DATA_OBJECT__SIZE_ATTRIBUTE:
-            setSizeAttribute( SIZE_ATTRIBUTE_EDEFAULT );
+            unsetSizeAttribute();
             return;
         case NsdPackage.SUB_DATA_OBJECT__TYPE:
-            setType( TYPE_EDEFAULT );
+            unsetType();
             return;
         case NsdPackage.SUB_DATA_OBJECT__UNDERLYING_TYPE:
-            setUnderlyingType( UNDERLYING_TYPE_EDEFAULT );
+            unsetUnderlyingType();
             return;
         case NsdPackage.SUB_DATA_OBJECT__UNDERLYING_TYPE_KIND:
             unsetUnderlyingTypeKind();
             return;
+        case NsdPackage.SUB_DATA_OBJECT__CDC:
+            setCDC( ( CDC ) null );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -826,30 +1185,27 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         case NsdPackage.SUB_DATA_OBJECT__IS_ARRAY:
             return isSetIsArray();
         case NsdPackage.SUB_DATA_OBJECT__MAX_INDEX_ATTRIBUTE:
-            return MAX_INDEX_ATTRIBUTE_EDEFAULT == null ? maxIndexAttribute != null
-                    : !MAX_INDEX_ATTRIBUTE_EDEFAULT.equals( maxIndexAttribute );
+            return isSetMaxIndexAttribute();
         case NsdPackage.SUB_DATA_OBJECT__MIN_INDEX:
             return isSetMinIndex();
         case NsdPackage.SUB_DATA_OBJECT__NAME:
-            return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals( name );
+            return isSetName();
         case NsdPackage.SUB_DATA_OBJECT__PRES_COND:
             return isSetPresCond();
         case NsdPackage.SUB_DATA_OBJECT__PRES_COND_ARGS:
-            return PRES_COND_ARGS_EDEFAULT == null ? presCondArgs != null
-                    : !PRES_COND_ARGS_EDEFAULT.equals( presCondArgs );
+            return isSetPresCondArgs();
         case NsdPackage.SUB_DATA_OBJECT__PRES_COND_ARGS_ID:
-            return PRES_COND_ARGS_ID_EDEFAULT == null ? presCondArgsID != null
-                    : !PRES_COND_ARGS_ID_EDEFAULT.equals( presCondArgsID );
+            return isSetPresCondArgsID();
         case NsdPackage.SUB_DATA_OBJECT__SIZE_ATTRIBUTE:
-            return SIZE_ATTRIBUTE_EDEFAULT == null ? sizeAttribute != null
-                    : !SIZE_ATTRIBUTE_EDEFAULT.equals( sizeAttribute );
+            return isSetSizeAttribute();
         case NsdPackage.SUB_DATA_OBJECT__TYPE:
-            return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals( type );
+            return isSetType();
         case NsdPackage.SUB_DATA_OBJECT__UNDERLYING_TYPE:
-            return UNDERLYING_TYPE_EDEFAULT == null ? underlyingType != null
-                    : !UNDERLYING_TYPE_EDEFAULT.equals( underlyingType );
+            return isSetUnderlyingType();
         case NsdPackage.SUB_DATA_OBJECT__UNDERLYING_TYPE_KIND:
             return isSetUnderlyingTypeKind();
+        case NsdPackage.SUB_DATA_OBJECT__CDC:
+            return getCDC() != null;
         }
         return super.eIsSet( featureID );
     }
@@ -870,29 +1226,50 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         else
             result.append( "<unset>" );
         result.append( ", maxIndexAttribute: " );
-        result.append( maxIndexAttribute );
+        if( maxIndexAttributeESet )
+            result.append( maxIndexAttribute );
+        else
+            result.append( "<unset>" );
         result.append( ", minIndex: " );
         if( minIndexESet )
             result.append( minIndex );
         else
             result.append( "<unset>" );
         result.append( ", name: " );
-        result.append( name );
+        if( nameESet )
+            result.append( name );
+        else
+            result.append( "<unset>" );
         result.append( ", presCond: " );
         if( presCondESet )
             result.append( presCond );
         else
             result.append( "<unset>" );
         result.append( ", presCondArgs: " );
-        result.append( presCondArgs );
+        if( presCondArgsESet )
+            result.append( presCondArgs );
+        else
+            result.append( "<unset>" );
         result.append( ", presCondArgsID: " );
-        result.append( presCondArgsID );
+        if( presCondArgsIDESet )
+            result.append( presCondArgsID );
+        else
+            result.append( "<unset>" );
         result.append( ", sizeAttribute: " );
-        result.append( sizeAttribute );
+        if( sizeAttributeESet )
+            result.append( sizeAttribute );
+        else
+            result.append( "<unset>" );
         result.append( ", type: " );
-        result.append( type );
+        if( typeESet )
+            result.append( type );
+        else
+            result.append( "<unset>" );
         result.append( ", underlyingType: " );
-        result.append( underlyingType );
+        if( underlyingTypeESet )
+            result.append( underlyingType );
+        else
+            result.append( "<unset>" );
         result.append( ", underlyingTypeKind: " );
         if( underlyingTypeKindESet )
             result.append( underlyingTypeKind );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/TitledClassImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/TitledClassImpl.java
index af44452..122510d 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/TitledClassImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/TitledClassImpl.java
@@ -62,6 +62,15 @@ public class TitledClassImpl extends DocumentedClassImpl implements TitledClass
      */
     protected String titleID = TITLE_ID_EDEFAULT;
 
+    /**
+     * This is true if the Title ID attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean titleIDESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -100,8 +109,35 @@ public class TitledClassImpl extends DocumentedClassImpl implements TitledClass
     public void setTitleID( String newTitleID ) {
         String oldTitleID = titleID;
         titleID = newTitleID;
+        boolean oldTitleIDESet = titleIDESet;
+        titleIDESet = true;
         if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
-                NsdPackage.TITLED_CLASS__TITLE_ID, oldTitleID, titleID ) );
+                NsdPackage.TITLED_CLASS__TITLE_ID, oldTitleID, titleID, !oldTitleIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetTitleID() {
+        String oldTitleID = titleID;
+        boolean oldTitleIDESet = titleIDESet;
+        titleID = TITLE_ID_EDEFAULT;
+        titleIDESet = false;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                NsdPackage.TITLED_CLASS__TITLE_ID, oldTitleID, TITLE_ID_EDEFAULT, oldTitleIDESet ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetTitleID() {
+        return titleIDESet;
     }
 
     /**
@@ -142,7 +178,7 @@ public class TitledClassImpl extends DocumentedClassImpl implements TitledClass
     public void eUnset( int featureID ) {
         switch( featureID ) {
         case NsdPackage.TITLED_CLASS__TITLE_ID:
-            setTitleID( TITLE_ID_EDEFAULT );
+            unsetTitleID();
             return;
         }
         super.eUnset( featureID );
@@ -157,7 +193,7 @@ public class TitledClassImpl extends DocumentedClassImpl implements TitledClass
     public boolean eIsSet( int featureID ) {
         switch( featureID ) {
         case NsdPackage.TITLED_CLASS__TITLE_ID:
-            return TITLE_ID_EDEFAULT == null ? titleID != null : !TITLE_ID_EDEFAULT.equals( titleID );
+            return isSetTitleID();
         }
         return super.eIsSet( featureID );
     }
@@ -173,7 +209,10 @@ public class TitledClassImpl extends DocumentedClassImpl implements TitledClass
 
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (titleID: " );
-        result.append( titleID );
+        if( titleIDESet )
+            result.append( titleID );
+        else
+            result.append( "<unset>" );
         result.append( ')' );
         return result.toString();
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdAdapterFactory.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdAdapterFactory.java
index 5ab5368..6a3eec5 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdAdapterFactory.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdAdapterFactory.java
@@ -89,8 +89,8 @@ public class NsdAdapterFactory extends AdapterFactoryImpl {
         }
 
         @Override
-        public Adapter caseDependsOnType( DependsOnType object ) {
-            return createDependsOnTypeAdapter();
+        public Adapter caseDependsOn( DependsOn object ) {
+            return createDependsOnAdapter();
         }
 
         @Override
@@ -308,11 +308,6 @@ public class NsdAdapterFactory extends AdapterFactoryImpl {
             return createServiceParameterAdapter();
         }
 
-        @Override
-        public Adapter caseServiceTypeRealization( ServiceTypeRealization object ) {
-            return createServiceTypeRealizationAdapter();
-        }
-
         @Override
         public Adapter caseServiceTypeRealizations( ServiceTypeRealizations object ) {
             return createServiceTypeRealizationsAdapter();
@@ -372,16 +367,16 @@ public class NsdAdapterFactory extends AdapterFactoryImpl {
     }
 
     /**
-     * Creates a new adapter for an object of class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType <em>Depends On Type</em>}'.
+     * Creates a new adapter for an object of class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn <em>Depends On</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 fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOnType
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn
      * @generated
      */
-    public Adapter createDependsOnTypeAdapter() {
+    public Adapter createDependsOnAdapter() {
         return null;
     }
 
@@ -987,20 +982,6 @@ public class NsdAdapterFactory extends AdapterFactoryImpl {
         return null;
     }
 
-    /**
-     * Creates a new adapter for an object of class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization <em>Service Type Realization</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 fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealization
-     * @generated
-     */
-    public Adapter createServiceTypeRealizationAdapter() {
-        return null;
-    }
-
     /**
      * Creates a new adapter for an object of class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations <em>Service Type Realizations</em>}'.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java
new file mode 100644
index 0000000..a577890
--- /dev/null
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java
@@ -0,0 +1,134 @@
+/**
+ *  Copyright (c) 2019 CentraleSupélec & EDF.
+ *  All rights reserved. This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License v1.0
+ *  which accompanies this distribution, and is available at
+ *  http://www.eclipse.org/legal/epl-v10.html
+ * 
+ *  This file is part of the RiseClipse tool
+ *  
+ *  Contributors:
+ *      Computer Science Department, CentraleSupélec
+ *      EDF R&D
+ *  Contacts:
+ *      dominique.marcadet@centralesupelec.fr
+ *      aurelie.dehouck-neveu@edf.fr
+ *  Web site:
+ *      http://wdi.supelec.fr/software/RiseClipse/
+ * 
+ */
+package fr.centralesupelec.edf.riseclipse.iec61850.nsd.util;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+public class NsdResourceSetImpl extends ResourceSetImpl {
+
+    public NsdResourceSetImpl() {
+        super();
+    }
+
+    /*
+     * Constraints
+     *   NSDoc:
+     *     Name: uniqueDocID                           Selector: nsd:Doc                           Field: @id
+     *     Within an NSDoc element, there shall not be two Doc sub-elements with same id.
+     *   CDCs/CDC:
+     *     Name: uniqueCDCChild                        Selector: *                                 Field: @name
+     *     For a CDC, there shall not be two sub-elements (SubDataObject or DataAttribute) with same name.
+     *   ConstructedAttributes/ConstructedAttribute:
+     *     Name: uniqueSubDataAttribute                Selector: nsd:SubDataAttribute              Field: @name
+     *     For a ConstructedAttribute, there shall not be two SubDataAttribute sub-elements with same name.
+     *   Enumerations/Enumeration:
+     *     Name: uniqueLiteralName                     Selector: nsd:Literal                       Field: @name
+     *     For an Enumeration, there shall not be two Literal sub-elements with same name.
+     *   Enumerations/Enumeration:
+     *     Name: uniqueLiteralVal                      Selector: nsd:Literal                       Field: @literalVal
+     *     For an Enumeration, there shall not be two Literal sub-elements with same liiteralVal.
+     *   FunctionalConstraint/ApplicableServices:
+     *     Name: uniqueDataSetMemberOf                 Selector: nsd:DataSetMemberOf               Field: @cb
+     *   FunctionalConstraint/ApplicableServices:
+     *     Name: uniqueService                         Selector: nsd:Service                       Field: @name
+     *   LNClasses/AbstractLNClass:
+     *     Name: uniqueDataObjectAbstractLNClass       Selector: nsd:DataObject                    Field: @name
+     *     For a AbstractLNClass, there shall not be two DataObject sub-elements with same name.
+     *   LNClasses/LNClass:
+     *     Name: uniqueDataObject                      Selector: nsd:DataObject                    Field: @name
+     *     For a LNClass, there shall not be two DataObject sub-elements with same name.
+     *   NS/FunctionalConstraints:
+     *     Name: uniqueFunctionalConstraint            Selector: nsd:FunctionalConstraint          Field: @abbreviation
+     *     There shall not be two FunctionalConstraint elements with same abbreviation.
+     *   NS/PresenceConditions:
+     *     Name: uniquePresenceCondition               Selector: nsd:PresenceCondition             Field: @name
+     *     There shall not be two PresenceCondition elements with same name.
+     *   NS/Abbreviations:
+     *     Name: uniqueAbbreviation                    Selector: nsd:Abbreviation                  Field: @name
+     *     There shall not be two Abbreviations elements with same name.
+     *   NS/Enumerations:
+     *     Name: uniqueEnumeration                     Selector: nsd:Enumeration                   Field: @name
+     *     Within an NS, there shall not be two Enumeration sub-elements with same name.
+     *   NS/ConstructedAttributes
+     *     Name: uniqueConstructedAttribute            Selector: nsd:ConstructedAttribute          Field: @name
+     *     Within an NS, there shall not be two ConstructedAttribute sub-elements with same name.
+     *   NS/CDCs:
+     *     Name: uniqueCDC                             Selector: nsd:CDC                           Field: @name @variant
+     *     Within an NS, there shall not be two CDC sub-elements with same name and (if defined) variant.
+     *   NS/LNClasses:
+     *     Name: uniqueAbstractLNClass                 Selector: nsd:AbstractLNClass               Field: @name
+     *     Within an NS, there shall not be two AbstractLNClass sub-elements with same name.
+     *     Name: uniqueLNClass              Selector: nsd:LNClass        Field: @name
+     *     Within an NS, there shall not be two LNClass sub-elements with same name.
+     *   ServiceCDCs/ServiceCDC:
+     *     Name: uniqueServiceCDCChild                 Selector: nsd:ServiceDataAttribute          Field: @name
+     *     For a CDC, there shall not be two ServiceDataAttribute sub-elements with same name.
+     *   ServiceConstructedAttributes/ServiceConstructedAttribute:
+     *     Name: uniqueSubDataAttribute_Service     Selector: nsd:SubDataAttribute                 Field: @name
+     *     For a ConstructedAttribute, there shall not be two SubDataAttribute sub-elements with same name.
+     *   ServiceNS/FunctionalConstraints:
+     *     Name: uniqueFunctionalConstraint_Service    Selector: nsd:FunctionalConstraint          Field: @abbreviation
+     *     There shall not be two FunctionalConstraint elements with same abbreviation.
+     *   ServiceNS/PresenceConditions:
+     *     Name: uniquePresenceCondition_Service       Selector: nsd:PresenceCondition             Field: @name
+     *     There shall not be two PresenceCondition elements with same name.
+     *   ServiceNS/Abbreviations:
+     *     Name: uniqueAbbreviation_Service            Selector: nsd:Abbreviation                  Field: @name
+     *     There shall not be two Abbreviations elements with same name.
+     *   ServiceNS/ServiceConstructedAttributes:
+     *     Name: uniqueServiceConstructedAttribute     Selector: nsd:ServiceConstructedAttribute   Field: @name
+     *     Within an ServiceNS, there shall not be two ServiceConstructedAttribute sub-elements with same name.
+     *   ServiceNS/ServiceCDCs:
+     *     Name: uniqueServiceCDC                      Selector: nsd:ServiceCDC                    Field: @cdc @variant
+     *     Within an ServiceNS, there shall not be two ServiceCDC sub-elements with same name and (if defined) variant.
+     *   
+     *   
+     * The following links are implicit:
+     *   DependsOn.id                       -> NS.id
+     *   AnyLNClass.base                    -> AbstractLNClass  
+     *   DataObject.type                    -> CDC.name
+     *   DataObject.presCond                -> PresenceCondition.name
+     *   DataObject.dsPresCond              -> PresenceCondition.name
+     *   SubDataObject.type                 -> CDC.name
+     *   SubDataObject.presCond             -> PresenceCondition.name
+     *   SubDataObject.sizeAttribute        -> DataAttribute.name
+     *   SubDataObject.maxIndexAttribute    -> DataAttribute.name
+     *   DataAttribute.fc                   -> FunctionalConstraint.abbreviation
+     *   DataAttribute.presCond             -> PresenceCondition.name
+     *   DataAttribute.sizeAttribute        -> DataAttribute.name
+     *   DataAttribute.maxIndexAttribute    -> DataAttribute.name
+     *   ServiceParameter.name              -> DataAttribute.name (?)
+     *   SubDataAttribute.presCond          -> PresenceCondition.name
+     *   SubDataAttribute.sizeAttribute     -> DataAttribute.name
+     *   SubDataAttribute.maxIndexAttribute -> DataAttribute.name
+     *   Enumeration.inheritedFrom          -> Enumeration.name
+     *   ServiceCDC.cdc                     -> CDC.name (?)
+     *   ServiceDataAttribute.fc            -> FunctionalConstraint.abbreviation
+     *   ServiceDataAttribute.presCond      -> PresenceCondition.name
+     *   AppliesTo.id                       -> NS.id
+     *   ServiceTypeRealization.fc          -> FunctionalConstraint.abbreviation
+     *   ServiceTypeRealization.presCond    -> PresenceCondition.name
+     */
+    public void createExplicitLinks() {
+        //for( resource : get)
+        
+    }
+
+}
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdSwitch.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdSwitch.java
index 1d6b61d..a45ed77 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdSwitch.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdSwitch.java
@@ -90,10 +90,10 @@ public class NsdSwitch< T > extends Switch< T > {
             if( result == null ) result = defaultCase( theEObject );
             return result;
         }
-        case NsdPackage.DEPENDS_ON_TYPE: {
-            DependsOnType dependsOnType = ( DependsOnType ) theEObject;
-            T result = caseDependsOnType( dependsOnType );
-            if( result == null ) result = caseNSDObjectWithVersionAndRelease( dependsOnType );
+        case NsdPackage.DEPENDS_ON: {
+            DependsOn dependsOn = ( DependsOn ) theEObject;
+            T result = caseDependsOn( dependsOn );
+            if( result == null ) result = caseNSDObjectWithVersionAndRelease( dependsOn );
             if( result == null ) result = defaultCase( theEObject );
             return result;
         }
@@ -386,12 +386,6 @@ public class NsdSwitch< T > extends Switch< T > {
             if( result == null ) result = defaultCase( theEObject );
             return result;
         }
-        case NsdPackage.SERVICE_TYPE_REALIZATION: {
-            ServiceTypeRealization serviceTypeRealization = ( ServiceTypeRealization ) theEObject;
-            T result = caseServiceTypeRealization( serviceTypeRealization );
-            if( result == null ) result = defaultCase( theEObject );
-            return result;
-        }
         case NsdPackage.SERVICE_TYPE_REALIZATIONS: {
             ServiceTypeRealizations serviceTypeRealizations = ( ServiceTypeRealizations ) theEObject;
             T result = caseServiceTypeRealizations( serviceTypeRealizations );
@@ -446,17 +440,17 @@ public class NsdSwitch< T > extends Switch< T > {
     }
 
     /**
-     * Returns the result of interpreting the object as an instance of '<em>Depends On Type</em>'.
+     * Returns the result of interpreting the object as an instance of '<em>Depends On</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>Depends On Type</em>'.
+     * @return the result of interpreting the object as an instance of '<em>Depends On</em>'.
      * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
      * @generated
      */
-    public T caseDependsOnType( DependsOnType object ) {
+    public T caseDependsOn( DependsOn object ) {
         return null;
     }
 
@@ -1105,21 +1099,6 @@ public class NsdSwitch< T > extends Switch< T > {
         return null;
     }
 
-    /**
-     * Returns the result of interpreting the object as an instance of '<em>Service Type Realization</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 Type Realization</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-    public T caseServiceTypeRealization( ServiceTypeRealization object ) {
-        return null;
-    }
-
     /**
      * Returns the result of interpreting the object as an instance of '<em>Service Type Realizations</em>'.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdValidator.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdValidator.java
index e3d00b4..0c90dc5 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdValidator.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdValidator.java
@@ -108,8 +108,8 @@ public class NsdValidator extends EObjectValidator {
         switch( classifierID ) {
         case NsdPackage.APPLIES_TO_TYPE:
             return validateAppliesToType( ( AppliesToType ) value, diagnostics, context );
-        case NsdPackage.DEPENDS_ON_TYPE:
-            return validateDependsOnType( ( DependsOnType ) value, diagnostics, context );
+        case NsdPackage.DEPENDS_ON:
+            return validateDependsOn( ( DependsOn ) value, diagnostics, context );
         case NsdPackage.DOCUMENT_ROOT:
             return validateDocumentRoot( ( DocumentRoot ) value, diagnostics, context );
         case NsdPackage.SERVICE_TYPE:
@@ -196,8 +196,6 @@ public class NsdValidator extends EObjectValidator {
             return validateServiceNsUsage( ( ServiceNsUsage ) value, diagnostics, context );
         case NsdPackage.SERVICE_PARAMETER:
             return validateServiceParameter( ( ServiceParameter ) value, diagnostics, context );
-        case NsdPackage.SERVICE_TYPE_REALIZATION:
-            return validateServiceTypeRealization( ( ServiceTypeRealization ) value, diagnostics, context );
         case NsdPackage.SERVICE_TYPE_REALIZATIONS:
             return validateServiceTypeRealizations( ( ServiceTypeRealizations ) value, diagnostics, context );
         case NsdPackage.SUB_DATA_ATTRIBUTE:
@@ -256,9 +254,9 @@ public class NsdValidator extends EObjectValidator {
      * <!-- end-user-doc -->
      * @generated
      */
-    public boolean validateDependsOnType( DependsOnType dependsOnType, DiagnosticChain diagnostics,
+    public boolean validateDependsOn( DependsOn dependsOn, DiagnosticChain diagnostics,
             Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( dependsOnType, diagnostics, context );
+        return validate_EveryDefaultConstraint( dependsOn, diagnostics, context );
     }
 
     /**
@@ -681,16 +679,6 @@ public class NsdValidator extends EObjectValidator {
         return validate_EveryDefaultConstraint( serviceParameter, diagnostics, context );
     }
 
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public boolean validateServiceTypeRealization( ServiceTypeRealization serviceTypeRealization,
-            DiagnosticChain diagnostics, Map< Object, Object > context ) {
-        return validate_EveryDefaultConstraint( serviceTypeRealization, diagnostics, context );
-    }
-
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-- 
GitLab