From 1f510be14a34eed2b5dc9feb5573ba731eb3b50a Mon Sep 17 00:00:00 2001
From: Dominique Marcadet <Dominique.Marcadet@centralesupelec.fr>
Date: Tue, 21 May 2019 13:44:45 +0200
Subject: [PATCH] update links for types

move links to BasicType/ConstructedAttribute/Enumeration from
DataAttribute to AgAttribuuteType and add code for creating links
SubDataAttribute
---
 .../plugin.properties                         |   6 +
 .../provider/AgAttributeTypeItemProvider.java |  69 +++
 .../nsd/provider/BasicTypeItemProvider.java   |  12 +-
 .../ConstructedAttributeItemProvider.java     |  12 +-
 .../provider/DataAttributeItemProvider.java   |  46 +-
 .../nsd/provider/EnumerationItemProvider.java |  12 +-
 .../ServiceDataAttributeItemProvider.java     |  69 +++
 .../ServiceParameterItemProvider.java         |  69 +++
 .../SubDataAttributeItemProvider.java         |  69 +++
 .../model/nsd.ecore                           |  36 +-
 .../model/nsd.genmodel                        |  12 +-
 .../iec61850/nsd/AgAttributeType.java         | 156 +++++
 .../riseclipse/iec61850/nsd/BasicType.java    |  42 +-
 .../iec61850/nsd/ConstructedAttribute.java    |  38 +-
 .../iec61850/nsd/DataAttribute.java           | 160 ------
 .../riseclipse/iec61850/nsd/Enumeration.java  |  38 +-
 .../riseclipse/iec61850/nsd/NsdPackage.java   | 413 +++++++++-----
 .../nsd/impl/AgAttributeTypeImpl.java         | 490 ++++++++++++++++
 .../iec61850/nsd/impl/BasicTypeImpl.java      |  60 +-
 .../nsd/impl/ConstructedAttributeImpl.java    |  56 +-
 .../iec61850/nsd/impl/DataAttributeImpl.java  | 273 ++++-----
 .../iec61850/nsd/impl/EnumerationImpl.java    |  56 +-
 .../iec61850/nsd/impl/NsdPackageImpl.java     | 118 ++--
 .../nsd/impl/ServiceDataAttributeImpl.java    | 483 +++++++++++++++-
 .../nsd/impl/ServiceParameterImpl.java        | 476 ++++++++++++++++
 .../nsd/impl/SubDataAttributeImpl.java        | 538 +++++++++++++++++-
 26 files changed, 3106 insertions(+), 703 deletions(-)

diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
index 3cbb7f4..d28e4e7 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
@@ -577,3 +577,9 @@ _UI_ConstructedAttribute_referredByDataAttribute_feature = Referred By Data Attr
 _UI_DataAttribute_refersToConstructedAttribute_feature = Refers To Constructed Attribute
 _UI_DataAttribute_refersToEnumeration_feature = Refers To Enumeration
 _UI_Enumeration_referredByDataAttribute_feature = Referred By Data Attribute
+_UI_BasicType_referredByAttributeType_feature = Referred By Attribute Type
+_UI_ConstructedAttribute_referredByAttributeType_feature = Referred By Attribute Type
+_UI_Enumeration_referredByAttributeType_feature = Referred By Attribute Type
+_UI_AgAttributeType_refersToBasicType_feature = Refers To Basic Type
+_UI_AgAttributeType_refersToConstructedAttribute_feature = Refers To Constructed Attribute
+_UI_AgAttributeType_refersToEnumeration_feature = Refers To Enumeration
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/AgAttributeTypeItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/AgAttributeTypeItemProvider.java
index 875a70d..8b5cdac 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/AgAttributeTypeItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/AgAttributeTypeItemProvider.java
@@ -72,6 +72,9 @@ public class AgAttributeTypeItemProvider extends ItemProviderAdapter implements
 
             addTypePropertyDescriptor( object );
             addTypeKindPropertyDescriptor( object );
+            addRefersToBasicTypePropertyDescriptor( object );
+            addRefersToConstructedAttributePropertyDescriptor( object );
+            addRefersToEnumerationPropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -120,6 +123,72 @@ public class AgAttributeTypeItemProvider extends ItemProviderAdapter implements
                         null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Refers To Basic Type feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToBasicTypePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(),
+                        getString( "_UI_AgAttributeType_refersToBasicType_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_AgAttributeType_refersToBasicType_feature", "_UI_AgAttributeType_type" ),
+                        NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE,
+                        true,
+                        false,
+                        true,
+                        null,
+                        null,
+                        null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Constructed Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToConstructedAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                getResourceLocator(),
+                getString( "_UI_AgAttributeType_refersToConstructedAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_AgAttributeType_refersToConstructedAttribute_feature", "_UI_AgAttributeType_type" ),
+                NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE,
+                true,
+                false,
+                true,
+                null,
+                null,
+                null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Enumeration feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToEnumerationPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(),
+                        getString( "_UI_AgAttributeType_refersToEnumeration_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_AgAttributeType_refersToEnumeration_feature", "_UI_AgAttributeType_type" ),
+                        NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION,
+                        true,
+                        false,
+                        true,
+                        null,
+                        null,
+                        null ) );
+    }
+
     /**
      * This returns the label text for the adapted class.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/BasicTypeItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/BasicTypeItemProvider.java
index 8a7aed6..1169887 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/BasicTypeItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/BasicTypeItemProvider.java
@@ -62,7 +62,7 @@ public class BasicTypeItemProvider extends NsdObjectItemProvider {
 
             addDescIDPropertyDescriptor( object );
             addNamePropertyDescriptor( object );
-            addReferredByDataAttributePropertyDescriptor( object );
+            addReferredByAttributeTypePropertyDescriptor( object );
             addRefersToDocPropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
@@ -113,19 +113,19 @@ public class BasicTypeItemProvider extends NsdObjectItemProvider {
     }
 
     /**
-     * This adds a property descriptor for the Referred By Data Attribute feature.
+     * This adds a property descriptor for the Referred By Attribute Type feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    protected void addReferredByDataAttributePropertyDescriptor( Object object ) {
+    protected void addReferredByAttributeTypePropertyDescriptor( Object object ) {
         itemPropertyDescriptors.add(
                 createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
                         getResourceLocator(),
-                        getString( "_UI_BasicType_referredByDataAttribute_feature" ),
+                        getString( "_UI_BasicType_referredByAttributeType_feature" ),
                         getString( "_UI_PropertyDescriptor_description",
-                                "_UI_BasicType_referredByDataAttribute_feature", "_UI_BasicType_type" ),
-                        NsdPackage.Literals.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE,
+                                "_UI_BasicType_referredByAttributeType_feature", "_UI_BasicType_type" ),
+                        NsdPackage.Literals.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE,
                         true,
                         false,
                         true,
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ConstructedAttributeItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ConstructedAttributeItemProvider.java
index 3d2396a..0969324 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ConstructedAttributeItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ConstructedAttributeItemProvider.java
@@ -65,7 +65,7 @@ public class ConstructedAttributeItemProvider extends TitledClassItemProvider {
             super.getPropertyDescriptors( object );
 
             addNamePropertyDescriptor( object );
-            addReferredByDataAttributePropertyDescriptor( object );
+            addReferredByAttributeTypePropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -93,19 +93,19 @@ public class ConstructedAttributeItemProvider extends TitledClassItemProvider {
     }
 
     /**
-     * This adds a property descriptor for the Referred By Data Attribute feature.
+     * This adds a property descriptor for the Referred By Attribute Type feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    protected void addReferredByDataAttributePropertyDescriptor( Object object ) {
+    protected void addReferredByAttributeTypePropertyDescriptor( Object object ) {
         itemPropertyDescriptors.add( createItemPropertyDescriptor(
                 ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
                 getResourceLocator(),
-                getString( "_UI_ConstructedAttribute_referredByDataAttribute_feature" ),
+                getString( "_UI_ConstructedAttribute_referredByAttributeType_feature" ),
                 getString( "_UI_PropertyDescriptor_description",
-                        "_UI_ConstructedAttribute_referredByDataAttribute_feature", "_UI_ConstructedAttribute_type" ),
-                NsdPackage.Literals.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE,
+                        "_UI_ConstructedAttribute_referredByAttributeType_feature", "_UI_ConstructedAttribute_type" ),
+                NsdPackage.Literals.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE,
                 true,
                 false,
                 true,
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataAttributeItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataAttributeItemProvider.java
index 434ceb7..be24f64 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataAttributeItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataAttributeItemProvider.java
@@ -74,6 +74,9 @@ public class DataAttributeItemProvider extends DocumentedClassItemProvider {
             addQchgPropertyDescriptor( object );
             addTypePropertyDescriptor( object );
             addTypeKindPropertyDescriptor( object );
+            addRefersToBasicTypePropertyDescriptor( object );
+            addRefersToConstructedAttributePropertyDescriptor( object );
+            addRefersToEnumerationPropertyDescriptor( object );
             addDefaultValuePropertyDescriptor( object );
             addMaxValuePropertyDescriptor( object );
             addMinValuePropertyDescriptor( object );
@@ -87,9 +90,6 @@ public class DataAttributeItemProvider extends DocumentedClassItemProvider {
             addRefersToMaxIndexAttributePropertyDescriptor( object );
             addReferredByDataAttributeAsSizeAttributePropertyDescriptor( object );
             addReferredByDataAttributeAsMaxIndexAttributePropertyDescriptor( object );
-            addRefersToBasicTypePropertyDescriptor( object );
-            addRefersToConstructedAttributePropertyDescriptor( object );
-            addRefersToEnumerationPropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -502,10 +502,10 @@ public class DataAttributeItemProvider extends DocumentedClassItemProvider {
         itemPropertyDescriptors.add(
                 createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
                         getResourceLocator(),
-                        getString( "_UI_DataAttribute_refersToBasicType_feature" ),
-                        getString( "_UI_PropertyDescriptor_description", "_UI_DataAttribute_refersToBasicType_feature",
-                                "_UI_DataAttribute_type" ),
-                        NsdPackage.Literals.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE,
+                        getString( "_UI_AgAttributeType_refersToBasicType_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_AgAttributeType_refersToBasicType_feature", "_UI_AgAttributeType_type" ),
+                        NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE,
                         true,
                         false,
                         true,
@@ -521,19 +521,19 @@ public class DataAttributeItemProvider extends DocumentedClassItemProvider {
      * @generated
      */
     protected void addRefersToConstructedAttributePropertyDescriptor( Object object ) {
-        itemPropertyDescriptors.add(
-                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
-                        getResourceLocator(),
-                        getString( "_UI_DataAttribute_refersToConstructedAttribute_feature" ),
-                        getString( "_UI_PropertyDescriptor_description",
-                                "_UI_DataAttribute_refersToConstructedAttribute_feature", "_UI_DataAttribute_type" ),
-                        NsdPackage.Literals.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE,
-                        true,
-                        false,
-                        true,
-                        null,
-                        null,
-                        null ) );
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                getResourceLocator(),
+                getString( "_UI_AgAttributeType_refersToConstructedAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_AgAttributeType_refersToConstructedAttribute_feature", "_UI_AgAttributeType_type" ),
+                NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE,
+                true,
+                false,
+                true,
+                null,
+                null,
+                null ) );
     }
 
     /**
@@ -546,10 +546,10 @@ public class DataAttributeItemProvider extends DocumentedClassItemProvider {
         itemPropertyDescriptors.add(
                 createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
                         getResourceLocator(),
-                        getString( "_UI_DataAttribute_refersToEnumeration_feature" ),
+                        getString( "_UI_AgAttributeType_refersToEnumeration_feature" ),
                         getString( "_UI_PropertyDescriptor_description",
-                                "_UI_DataAttribute_refersToEnumeration_feature", "_UI_DataAttribute_type" ),
-                        NsdPackage.Literals.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION,
+                                "_UI_AgAttributeType_refersToEnumeration_feature", "_UI_AgAttributeType_type" ),
+                        NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION,
                         true,
                         false,
                         true,
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/EnumerationItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/EnumerationItemProvider.java
index 1ad2c32..75be837 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/EnumerationItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/EnumerationItemProvider.java
@@ -68,7 +68,7 @@ public class EnumerationItemProvider extends TitledClassItemProvider {
             addNamePropertyDescriptor( object );
             addRefersToBaseEnumerationPropertyDescriptor( object );
             addReferredByEnumerationAsBasePropertyDescriptor( object );
-            addReferredByDataAttributePropertyDescriptor( object );
+            addReferredByAttributeTypePropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -162,19 +162,19 @@ public class EnumerationItemProvider extends TitledClassItemProvider {
     }
 
     /**
-     * This adds a property descriptor for the Referred By Data Attribute feature.
+     * This adds a property descriptor for the Referred By Attribute Type feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    protected void addReferredByDataAttributePropertyDescriptor( Object object ) {
+    protected void addReferredByAttributeTypePropertyDescriptor( Object object ) {
         itemPropertyDescriptors.add(
                 createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
                         getResourceLocator(),
-                        getString( "_UI_Enumeration_referredByDataAttribute_feature" ),
+                        getString( "_UI_Enumeration_referredByAttributeType_feature" ),
                         getString( "_UI_PropertyDescriptor_description",
-                                "_UI_Enumeration_referredByDataAttribute_feature", "_UI_Enumeration_type" ),
-                        NsdPackage.Literals.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE,
+                                "_UI_Enumeration_referredByAttributeType_feature", "_UI_Enumeration_type" ),
+                        NsdPackage.Literals.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE,
                         true,
                         false,
                         true,
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceDataAttributeItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceDataAttributeItemProvider.java
index c6f4248..488b4fd 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceDataAttributeItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceDataAttributeItemProvider.java
@@ -67,6 +67,9 @@ public class ServiceDataAttributeItemProvider extends DocumentedClassItemProvide
             addRefersToPresCondArgsDocPropertyDescriptor( object );
             addTypePropertyDescriptor( object );
             addTypeKindPropertyDescriptor( object );
+            addRefersToBasicTypePropertyDescriptor( object );
+            addRefersToConstructedAttributePropertyDescriptor( object );
+            addRefersToEnumerationPropertyDescriptor( object );
             addUnderlyingTypePropertyDescriptor( object );
             addUnderlyingTypeKindPropertyDescriptor( object );
             addFcPropertyDescriptor( object );
@@ -251,6 +254,72 @@ public class ServiceDataAttributeItemProvider extends DocumentedClassItemProvide
                         null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Refers To Basic Type feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToBasicTypePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(),
+                        getString( "_UI_AgAttributeType_refersToBasicType_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_AgAttributeType_refersToBasicType_feature", "_UI_AgAttributeType_type" ),
+                        NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE,
+                        true,
+                        false,
+                        true,
+                        null,
+                        null,
+                        null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Constructed Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToConstructedAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                getResourceLocator(),
+                getString( "_UI_AgAttributeType_refersToConstructedAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_AgAttributeType_refersToConstructedAttribute_feature", "_UI_AgAttributeType_type" ),
+                NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE,
+                true,
+                false,
+                true,
+                null,
+                null,
+                null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Enumeration feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToEnumerationPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(),
+                        getString( "_UI_AgAttributeType_refersToEnumeration_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_AgAttributeType_refersToEnumeration_feature", "_UI_AgAttributeType_type" ),
+                        NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION,
+                        true,
+                        false,
+                        true,
+                        null,
+                        null,
+                        null ) );
+    }
+
     /**
      * This adds a property descriptor for the Underlying Type feature.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceParameterItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceParameterItemProvider.java
index 1aabf04..7dcb0b1 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceParameterItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/ServiceParameterItemProvider.java
@@ -63,6 +63,9 @@ public class ServiceParameterItemProvider extends DocumentedClassItemProvider {
 
             addTypePropertyDescriptor( object );
             addTypeKindPropertyDescriptor( object );
+            addRefersToBasicTypePropertyDescriptor( object );
+            addRefersToConstructedAttributePropertyDescriptor( object );
+            addRefersToEnumerationPropertyDescriptor( object );
             addDefaultValuePropertyDescriptor( object );
             addMaxValuePropertyDescriptor( object );
             addMinValuePropertyDescriptor( object );
@@ -203,6 +206,72 @@ public class ServiceParameterItemProvider extends DocumentedClassItemProvider {
                         null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Refers To Basic Type feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToBasicTypePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(),
+                        getString( "_UI_AgAttributeType_refersToBasicType_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_AgAttributeType_refersToBasicType_feature", "_UI_AgAttributeType_type" ),
+                        NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE,
+                        true,
+                        false,
+                        true,
+                        null,
+                        null,
+                        null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Constructed Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToConstructedAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                getResourceLocator(),
+                getString( "_UI_AgAttributeType_refersToConstructedAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_AgAttributeType_refersToConstructedAttribute_feature", "_UI_AgAttributeType_type" ),
+                NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE,
+                true,
+                false,
+                true,
+                null,
+                null,
+                null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Enumeration feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToEnumerationPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(),
+                        getString( "_UI_AgAttributeType_refersToEnumeration_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_AgAttributeType_refersToEnumeration_feature", "_UI_AgAttributeType_type" ),
+                        NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION,
+                        true,
+                        false,
+                        true,
+                        null,
+                        null,
+                        null ) );
+    }
+
     /**
      * This returns ServiceParameter.gif.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataAttributeItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataAttributeItemProvider.java
index dd8e9cd..9475c5f 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataAttributeItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataAttributeItemProvider.java
@@ -71,6 +71,9 @@ public class SubDataAttributeItemProvider extends DocumentedClassItemProvider {
             addSizeAttributePropertyDescriptor( object );
             addTypePropertyDescriptor( object );
             addTypeKindPropertyDescriptor( object );
+            addRefersToBasicTypePropertyDescriptor( object );
+            addRefersToConstructedAttributePropertyDescriptor( object );
+            addRefersToEnumerationPropertyDescriptor( object );
             addDefaultValuePropertyDescriptor( object );
             addMaxValuePropertyDescriptor( object );
             addMinValuePropertyDescriptor( object );
@@ -410,6 +413,72 @@ public class SubDataAttributeItemProvider extends DocumentedClassItemProvider {
                         null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Refers To Basic Type feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToBasicTypePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(),
+                        getString( "_UI_AgAttributeType_refersToBasicType_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_AgAttributeType_refersToBasicType_feature", "_UI_AgAttributeType_type" ),
+                        NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE,
+                        true,
+                        false,
+                        true,
+                        null,
+                        null,
+                        null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Constructed Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToConstructedAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                getResourceLocator(),
+                getString( "_UI_AgAttributeType_refersToConstructedAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_AgAttributeType_refersToConstructedAttribute_feature", "_UI_AgAttributeType_type" ),
+                NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE,
+                true,
+                false,
+                true,
+                null,
+                null,
+                null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Enumeration feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToEnumerationPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(),
+                        getString( "_UI_AgAttributeType_refersToEnumeration_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_AgAttributeType_refersToEnumeration_feature", "_UI_AgAttributeType_type" ),
+                        NsdPackage.Literals.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION,
+                        true,
+                        false,
+                        true,
+                        null,
+                        null,
+                        null ) );
+    }
+
     /**
      * This returns SubDataAttribute.gif.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
index ad6bba0..21a928e 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
@@ -402,9 +402,9 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="parentBasicTypes" ordered="false"
         eType="#//BasicTypes" transient="true" unsettable="true" resolveProxies="false"
         eOpposite="#//BasicTypes/basicType"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataAttribute"
-        ordered="false" upperBound="-1" eType="#//DataAttribute" transient="true"
-        unsettable="true" resolveProxies="false" eOpposite="#//DataAttribute/refersToBasicType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByAttributeType"
+        ordered="false" upperBound="-1" eType="#//AgAttributeType" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//AgAttributeType/refersToBasicType"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="refersToDoc" ordered="false"
         eType="#//Doc" transient="true" unsettable="true" resolveProxies="false" eOpposite="#//Doc/referredByBasicType"/>
   </eClassifiers>
@@ -641,9 +641,9 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="parentServiceTypeRealizations"
         ordered="false" eType="#//ServiceTypeRealizations" transient="true" unsettable="true"
         resolveProxies="false" eOpposite="#//ServiceTypeRealizations/serviceTypeRealization"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataAttribute"
-        ordered="false" upperBound="-1" eType="#//DataAttribute" transient="true"
-        unsettable="true" resolveProxies="false" eOpposite="#//DataAttribute/refersToConstructedAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByAttributeType"
+        ordered="false" upperBound="-1" eType="#//AgAttributeType" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//AgAttributeType/refersToConstructedAttribute"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ConstructedAttributes" eSuperTypes="#//NsdObject">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -762,15 +762,6 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataAttributeAsMaxIndexAttribute"
         ordered="false" upperBound="-1" eType="#//DataAttribute" transient="true"
         unsettable="true" resolveProxies="false" eOpposite="#//DataAttribute/refersToMaxIndexAttribute"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToBasicType" ordered="false"
-        eType="#//BasicType" transient="true" unsettable="true" resolveProxies="false"
-        eOpposite="#//BasicType/referredByDataAttribute"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToConstructedAttribute"
-        ordered="false" eType="#//ConstructedAttribute" transient="true" unsettable="true"
-        resolveProxies="false" eOpposite="#//ConstructedAttribute/referredByDataAttribute"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToEnumeration" ordered="false"
-        eType="#//Enumeration" transient="true" unsettable="true" resolveProxies="false"
-        eOpposite="#//Enumeration/referredByDataAttribute"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DataObject" eSuperTypes="#//DocumentedClass #//AgPresenceCondition #//AgPresenceConditionDerivedStatistics #//AgUnderlyingType">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1010,9 +1001,9 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="referredByEnumerationAsBase"
         ordered="false" upperBound="-1" eType="#//Enumeration" transient="true" unsettable="true"
         resolveProxies="false" eOpposite="#//Enumeration/refersToBaseEnumeration"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataAttribute"
-        ordered="false" upperBound="-1" eType="#//DataAttribute" transient="true"
-        unsettable="true" resolveProxies="false" eOpposite="#//DataAttribute/refersToEnumeration"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByAttributeType"
+        ordered="false" upperBound="-1" eType="#//AgAttributeType" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//AgAttributeType/refersToEnumeration"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Enumerations" eSuperTypes="#//NsdObject">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -2089,6 +2080,15 @@
         <details key="name" value="typeKind"/>
       </eAnnotations>
     </eStructuralFeatures>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToBasicType" ordered="false"
+        eType="#//BasicType" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//BasicType/referredByAttributeType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToConstructedAttribute"
+        ordered="false" eType="#//ConstructedAttribute" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//ConstructedAttribute/referredByAttributeType"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToEnumeration" ordered="false"
+        eType="#//Enumeration" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//Enumeration/referredByAttributeType"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="AgAttributeTypeAndValues" abstract="true"
       eSuperTypes="#//AgAttributeType">
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
index 4df83de..f51dc57 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
@@ -164,7 +164,7 @@
       <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/parentBasicTypes"/>
-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//BasicType/referredByDataAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//BasicType/referredByAttributeType"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//BasicType/refersToDoc"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//BasicTypes">
@@ -203,7 +203,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//ConstructedAttribute/name"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ConstructedAttribute/parentConstructedAttributes"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//ConstructedAttribute/parentServiceTypeRealizations"/>
-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//ConstructedAttribute/referredByDataAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//ConstructedAttribute/referredByAttributeType"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ConstructedAttributes">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ConstructedAttributes/constructedAttribute"/>
@@ -229,9 +229,6 @@
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/refersToMaxIndexAttribute"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/referredByDataAttributeAsSizeAttribute"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/referredByDataAttributeAsMaxIndexAttribute"/>
-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/refersToBasicType"/>
-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/refersToConstructedAttribute"/>
-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/refersToEnumeration"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//DataObject">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataObject/name"/>
@@ -274,7 +271,7 @@
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Enumeration/parentEnumerations"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//Enumeration/refersToBaseEnumeration"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//Enumeration/referredByEnumerationAsBase"/>
-      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//Enumeration/referredByDataAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//Enumeration/referredByAttributeType"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//Enumerations">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//Enumerations/enumeration"/>
@@ -481,6 +478,9 @@
     <genClasses image="false" ecoreClass="nsd.ecore#//AgAttributeType">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//AgAttributeType/type"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//AgAttributeType/typeKind"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//AgAttributeType/refersToBasicType"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//AgAttributeType/refersToConstructedAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//AgAttributeType/refersToEnumeration"/>
     </genClasses>
     <genClasses image="false" ecoreClass="nsd.ecore#//AgAttributeTypeAndValues">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//AgAttributeTypeAndValues/defaultValue"/>
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AgAttributeType.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AgAttributeType.java
index fec38ee..e718d03 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AgAttributeType.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AgAttributeType.java
@@ -34,6 +34,9 @@ import org.eclipse.emf.ecore.EObject;
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getTypeKind <em>Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToBasicType <em>Refers To Basic Type</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToEnumeration <em>Refers To Enumeration</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAgAttributeType()
@@ -150,4 +153,157 @@ public interface AgAttributeType extends EObject {
      */
     boolean isSetTypeKind();
 
+    /**
+     * Returns the value of the '<em><b>Refers To Basic Type</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByAttributeType <em>Referred By Attribute Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Refers To Basic Type</em>' reference.
+     * @see #isSetRefersToBasicType()
+     * @see #unsetRefersToBasicType()
+     * @see #setRefersToBasicType(BasicType)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAgAttributeType_RefersToBasicType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByAttributeType
+     * @model opposite="referredByAttributeType" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    BasicType getRefersToBasicType();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToBasicType <em>Refers To Basic Type</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Basic Type</em>' reference.
+     * @see #isSetRefersToBasicType()
+     * @see #unsetRefersToBasicType()
+     * @see #getRefersToBasicType()
+     * @generated
+     */
+    void setRefersToBasicType( BasicType value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToBasicType <em>Refers To Basic Type</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToBasicType()
+     * @see #getRefersToBasicType()
+     * @see #setRefersToBasicType(BasicType)
+     * @generated
+     */
+    void unsetRefersToBasicType();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToBasicType <em>Refers To Basic Type</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Basic Type</em>' reference is set.
+     * @see #unsetRefersToBasicType()
+     * @see #getRefersToBasicType()
+     * @see #setRefersToBasicType(BasicType)
+     * @generated
+     */
+    boolean isSetRefersToBasicType();
+
+    /**
+     * Returns the value of the '<em><b>Refers To Constructed Attribute</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByAttributeType <em>Referred By Attribute Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Refers To Constructed Attribute</em>' reference.
+     * @see #isSetRefersToConstructedAttribute()
+     * @see #unsetRefersToConstructedAttribute()
+     * @see #setRefersToConstructedAttribute(ConstructedAttribute)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAgAttributeType_RefersToConstructedAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByAttributeType
+     * @model opposite="referredByAttributeType" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    ConstructedAttribute getRefersToConstructedAttribute();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Constructed Attribute</em>' reference.
+     * @see #isSetRefersToConstructedAttribute()
+     * @see #unsetRefersToConstructedAttribute()
+     * @see #getRefersToConstructedAttribute()
+     * @generated
+     */
+    void setRefersToConstructedAttribute( ConstructedAttribute value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToConstructedAttribute()
+     * @see #getRefersToConstructedAttribute()
+     * @see #setRefersToConstructedAttribute(ConstructedAttribute)
+     * @generated
+     */
+    void unsetRefersToConstructedAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Constructed Attribute</em>' reference is set.
+     * @see #unsetRefersToConstructedAttribute()
+     * @see #getRefersToConstructedAttribute()
+     * @see #setRefersToConstructedAttribute(ConstructedAttribute)
+     * @generated
+     */
+    boolean isSetRefersToConstructedAttribute();
+
+    /**
+     * Returns the value of the '<em><b>Refers To Enumeration</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByAttributeType <em>Referred By Attribute Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Refers To Enumeration</em>' reference.
+     * @see #isSetRefersToEnumeration()
+     * @see #unsetRefersToEnumeration()
+     * @see #setRefersToEnumeration(Enumeration)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getAgAttributeType_RefersToEnumeration()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByAttributeType
+     * @model opposite="referredByAttributeType" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    Enumeration getRefersToEnumeration();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToEnumeration <em>Refers To Enumeration</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Enumeration</em>' reference.
+     * @see #isSetRefersToEnumeration()
+     * @see #unsetRefersToEnumeration()
+     * @see #getRefersToEnumeration()
+     * @generated
+     */
+    void setRefersToEnumeration( Enumeration value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToEnumeration <em>Refers To Enumeration</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToEnumeration()
+     * @see #getRefersToEnumeration()
+     * @see #setRefersToEnumeration(Enumeration)
+     * @generated
+     */
+    void unsetRefersToEnumeration();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToEnumeration <em>Refers To Enumeration</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Enumeration</em>' reference is set.
+     * @see #unsetRefersToEnumeration()
+     * @see #getRefersToEnumeration()
+     * @see #setRefersToEnumeration(Enumeration)
+     * @generated
+     */
+    boolean isSetRefersToEnumeration();
+
 } // AgAttributeType
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 fcd6d93..6f6bf5e 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
@@ -33,7 +33,7 @@ import org.eclipse.emf.common.util.EList;
  *   <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#getParentBasicTypes <em>Parent Basic Types</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByAttributeType <em>Referred By Attribute Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getRefersToDoc <em>Refers To Doc</em>}</li>
  * </ul>
  *
@@ -169,45 +169,41 @@ public interface BasicType extends NsdObject {
     void setParentBasicTypes( BasicTypes value );
 
     /**
-     * Returns the value of the '<em><b>Referred By Data Attribute</b></em>' 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#getRefersToBasicType <em>Refers To Basic Type</em>}'.
+     * Returns the value of the '<em><b>Referred By Attribute Type</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToBasicType <em>Refers To Basic Type</em>}'.
      * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Referred By Data Attribute</em>' reference isn't clear,
-     * there really should be more of a description here...
-     * </p>
      * <!-- end-user-doc -->
-     * @return the value of the '<em>Referred By Data Attribute</em>' reference list.
-     * @see #isSetReferredByDataAttribute()
-     * @see #unsetReferredByDataAttribute()
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getBasicType_ReferredByDataAttribute()
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToBasicType
+     * @return the value of the '<em>Referred By Attribute Type</em>' reference list.
+     * @see #isSetReferredByAttributeType()
+     * @see #unsetReferredByAttributeType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getBasicType_ReferredByAttributeType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToBasicType
      * @model opposite="refersToBasicType" resolveProxies="false" unsettable="true" transient="true" ordered="false"
      * @generated
      */
-    EList< DataAttribute > getReferredByDataAttribute();
+    EList< AgAttributeType > getReferredByAttributeType();
 
     /**
-     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByDataAttribute <em>Referred By Data Attribute</em>}' reference list.
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByAttributeType <em>Referred By Attribute Type</em>}' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see #isSetReferredByDataAttribute()
-     * @see #getReferredByDataAttribute()
+     * @see #isSetReferredByAttributeType()
+     * @see #getReferredByAttributeType()
      * @generated
      */
-    void unsetReferredByDataAttribute();
+    void unsetReferredByAttributeType();
 
     /**
-     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByDataAttribute <em>Referred By Data Attribute</em>}' reference list is set.
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByAttributeType <em>Referred By Attribute Type</em>}' reference list is set.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return whether the value of the '<em>Referred By Data Attribute</em>' reference list is set.
-     * @see #unsetReferredByDataAttribute()
-     * @see #getReferredByDataAttribute()
+     * @return whether the value of the '<em>Referred By Attribute Type</em>' reference list is set.
+     * @see #unsetReferredByAttributeType()
+     * @see #getReferredByAttributeType()
      * @generated
      */
-    boolean isSetReferredByDataAttribute();
+    boolean isSetReferredByAttributeType();
 
     /**
      * Returns the value of the '<em><b>Refers To Doc</b></em>' reference.
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 11dfcf7..a5129ee 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
@@ -34,7 +34,7 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getParentConstructedAttributes <em>Parent Constructed Attributes</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getParentServiceTypeRealizations <em>Parent Service Type Realizations</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByAttributeType <em>Referred By Attribute Type</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttribute()
@@ -185,40 +185,40 @@ public interface ConstructedAttribute extends TitledClass {
     void setParentServiceTypeRealizations( ServiceTypeRealizations value );
 
     /**
-     * Returns the value of the '<em><b>Referred By Data Attribute</b></em>' 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#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}'.
+     * Returns the value of the '<em><b>Referred By Attribute Type</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return the value of the '<em>Referred By Data Attribute</em>' reference list.
-     * @see #isSetReferredByDataAttribute()
-     * @see #unsetReferredByDataAttribute()
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttribute_ReferredByDataAttribute()
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToConstructedAttribute
+     * @return the value of the '<em>Referred By Attribute Type</em>' reference list.
+     * @see #isSetReferredByAttributeType()
+     * @see #unsetReferredByAttributeType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getConstructedAttribute_ReferredByAttributeType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToConstructedAttribute
      * @model opposite="refersToConstructedAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
      * @generated
      */
-    EList< DataAttribute > getReferredByDataAttribute();
+    EList< AgAttributeType > getReferredByAttributeType();
 
     /**
-     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByDataAttribute <em>Referred By Data Attribute</em>}' reference list.
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByAttributeType <em>Referred By Attribute Type</em>}' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see #isSetReferredByDataAttribute()
-     * @see #getReferredByDataAttribute()
+     * @see #isSetReferredByAttributeType()
+     * @see #getReferredByAttributeType()
      * @generated
      */
-    void unsetReferredByDataAttribute();
+    void unsetReferredByAttributeType();
 
     /**
-     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByDataAttribute <em>Referred By Data Attribute</em>}' reference list is set.
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByAttributeType <em>Referred By Attribute Type</em>}' reference list is set.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return whether the value of the '<em>Referred By Data Attribute</em>' reference list is set.
-     * @see #unsetReferredByDataAttribute()
-     * @see #getReferredByDataAttribute()
+     * @return whether the value of the '<em>Referred By Attribute Type</em>' reference list is set.
+     * @see #unsetReferredByAttributeType()
+     * @see #getReferredByAttributeType()
      * @generated
      */
-    boolean isSetReferredByDataAttribute();
+    boolean isSetReferredByAttributeType();
 
 } // ConstructedAttribute
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 02955f2..20c3f6e 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
@@ -41,9 +41,6 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsSizeAttribute <em>Referred By Data Attribute As Size Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsMaxIndexAttribute <em>Referred By Data Attribute As Max Index Attribute</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToBasicType <em>Refers To Basic Type</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToEnumeration <em>Refers To Enumeration</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute()
@@ -562,161 +559,4 @@ public interface DataAttribute
      */
     boolean isSetReferredByDataAttributeAsMaxIndexAttribute();
 
-    /**
-     * Returns the value of the '<em><b>Refers To Basic Type</b></em>' reference.
-     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByDataAttribute <em>Referred By Data Attribute</em>}'.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Refers To Basic Type</em>' reference isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Refers To Basic Type</em>' reference.
-     * @see #isSetRefersToBasicType()
-     * @see #unsetRefersToBasicType()
-     * @see #setRefersToBasicType(BasicType)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_RefersToBasicType()
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByDataAttribute
-     * @model opposite="referredByDataAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
-     * @generated
-     */
-    BasicType getRefersToBasicType();
-
-    /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToBasicType <em>Refers To Basic Type</em>}' reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Refers To Basic Type</em>' reference.
-     * @see #isSetRefersToBasicType()
-     * @see #unsetRefersToBasicType()
-     * @see #getRefersToBasicType()
-     * @generated
-     */
-    void setRefersToBasicType( BasicType value );
-
-    /**
-     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToBasicType <em>Refers To Basic Type</em>}' reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #isSetRefersToBasicType()
-     * @see #getRefersToBasicType()
-     * @see #setRefersToBasicType(BasicType)
-     * @generated
-     */
-    void unsetRefersToBasicType();
-
-    /**
-     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToBasicType <em>Refers To Basic Type</em>}' reference is set.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return whether the value of the '<em>Refers To Basic Type</em>' reference is set.
-     * @see #unsetRefersToBasicType()
-     * @see #getRefersToBasicType()
-     * @see #setRefersToBasicType(BasicType)
-     * @generated
-     */
-    boolean isSetRefersToBasicType();
-
-    /**
-     * Returns the value of the '<em><b>Refers To Constructed Attribute</b></em>' reference.
-     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByDataAttribute <em>Referred By Data Attribute</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Refers To Constructed Attribute</em>' reference.
-     * @see #isSetRefersToConstructedAttribute()
-     * @see #unsetRefersToConstructedAttribute()
-     * @see #setRefersToConstructedAttribute(ConstructedAttribute)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_RefersToConstructedAttribute()
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByDataAttribute
-     * @model opposite="referredByDataAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
-     * @generated
-     */
-    ConstructedAttribute getRefersToConstructedAttribute();
-
-    /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}' reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Refers To Constructed Attribute</em>' reference.
-     * @see #isSetRefersToConstructedAttribute()
-     * @see #unsetRefersToConstructedAttribute()
-     * @see #getRefersToConstructedAttribute()
-     * @generated
-     */
-    void setRefersToConstructedAttribute( ConstructedAttribute value );
-
-    /**
-     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}' reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #isSetRefersToConstructedAttribute()
-     * @see #getRefersToConstructedAttribute()
-     * @see #setRefersToConstructedAttribute(ConstructedAttribute)
-     * @generated
-     */
-    void unsetRefersToConstructedAttribute();
-
-    /**
-     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}' reference is set.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return whether the value of the '<em>Refers To Constructed Attribute</em>' reference is set.
-     * @see #unsetRefersToConstructedAttribute()
-     * @see #getRefersToConstructedAttribute()
-     * @see #setRefersToConstructedAttribute(ConstructedAttribute)
-     * @generated
-     */
-    boolean isSetRefersToConstructedAttribute();
-
-    /**
-     * Returns the value of the '<em><b>Refers To Enumeration</b></em>' reference.
-     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByDataAttribute <em>Referred By Data Attribute</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Refers To Enumeration</em>' reference.
-     * @see #isSetRefersToEnumeration()
-     * @see #unsetRefersToEnumeration()
-     * @see #setRefersToEnumeration(Enumeration)
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_RefersToEnumeration()
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByDataAttribute
-     * @model opposite="referredByDataAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
-     * @generated
-     */
-    Enumeration getRefersToEnumeration();
-
-    /**
-     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToEnumeration <em>Refers To Enumeration</em>}' reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Refers To Enumeration</em>' reference.
-     * @see #isSetRefersToEnumeration()
-     * @see #unsetRefersToEnumeration()
-     * @see #getRefersToEnumeration()
-     * @generated
-     */
-    void setRefersToEnumeration( Enumeration value );
-
-    /**
-     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToEnumeration <em>Refers To Enumeration</em>}' reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #isSetRefersToEnumeration()
-     * @see #getRefersToEnumeration()
-     * @see #setRefersToEnumeration(Enumeration)
-     * @generated
-     */
-    void unsetRefersToEnumeration();
-
-    /**
-     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToEnumeration <em>Refers To Enumeration</em>}' reference is set.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return whether the value of the '<em>Refers To Enumeration</em>' reference is set.
-     * @see #unsetRefersToEnumeration()
-     * @see #getRefersToEnumeration()
-     * @see #setRefersToEnumeration(Enumeration)
-     * @generated
-     */
-    boolean isSetRefersToEnumeration();
-
 } // DataAttribute
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 575e7c1..601ac3c 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
@@ -36,7 +36,7 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getParentEnumerations <em>Parent Enumerations</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getRefersToBaseEnumeration <em>Refers To Base Enumeration</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByEnumerationAsBase <em>Referred By Enumeration As Base</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByAttributeType <em>Referred By Attribute Type</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration()
@@ -309,40 +309,40 @@ public interface Enumeration extends TitledClass {
     boolean isSetReferredByEnumerationAsBase();
 
     /**
-     * Returns the value of the '<em><b>Referred By Data Attribute</b></em>' 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#getRefersToEnumeration <em>Refers To Enumeration</em>}'.
+     * Returns the value of the '<em><b>Referred By Attribute Type</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToEnumeration <em>Refers To Enumeration</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return the value of the '<em>Referred By Data Attribute</em>' reference list.
-     * @see #isSetReferredByDataAttribute()
-     * @see #unsetReferredByDataAttribute()
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration_ReferredByDataAttribute()
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToEnumeration
+     * @return the value of the '<em>Referred By Attribute Type</em>' reference list.
+     * @see #isSetReferredByAttributeType()
+     * @see #unsetReferredByAttributeType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration_ReferredByAttributeType()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToEnumeration
      * @model opposite="refersToEnumeration" resolveProxies="false" unsettable="true" transient="true" ordered="false"
      * @generated
      */
-    EList< DataAttribute > getReferredByDataAttribute();
+    EList< AgAttributeType > getReferredByAttributeType();
 
     /**
-     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByDataAttribute <em>Referred By Data Attribute</em>}' reference list.
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByAttributeType <em>Referred By Attribute Type</em>}' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see #isSetReferredByDataAttribute()
-     * @see #getReferredByDataAttribute()
+     * @see #isSetReferredByAttributeType()
+     * @see #getReferredByAttributeType()
      * @generated
      */
-    void unsetReferredByDataAttribute();
+    void unsetReferredByAttributeType();
 
     /**
-     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByDataAttribute <em>Referred By Data Attribute</em>}' reference list is set.
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByAttributeType <em>Referred By Attribute Type</em>}' reference list is set.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return whether the value of the '<em>Referred By Data Attribute</em>' reference list is set.
-     * @see #unsetReferredByDataAttribute()
-     * @see #getReferredByDataAttribute()
+     * @return whether the value of the '<em>Referred By Attribute Type</em>' reference list is set.
+     * @see #unsetReferredByAttributeType()
+     * @see #getReferredByAttributeType()
      * @generated
      */
-    boolean isSetReferredByDataAttribute();
+    boolean isSetReferredByAttributeType();
 
 } // Enumeration
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 bfcc875..f1cd2d0 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
@@ -1951,13 +1951,13 @@ public interface NsdPackage extends EPackage {
     int BASIC_TYPE__PARENT_BASIC_TYPES = NSD_OBJECT_FEATURE_COUNT + 2;
 
     /**
-     * The feature id for the '<em><b>Referred By Data Attribute</b></em>' reference list.
+     * The feature id for the '<em><b>Referred By Attribute Type</b></em>' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE = NSD_OBJECT_FEATURE_COUNT + 3;
+    int BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE = NSD_OBJECT_FEATURE_COUNT + 3;
 
     /**
      * The feature id for the '<em><b>Refers To Doc</b></em>' reference.
@@ -2527,13 +2527,13 @@ public interface NsdPackage extends EPackage {
     int CONSTRUCTED_ATTRIBUTE__PARENT_SERVICE_TYPE_REALIZATIONS = TITLED_CLASS_FEATURE_COUNT + 3;
 
     /**
-     * The feature id for the '<em><b>Referred By Data Attribute</b></em>' reference list.
+     * The feature id for the '<em><b>Referred By Attribute Type</b></em>' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE = TITLED_CLASS_FEATURE_COUNT + 4;
+    int CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE = TITLED_CLASS_FEATURE_COUNT + 4;
 
     /**
      * The number of structural features of the '<em>Constructed Attribute</em>' class.
@@ -2869,157 +2869,157 @@ public interface NsdPackage extends EPackage {
     int DATA_ATTRIBUTE__TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
 
     /**
-     * The feature id for the '<em><b>Default Value</b></em>' attribute.
+     * The feature id for the '<em><b>Refers To Basic Type</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__DEFAULT_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 13;
+    int DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 13;
 
     /**
-     * The feature id for the '<em><b>Max Value</b></em>' attribute.
+     * The feature id for the '<em><b>Refers To Constructed Attribute</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__MAX_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 14;
+    int DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 14;
 
     /**
-     * The feature id for the '<em><b>Min Value</b></em>' attribute.
+     * The feature id for the '<em><b>Refers To Enumeration</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__MIN_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 15;
+    int DATA_ATTRIBUTE__REFERS_TO_ENUMERATION = DOCUMENTED_CLASS_FEATURE_COUNT + 15;
 
     /**
-     * The feature id for the '<em><b>Fc</b></em>' attribute.
+     * The feature id for the '<em><b>Default Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__FC = DOCUMENTED_CLASS_FEATURE_COUNT + 16;
+    int DATA_ATTRIBUTE__DEFAULT_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 16;
 
     /**
-     * The feature id for the '<em><b>Name</b></em>' attribute.
+     * The feature id for the '<em><b>Max Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 17;
+    int DATA_ATTRIBUTE__MAX_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 17;
 
     /**
-     * The feature id for the '<em><b>Parent CDC</b></em>' container reference.
+     * The feature id for the '<em><b>Min Value</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__PARENT_CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 18;
+    int DATA_ATTRIBUTE__MIN_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 18;
 
     /**
-     * The feature id for the '<em><b>Referred By Sub Data Object As Size Attribute</b></em>' reference list.
+     * The feature id for the '<em><b>Fc</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 19;
+    int DATA_ATTRIBUTE__FC = DOCUMENTED_CLASS_FEATURE_COUNT + 19;
 
     /**
-     * The feature id for the '<em><b>Referred By Sub Data Object As Max Index Attribute</b></em>' reference list.
+     * The feature id for the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 20;
+    int DATA_ATTRIBUTE__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 20;
 
     /**
-     * The feature id for the '<em><b>Refers To Functional Constraint</b></em>' reference.
+     * The feature id for the '<em><b>Parent CDC</b></em>' container reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT = DOCUMENTED_CLASS_FEATURE_COUNT + 21;
+    int DATA_ATTRIBUTE__PARENT_CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 21;
 
     /**
-     * The feature id for the '<em><b>Refers To Presence Condition</b></em>' reference.
+     * The feature id for the '<em><b>Referred By Sub Data Object As Size Attribute</b></em>' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION = DOCUMENTED_CLASS_FEATURE_COUNT + 22;
+    int DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 22;
 
     /**
-     * The feature id for the '<em><b>Refers To Size Attribute</b></em>' reference.
+     * The feature id for the '<em><b>Referred By Sub Data Object As Max Index Attribute</b></em>' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 23;
+    int DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 23;
 
     /**
-     * The feature id for the '<em><b>Refers To Max Index Attribute</b></em>' reference.
+     * The feature id for the '<em><b>Refers To Functional Constraint</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 24;
+    int DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT = DOCUMENTED_CLASS_FEATURE_COUNT + 24;
 
     /**
-     * The feature id for the '<em><b>Referred By Data Attribute As Size Attribute</b></em>' reference list.
+     * The feature id for the '<em><b>Refers To Presence Condition</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 25;
+    int DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION = DOCUMENTED_CLASS_FEATURE_COUNT + 25;
 
     /**
-     * The feature id for the '<em><b>Referred By Data Attribute As Max Index Attribute</b></em>' reference list.
+     * The feature id for the '<em><b>Refers To Size Attribute</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 26;
+    int DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 26;
 
     /**
-     * The feature id for the '<em><b>Refers To Basic Type</b></em>' reference.
+     * The feature id for the '<em><b>Refers To Max Index Attribute</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 27;
+    int DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 27;
 
     /**
-     * The feature id for the '<em><b>Refers To Constructed Attribute</b></em>' reference.
+     * The feature id for the '<em><b>Referred By Data Attribute As Size Attribute</b></em>' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 28;
+    int DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 28;
 
     /**
-     * The feature id for the '<em><b>Refers To Enumeration</b></em>' reference.
+     * The feature id for the '<em><b>Referred By Data Attribute As Max Index Attribute</b></em>' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE__REFERS_TO_ENUMERATION = DOCUMENTED_CLASS_FEATURE_COUNT + 29;
+    int DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 29;
 
     /**
      * The number of structural features of the '<em>Data Attribute</em>' class.
@@ -3625,13 +3625,13 @@ public interface NsdPackage extends EPackage {
     int ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE = TITLED_CLASS_FEATURE_COUNT + 5;
 
     /**
-     * The feature id for the '<em><b>Referred By Data Attribute</b></em>' reference list.
+     * The feature id for the '<em><b>Referred By Attribute Type</b></em>' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE = TITLED_CLASS_FEATURE_COUNT + 6;
+    int ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE = TITLED_CLASS_FEATURE_COUNT + 6;
 
     /**
      * The number of structural features of the '<em>Enumeration</em>' class.
@@ -5281,13 +5281,13 @@ public interface NsdPackage extends EPackage {
     int SERVICE_CONSTRUCTED_ATTRIBUTE__PARENT_SERVICE_TYPE_REALIZATIONS = CONSTRUCTED_ATTRIBUTE__PARENT_SERVICE_TYPE_REALIZATIONS;
 
     /**
-     * The feature id for the '<em><b>Referred By Data Attribute</b></em>' reference list.
+     * The feature id for the '<em><b>Referred By Attribute Type</b></em>' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SERVICE_CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE = CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE;
+    int SERVICE_CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE = CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE;
 
     /**
      * The feature id for the '<em><b>Type Kind Parameterized</b></em>' attribute.
@@ -5505,6 +5505,33 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_DATA_ATTRIBUTE__TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 5;
 
+    /**
+     * The feature id for the '<em><b>Refers To Basic Type</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 6;
+
+    /**
+     * The feature id for the '<em><b>Refers To Constructed Attribute</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 7;
+
+    /**
+     * The feature id for the '<em><b>Refers To Enumeration</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION = DOCUMENTED_CLASS_FEATURE_COUNT + 8;
+
     /**
      * The feature id for the '<em><b>Underlying Type</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -5512,7 +5539,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 6;
+    int SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 9;
 
     /**
      * The feature id for the '<em><b>Underlying Type Kind</b></em>' attribute.
@@ -5521,7 +5548,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 7;
+    int SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 10;
 
     /**
      * The feature id for the '<em><b>Fc</b></em>' attribute.
@@ -5530,7 +5557,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_DATA_ATTRIBUTE__FC = DOCUMENTED_CLASS_FEATURE_COUNT + 8;
+    int SERVICE_DATA_ATTRIBUTE__FC = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
 
     /**
      * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -5539,7 +5566,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_DATA_ATTRIBUTE__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 9;
+    int SERVICE_DATA_ATTRIBUTE__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
 
     /**
      * The feature id for the '<em><b>Parent Service CDC</b></em>' container reference.
@@ -5548,7 +5575,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_DATA_ATTRIBUTE__PARENT_SERVICE_CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 10;
+    int SERVICE_DATA_ATTRIBUTE__PARENT_SERVICE_CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 13;
 
     /**
      * The number of structural features of the '<em>Service Data Attribute</em>' class.
@@ -5557,7 +5584,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
+    int SERVICE_DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 14;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -5955,6 +5982,33 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_PARAMETER__TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 1;
 
+    /**
+     * The feature id for the '<em><b>Refers To Basic Type</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 2;
+
+    /**
+     * The feature id for the '<em><b>Refers To Constructed Attribute</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 3;
+
+    /**
+     * The feature id for the '<em><b>Refers To Enumeration</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_PARAMETER__REFERS_TO_ENUMERATION = DOCUMENTED_CLASS_FEATURE_COUNT + 4;
+
     /**
      * The feature id for the '<em><b>Default Value</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -5962,7 +6016,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_PARAMETER__DEFAULT_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 2;
+    int SERVICE_PARAMETER__DEFAULT_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 5;
 
     /**
      * The feature id for the '<em><b>Max Value</b></em>' attribute.
@@ -5971,7 +6025,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_PARAMETER__MAX_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 3;
+    int SERVICE_PARAMETER__MAX_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 6;
 
     /**
      * The feature id for the '<em><b>Min Value</b></em>' attribute.
@@ -5980,7 +6034,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_PARAMETER__MIN_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 4;
+    int SERVICE_PARAMETER__MIN_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 7;
 
     /**
      * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -5989,7 +6043,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_PARAMETER__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 5;
+    int SERVICE_PARAMETER__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 8;
 
     /**
      * The feature id for the '<em><b>Parent CDC</b></em>' container reference.
@@ -5998,7 +6052,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_PARAMETER__PARENT_CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 6;
+    int SERVICE_PARAMETER__PARENT_CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 9;
 
     /**
      * The number of structural features of the '<em>Service Parameter</em>' class.
@@ -6007,7 +6061,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SERVICE_PARAMETER_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 7;
+    int SERVICE_PARAMETER_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 10;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -6234,6 +6288,33 @@ public interface NsdPackage extends EPackage {
      */
     int SUB_DATA_ATTRIBUTE__TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 9;
 
+    /**
+     * The feature id for the '<em><b>Refers To Basic Type</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 10;
+
+    /**
+     * The feature id for the '<em><b>Refers To Constructed Attribute</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
+
+    /**
+     * The feature id for the '<em><b>Refers To Enumeration</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
+
     /**
      * The feature id for the '<em><b>Default Value</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -6241,7 +6322,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_ATTRIBUTE__DEFAULT_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 10;
+    int SUB_DATA_ATTRIBUTE__DEFAULT_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 13;
 
     /**
      * The feature id for the '<em><b>Max Value</b></em>' attribute.
@@ -6250,7 +6331,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_ATTRIBUTE__MAX_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
+    int SUB_DATA_ATTRIBUTE__MAX_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 14;
 
     /**
      * The feature id for the '<em><b>Min Value</b></em>' attribute.
@@ -6259,7 +6340,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_ATTRIBUTE__MIN_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
+    int SUB_DATA_ATTRIBUTE__MIN_VALUE = DOCUMENTED_CLASS_FEATURE_COUNT + 15;
 
     /**
      * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -6268,7 +6349,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_ATTRIBUTE__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 13;
+    int SUB_DATA_ATTRIBUTE__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 16;
 
     /**
      * The feature id for the '<em><b>Parent Constructed Attribute</b></em>' container reference.
@@ -6277,7 +6358,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_ATTRIBUTE__PARENT_CONSTRUCTED_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 14;
+    int SUB_DATA_ATTRIBUTE__PARENT_CONSTRUCTED_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 17;
 
     /**
      * The feature id for the '<em><b>Refers To Presence Condition</b></em>' reference.
@@ -6286,7 +6367,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION = DOCUMENTED_CLASS_FEATURE_COUNT + 15;
+    int SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION = DOCUMENTED_CLASS_FEATURE_COUNT + 18;
 
     /**
      * The number of structural features of the '<em>Sub Data Attribute</em>' class.
@@ -6295,7 +6376,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 16;
+    int SUB_DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 19;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -6837,6 +6918,33 @@ public interface NsdPackage extends EPackage {
      */
     int AG_ATTRIBUTE_TYPE__TYPE_KIND = 1;
 
+    /**
+     * The feature id for the '<em><b>Refers To Basic Type</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE = 2;
+
+    /**
+     * The feature id for the '<em><b>Refers To Constructed Attribute</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE = 3;
+
+    /**
+     * The feature id for the '<em><b>Refers To Enumeration</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION = 4;
+
     /**
      * The number of structural features of the '<em>Ag Attribute Type</em>' class.
      * <!-- begin-user-doc -->
@@ -6844,7 +6952,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int AG_ATTRIBUTE_TYPE_FEATURE_COUNT = 2;
+    int AG_ATTRIBUTE_TYPE_FEATURE_COUNT = 5;
 
     /**
      * The number of operations of the '<em>Ag Attribute Type</em>' class.
@@ -6873,6 +6981,33 @@ public interface NsdPackage extends EPackage {
      */
     int AG_ATTRIBUTE_TYPE_AND_VALUES__TYPE_KIND = AG_ATTRIBUTE_TYPE__TYPE_KIND;
 
+    /**
+     * The feature id for the '<em><b>Refers To Basic Type</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AG_ATTRIBUTE_TYPE_AND_VALUES__REFERS_TO_BASIC_TYPE = AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE;
+
+    /**
+     * The feature id for the '<em><b>Refers To Constructed Attribute</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AG_ATTRIBUTE_TYPE_AND_VALUES__REFERS_TO_CONSTRUCTED_ATTRIBUTE = AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE;
+
+    /**
+     * The feature id for the '<em><b>Refers To Enumeration</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int AG_ATTRIBUTE_TYPE_AND_VALUES__REFERS_TO_ENUMERATION = AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION;
+
     /**
      * The feature id for the '<em><b>Default Value</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -7689,15 +7824,15 @@ public interface NsdPackage extends EPackage {
     EReference getBasicType_ParentBasicTypes();
 
     /**
-     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByDataAttribute <em>Referred By Data Attribute</em>}'.
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByAttributeType <em>Referred By Attribute Type</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return the meta object for the reference list '<em>Referred By Data Attribute</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByDataAttribute()
+     * @return the meta object for the reference list '<em>Referred By Attribute Type</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getReferredByAttributeType()
      * @see #getBasicType()
      * @generated
      */
-    EReference getBasicType_ReferredByDataAttribute();
+    EReference getBasicType_ReferredByAttributeType();
 
     /**
      * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType#getRefersToDoc <em>Refers To Doc</em>}'.
@@ -8058,15 +8193,15 @@ public interface NsdPackage extends EPackage {
     EReference getConstructedAttribute_ParentServiceTypeRealizations();
 
     /**
-     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByDataAttribute <em>Referred By Data Attribute</em>}'.
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByAttributeType <em>Referred By Attribute Type</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return the meta object for the reference list '<em>Referred By Data Attribute</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByDataAttribute()
+     * @return the meta object for the reference list '<em>Referred By Attribute Type</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute#getReferredByAttributeType()
      * @see #getConstructedAttribute()
      * @generated
      */
-    EReference getConstructedAttribute_ReferredByDataAttribute();
+    EReference getConstructedAttribute_ReferredByAttributeType();
 
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes <em>Constructed Attributes</em>}'.
@@ -8295,39 +8430,6 @@ public interface NsdPackage extends EPackage {
      */
     EReference getDataAttribute_ReferredByDataAttributeAsMaxIndexAttribute();
 
-    /**
-     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToBasicType <em>Refers To Basic Type</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the reference '<em>Refers To Basic Type</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToBasicType()
-     * @see #getDataAttribute()
-     * @generated
-     */
-    EReference getDataAttribute_RefersToBasicType();
-
-    /**
-     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the reference '<em>Refers To Constructed Attribute</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToConstructedAttribute()
-     * @see #getDataAttribute()
-     * @generated
-     */
-    EReference getDataAttribute_RefersToConstructedAttribute();
-
-    /**
-     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToEnumeration <em>Refers To Enumeration</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the reference '<em>Refers To Enumeration</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToEnumeration()
-     * @see #getDataAttribute()
-     * @generated
-     */
-    EReference getDataAttribute_RefersToEnumeration();
-
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject <em>Data Object</em>}'.
      * <!-- begin-user-doc -->
@@ -8731,15 +8833,15 @@ public interface NsdPackage extends EPackage {
     EReference getEnumeration_ReferredByEnumerationAsBase();
 
     /**
-     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByDataAttribute <em>Referred By Data Attribute</em>}'.
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByAttributeType <em>Referred By Attribute Type</em>}'.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @return the meta object for the reference list '<em>Referred By Data Attribute</em>'.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByDataAttribute()
+     * @return the meta object for the reference list '<em>Referred By Attribute Type</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByAttributeType()
      * @see #getEnumeration()
      * @generated
      */
-    EReference getEnumeration_ReferredByDataAttribute();
+    EReference getEnumeration_ReferredByAttributeType();
 
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations <em>Enumerations</em>}'.
@@ -10397,6 +10499,39 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getAgAttributeType_TypeKind();
 
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToBasicType <em>Refers To Basic Type</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Basic Type</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToBasicType()
+     * @see #getAgAttributeType()
+     * @generated
+     */
+    EReference getAgAttributeType_RefersToBasicType();
+
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Constructed Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToConstructedAttribute()
+     * @see #getAgAttributeType()
+     * @generated
+     */
+    EReference getAgAttributeType_RefersToConstructedAttribute();
+
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToEnumeration <em>Refers To Enumeration</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Enumeration</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType#getRefersToEnumeration()
+     * @see #getAgAttributeType()
+     * @generated
+     */
+    EReference getAgAttributeType_RefersToEnumeration();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeTypeAndValues <em>Ag Attribute Type And Values</em>}'.
      * <!-- begin-user-doc -->
@@ -11114,12 +11249,12 @@ public interface NsdPackage extends EPackage {
         EReference BASIC_TYPE__PARENT_BASIC_TYPES = eINSTANCE.getBasicType_ParentBasicTypes();
 
         /**
-         * The meta object literal for the '<em><b>Referred By Data Attribute</b></em>' reference list feature.
+         * The meta object literal for the '<em><b>Referred By Attribute Type</b></em>' reference list feature.
          * <!-- begin-user-doc -->
          * <!-- end-user-doc -->
          * @generated
          */
-        EReference BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE = eINSTANCE.getBasicType_ReferredByDataAttribute();
+        EReference BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE = eINSTANCE.getBasicType_ReferredByAttributeType();
 
         /**
          * The meta object literal for the '<em><b>Refers To Doc</b></em>' reference feature.
@@ -11398,13 +11533,13 @@ public interface NsdPackage extends EPackage {
                 .getConstructedAttribute_ParentServiceTypeRealizations();
 
         /**
-         * The meta object literal for the '<em><b>Referred By Data Attribute</b></em>' reference list feature.
+         * The meta object literal for the '<em><b>Referred By Attribute Type</b></em>' reference list feature.
          * <!-- begin-user-doc -->
          * <!-- end-user-doc -->
          * @generated
          */
-        EReference CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE = eINSTANCE
-                .getConstructedAttribute_ReferredByDataAttribute();
+        EReference CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE = eINSTANCE
+                .getConstructedAttribute_ReferredByAttributeType();
 
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributesImpl <em>Constructed Attributes</em>}' class.
@@ -11590,31 +11725,6 @@ public interface NsdPackage extends EPackage {
         EReference DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE = eINSTANCE
                 .getDataAttribute_ReferredByDataAttributeAsMaxIndexAttribute();
 
-        /**
-         * The meta object literal for the '<em><b>Refers To Basic Type</b></em>' reference feature.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EReference DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE = eINSTANCE.getDataAttribute_RefersToBasicType();
-
-        /**
-         * The meta object literal for the '<em><b>Refers To Constructed Attribute</b></em>' reference feature.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EReference DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE = eINSTANCE
-                .getDataAttribute_RefersToConstructedAttribute();
-
-        /**
-         * The meta object literal for the '<em><b>Refers To Enumeration</b></em>' reference feature.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EReference DATA_ATTRIBUTE__REFERS_TO_ENUMERATION = eINSTANCE.getDataAttribute_RefersToEnumeration();
-
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl <em>Data Object</em>}' class.
          * <!-- begin-user-doc -->
@@ -11926,12 +12036,12 @@ public interface NsdPackage extends EPackage {
                 .getEnumeration_ReferredByEnumerationAsBase();
 
         /**
-         * The meta object literal for the '<em><b>Referred By Data Attribute</b></em>' reference list feature.
+         * The meta object literal for the '<em><b>Referred By Attribute Type</b></em>' reference list feature.
          * <!-- begin-user-doc -->
          * <!-- end-user-doc -->
          * @generated
          */
-        EReference ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE = eINSTANCE.getEnumeration_ReferredByDataAttribute();
+        EReference ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE = eINSTANCE.getEnumeration_ReferredByAttributeType();
 
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationsImpl <em>Enumerations</em>}' class.
@@ -13257,6 +13367,31 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute AG_ATTRIBUTE_TYPE__TYPE_KIND = eINSTANCE.getAgAttributeType_TypeKind();
 
+        /**
+         * The meta object literal for the '<em><b>Refers To Basic Type</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE = eINSTANCE.getAgAttributeType_RefersToBasicType();
+
+        /**
+         * The meta object literal for the '<em><b>Refers To Constructed Attribute</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE = eINSTANCE
+                .getAgAttributeType_RefersToConstructedAttribute();
+
+        /**
+         * The meta object literal for the '<em><b>Refers To Enumeration</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION = eINSTANCE.getAgAttributeType_RefersToEnumeration();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AgAttributeTypeAndValuesImpl <em>Ag Attribute Type And Values</em>}' class.
          * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AgAttributeTypeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AgAttributeTypeImpl.java
index c8f1866..15c0c06 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AgAttributeTypeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AgAttributeTypeImpl.java
@@ -20,15 +20,20 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
 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.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.impl.MinimalEObjectImpl;
 
@@ -42,6 +47,9 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AgAttributeTypeImpl#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AgAttributeTypeImpl#getTypeKind <em>Type Kind</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AgAttributeTypeImpl#getRefersToBasicType <em>Refers To Basic Type</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AgAttributeTypeImpl#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.AgAttributeTypeImpl#getRefersToEnumeration <em>Refers To Enumeration</em>}</li>
  * </ul>
  *
  * @generated
@@ -106,6 +114,63 @@ public abstract class AgAttributeTypeImpl extends MinimalEObjectImpl.Container i
      */
     protected boolean typeKindESet;
 
+    /**
+     * The cached value of the '{@link #getRefersToBasicType() <em>Refers To Basic Type</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToBasicType()
+     * @generated
+     * @ordered
+     */
+    protected BasicType refersToBasicType;
+
+    /**
+     * This is true if the Refers To Basic Type reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToBasicTypeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToConstructedAttribute() <em>Refers To Constructed Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToConstructedAttribute()
+     * @generated
+     * @ordered
+     */
+    protected ConstructedAttribute refersToConstructedAttribute;
+
+    /**
+     * This is true if the Refers To Constructed Attribute reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToConstructedAttributeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToEnumeration() <em>Refers To Enumeration</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToEnumeration()
+     * @generated
+     * @ordered
+     */
+    protected Enumeration refersToEnumeration;
+
+    /**
+     * This is true if the Refers To Enumeration reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToEnumerationESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -229,6 +294,401 @@ public abstract class AgAttributeTypeImpl extends MinimalEObjectImpl.Container i
         return typeKindESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public BasicType getRefersToBasicType() {
+        return refersToBasicType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToBasicType( BasicType newRefersToBasicType, NotificationChain msgs ) {
+        BasicType oldRefersToBasicType = refersToBasicType;
+        refersToBasicType = newRefersToBasicType;
+        boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+        refersToBasicTypeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE, oldRefersToBasicType, newRefersToBasicType,
+                    !oldRefersToBasicTypeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToBasicType( BasicType newRefersToBasicType ) {
+        if( newRefersToBasicType != refersToBasicType ) {
+            NotificationChain msgs = null;
+            if( refersToBasicType != null )
+                msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            if( newRefersToBasicType != null )
+                msgs = ( ( InternalEObject ) newRefersToBasicType ).eInverseAdd( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            msgs = basicSetRefersToBasicType( newRefersToBasicType, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+            refersToBasicTypeESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE, newRefersToBasicType, newRefersToBasicType,
+                        !oldRefersToBasicTypeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToBasicType( NotificationChain msgs ) {
+        BasicType oldRefersToBasicType = refersToBasicType;
+        refersToBasicType = null;
+        boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+        refersToBasicTypeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE, oldRefersToBasicType, null,
+                    oldRefersToBasicTypeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToBasicType() {
+        if( refersToBasicType != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                    NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            msgs = basicUnsetRefersToBasicType( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+            refersToBasicTypeESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE, null, null, oldRefersToBasicTypeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToBasicType() {
+        return refersToBasicTypeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ConstructedAttribute getRefersToConstructedAttribute() {
+        return refersToConstructedAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToConstructedAttribute( ConstructedAttribute newRefersToConstructedAttribute,
+            NotificationChain msgs ) {
+        ConstructedAttribute oldRefersToConstructedAttribute = refersToConstructedAttribute;
+        refersToConstructedAttribute = newRefersToConstructedAttribute;
+        boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+        refersToConstructedAttributeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, oldRefersToConstructedAttribute,
+                    newRefersToConstructedAttribute, !oldRefersToConstructedAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToConstructedAttribute( ConstructedAttribute newRefersToConstructedAttribute ) {
+        if( newRefersToConstructedAttribute != refersToConstructedAttribute ) {
+            NotificationChain msgs = null;
+            if( refersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            if( newRefersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) newRefersToConstructedAttribute ).eInverseAdd( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            msgs = basicSetRefersToConstructedAttribute( newRefersToConstructedAttribute, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+            refersToConstructedAttributeESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, newRefersToConstructedAttribute,
+                        newRefersToConstructedAttribute, !oldRefersToConstructedAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToConstructedAttribute( NotificationChain msgs ) {
+        ConstructedAttribute oldRefersToConstructedAttribute = refersToConstructedAttribute;
+        refersToConstructedAttribute = null;
+        boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+        refersToConstructedAttributeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, oldRefersToConstructedAttribute,
+                    null, oldRefersToConstructedAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToConstructedAttribute() {
+        if( refersToConstructedAttribute != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                    NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class, msgs );
+            msgs = basicUnsetRefersToConstructedAttribute( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+            refersToConstructedAttributeESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, null, null,
+                        oldRefersToConstructedAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToConstructedAttribute() {
+        return refersToConstructedAttributeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Enumeration getRefersToEnumeration() {
+        return refersToEnumeration;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToEnumeration( Enumeration newRefersToEnumeration, NotificationChain msgs ) {
+        Enumeration oldRefersToEnumeration = refersToEnumeration;
+        refersToEnumeration = newRefersToEnumeration;
+        boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+        refersToEnumerationESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION, oldRefersToEnumeration, newRefersToEnumeration,
+                    !oldRefersToEnumerationESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToEnumeration( Enumeration newRefersToEnumeration ) {
+        if( newRefersToEnumeration != refersToEnumeration ) {
+            NotificationChain msgs = null;
+            if( refersToEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            if( newRefersToEnumeration != null )
+                msgs = ( ( InternalEObject ) newRefersToEnumeration ).eInverseAdd( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            msgs = basicSetRefersToEnumeration( newRefersToEnumeration, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+            refersToEnumerationESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION, newRefersToEnumeration,
+                        newRefersToEnumeration, !oldRefersToEnumerationESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToEnumeration( NotificationChain msgs ) {
+        Enumeration oldRefersToEnumeration = refersToEnumeration;
+        refersToEnumeration = null;
+        boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+        refersToEnumerationESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION, oldRefersToEnumeration, null,
+                    oldRefersToEnumerationESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToEnumeration() {
+        if( refersToEnumeration != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                    NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            msgs = basicUnsetRefersToEnumeration( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+            refersToEnumerationESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION, null, null, oldRefersToEnumerationESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToEnumeration() {
+        return refersToEnumerationESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
+        switch( featureID ) {
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE:
+            if( refersToBasicType != null )
+                msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            return basicSetRefersToBasicType( ( BasicType ) otherEnd, msgs );
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            if( refersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            return basicSetRefersToConstructedAttribute( ( ConstructedAttribute ) otherEnd, msgs );
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION:
+            if( refersToEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            return basicSetRefersToEnumeration( ( 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.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE:
+            return basicUnsetRefersToBasicType( msgs );
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return basicUnsetRefersToConstructedAttribute( msgs );
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION:
+            return basicUnsetRefersToEnumeration( msgs );
+        }
+        return super.eInverseRemove( otherEnd, featureID, msgs );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -241,6 +701,12 @@ public abstract class AgAttributeTypeImpl extends MinimalEObjectImpl.Container i
             return getType();
         case NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND:
             return getTypeKind();
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE:
+            return getRefersToBasicType();
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return getRefersToConstructedAttribute();
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION:
+            return getRefersToEnumeration();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -259,6 +725,15 @@ public abstract class AgAttributeTypeImpl extends MinimalEObjectImpl.Container i
         case NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND:
             setTypeKind( ( Enumerator ) newValue );
             return;
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE:
+            setRefersToBasicType( ( BasicType ) newValue );
+            return;
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            setRefersToConstructedAttribute( ( ConstructedAttribute ) newValue );
+            return;
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION:
+            setRefersToEnumeration( ( Enumeration ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -277,6 +752,15 @@ public abstract class AgAttributeTypeImpl extends MinimalEObjectImpl.Container i
         case NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND:
             unsetTypeKind();
             return;
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE:
+            unsetRefersToBasicType();
+            return;
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            unsetRefersToConstructedAttribute();
+            return;
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION:
+            unsetRefersToEnumeration();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -293,6 +777,12 @@ public abstract class AgAttributeTypeImpl extends MinimalEObjectImpl.Container i
             return isSetType();
         case NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND:
             return isSetTypeKind();
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE:
+            return isSetRefersToBasicType();
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return isSetRefersToConstructedAttribute();
+        case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION:
+            return isSetRefersToEnumeration();
         }
         return super.eIsSet( featureID );
     }
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 562c491..cf359b8 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
@@ -19,9 +19,9 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceSetImpl;
@@ -51,7 +51,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <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#getParentBasicTypes <em>Parent Basic Types</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.BasicTypeImpl#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.BasicTypeImpl#getReferredByAttributeType <em>Referred By Attribute Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.BasicTypeImpl#getRefersToDoc <em>Refers To Doc</em>}</li>
  * </ul>
  *
@@ -117,14 +117,14 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
     protected boolean nameESet;
 
     /**
-     * The cached value of the '{@link #getReferredByDataAttribute() <em>Referred By Data Attribute</em>}' reference list.
+     * The cached value of the '{@link #getReferredByAttributeType() <em>Referred By Attribute Type</em>}' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see #getReferredByDataAttribute()
+     * @see #getReferredByAttributeType()
      * @generated
      * @ordered
      */
-    protected EList< DataAttribute > referredByDataAttribute;
+    protected EList< AgAttributeType > referredByAttributeType;
 
     /**
      * The cached value of the '{@link #getRefersToDoc() <em>Refers To Doc</em>}' reference.
@@ -322,13 +322,13 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
      * @generated
      */
     @Override
-    public EList< DataAttribute > getReferredByDataAttribute() {
-        if( referredByDataAttribute == null ) {
-            referredByDataAttribute = new EObjectWithInverseEList.Unsettable< DataAttribute >( DataAttribute.class,
-                    this, NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE,
-                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE );
+    public EList< AgAttributeType > getReferredByAttributeType() {
+        if( referredByAttributeType == null ) {
+            referredByAttributeType = new EObjectWithInverseEList.Unsettable< AgAttributeType >( AgAttributeType.class,
+                    this, NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE,
+                    NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE );
         }
-        return referredByDataAttribute;
+        return referredByAttributeType;
     }
 
     /**
@@ -337,8 +337,8 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
      * @generated
      */
     @Override
-    public void unsetReferredByDataAttribute() {
-        if( referredByDataAttribute != null ) ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).unset();
+    public void unsetReferredByAttributeType() {
+        if( referredByAttributeType != null ) ( ( InternalEList.Unsettable< ? > ) referredByAttributeType ).unset();
     }
 
     /**
@@ -347,8 +347,8 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
      * @generated
      */
     @Override
-    public boolean isSetReferredByDataAttribute() {
-        return referredByDataAttribute != null && ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).isSet();
+    public boolean isSetReferredByAttributeType() {
+        return referredByAttributeType != null && ( ( InternalEList.Unsettable< ? > ) referredByAttributeType ).isSet();
     }
 
     /**
@@ -476,8 +476,8 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
             if( eInternalContainer() != null )
                 msgs = eBasicRemoveFromContainer( msgs );
             return basicSetParentBasicTypes( ( BasicTypes ) otherEnd, msgs );
-        case NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE:
-            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataAttribute() )
+        case NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByAttributeType() )
                     .basicAdd( otherEnd, msgs );
         case NsdPackage.BASIC_TYPE__REFERS_TO_DOC:
             if( refersToDoc != null )
@@ -498,8 +498,8 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
         switch( featureID ) {
         case NsdPackage.BASIC_TYPE__PARENT_BASIC_TYPES:
             return basicSetParentBasicTypes( null, msgs );
-        case NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE:
-            return ( ( InternalEList< ? > ) getReferredByDataAttribute() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE:
+            return ( ( InternalEList< ? > ) getReferredByAttributeType() ).basicRemove( otherEnd, msgs );
         case NsdPackage.BASIC_TYPE__REFERS_TO_DOC:
             return basicUnsetRefersToDoc( msgs );
         }
@@ -535,8 +535,8 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
             return getName();
         case NsdPackage.BASIC_TYPE__PARENT_BASIC_TYPES:
             return getParentBasicTypes();
-        case NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE:
-            return getReferredByDataAttribute();
+        case NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE:
+            return getReferredByAttributeType();
         case NsdPackage.BASIC_TYPE__REFERS_TO_DOC:
             return getRefersToDoc();
         }
@@ -561,9 +561,9 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
         case NsdPackage.BASIC_TYPE__PARENT_BASIC_TYPES:
             setParentBasicTypes( ( BasicTypes ) newValue );
             return;
-        case NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE:
-            getReferredByDataAttribute().clear();
-            getReferredByDataAttribute().addAll( ( Collection< ? extends DataAttribute > ) newValue );
+        case NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE:
+            getReferredByAttributeType().clear();
+            getReferredByAttributeType().addAll( ( Collection< ? extends AgAttributeType > ) newValue );
             return;
         case NsdPackage.BASIC_TYPE__REFERS_TO_DOC:
             setRefersToDoc( ( Doc ) newValue );
@@ -589,8 +589,8 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
         case NsdPackage.BASIC_TYPE__PARENT_BASIC_TYPES:
             setParentBasicTypes( ( BasicTypes ) null );
             return;
-        case NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE:
-            unsetReferredByDataAttribute();
+        case NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE:
+            unsetReferredByAttributeType();
             return;
         case NsdPackage.BASIC_TYPE__REFERS_TO_DOC:
             unsetRefersToDoc();
@@ -613,8 +613,8 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
             return isSetName();
         case NsdPackage.BASIC_TYPE__PARENT_BASIC_TYPES:
             return getParentBasicTypes() != null;
-        case NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE:
-            return isSetReferredByDataAttribute();
+        case NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE:
+            return isSetReferredByAttributeType();
         case NsdPackage.BASIC_TYPE__REFERS_TO_DOC:
             return isSetRefersToDoc();
         }
@@ -648,10 +648,10 @@ public class BasicTypeImpl extends NsdObjectImpl implements BasicType {
     @Override
     public boolean buildExplicitLinks( IRiseClipseConsole console, boolean forceUpdate ) {
         if( super.buildExplicitLinks( console, forceUpdate ) ) return true;
-        
+
         if( isSetDescID() ) {
             if( this.eResource().getResourceSet() instanceof NsdResourceSetImpl ) {
-                Doc doc = (( NsdResourceSetImpl ) this.eResource().getResourceSet() ).findDoc( getDescID() );
+                Doc doc = ( ( NsdResourceSetImpl ) this.eResource().getResourceSet() ).findDoc( getDescID() );
                 if( doc != null ) setRefersToDoc( doc );
             }
         }
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 b2a8ac4..3f490d7 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
@@ -19,9 +19,9 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceTypeRealizations;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute;
@@ -54,7 +54,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <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#getParentConstructedAttributes <em>Parent Constructed Attributes</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributeImpl#getParentServiceTypeRealizations <em>Parent Service Type Realizations</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributeImpl#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ConstructedAttributeImpl#getReferredByAttributeType <em>Referred By Attribute Type</em>}</li>
  * </ul>
  *
  * @generated
@@ -100,14 +100,14 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
     protected boolean nameESet;
 
     /**
-     * The cached value of the '{@link #getReferredByDataAttribute() <em>Referred By Data Attribute</em>}' reference list.
+     * The cached value of the '{@link #getReferredByAttributeType() <em>Referred By Attribute Type</em>}' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see #getReferredByDataAttribute()
+     * @see #getReferredByAttributeType()
      * @generated
      * @ordered
      */
-    protected EList< DataAttribute > referredByDataAttribute;
+    protected EList< AgAttributeType > referredByAttributeType;
 
     /**
      * <!-- begin-user-doc -->
@@ -322,13 +322,13 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
      * @generated
      */
     @Override
-    public EList< DataAttribute > getReferredByDataAttribute() {
-        if( referredByDataAttribute == null ) {
-            referredByDataAttribute = new EObjectWithInverseEList.Unsettable< DataAttribute >( DataAttribute.class,
-                    this, NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE,
-                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE );
+    public EList< AgAttributeType > getReferredByAttributeType() {
+        if( referredByAttributeType == null ) {
+            referredByAttributeType = new EObjectWithInverseEList.Unsettable< AgAttributeType >( AgAttributeType.class,
+                    this, NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE,
+                    NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE );
         }
-        return referredByDataAttribute;
+        return referredByAttributeType;
     }
 
     /**
@@ -337,8 +337,8 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
      * @generated
      */
     @Override
-    public void unsetReferredByDataAttribute() {
-        if( referredByDataAttribute != null ) ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).unset();
+    public void unsetReferredByAttributeType() {
+        if( referredByAttributeType != null ) ( ( InternalEList.Unsettable< ? > ) referredByAttributeType ).unset();
     }
 
     /**
@@ -347,8 +347,8 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
      * @generated
      */
     @Override
-    public boolean isSetReferredByDataAttribute() {
-        return referredByDataAttribute != null && ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).isSet();
+    public boolean isSetReferredByAttributeType() {
+        return referredByAttributeType != null && ( ( InternalEList.Unsettable< ? > ) referredByAttributeType ).isSet();
     }
 
     /**
@@ -371,8 +371,8 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
             if( eInternalContainer() != null )
                 msgs = eBasicRemoveFromContainer( msgs );
             return basicSetParentServiceTypeRealizations( ( ServiceTypeRealizations ) otherEnd, msgs );
-        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE:
-            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataAttribute() )
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByAttributeType() )
                     .basicAdd( otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
@@ -392,8 +392,8 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
             return basicSetParentConstructedAttributes( null, msgs );
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__PARENT_SERVICE_TYPE_REALIZATIONS:
             return basicSetParentServiceTypeRealizations( null, msgs );
-        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE:
-            return ( ( InternalEList< ? > ) getReferredByDataAttribute() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE:
+            return ( ( InternalEList< ? > ) getReferredByAttributeType() ).basicRemove( otherEnd, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -433,8 +433,8 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
             return getParentConstructedAttributes();
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__PARENT_SERVICE_TYPE_REALIZATIONS:
             return getParentServiceTypeRealizations();
-        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE:
-            return getReferredByDataAttribute();
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE:
+            return getReferredByAttributeType();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -461,9 +461,9 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__PARENT_SERVICE_TYPE_REALIZATIONS:
             setParentServiceTypeRealizations( ( ServiceTypeRealizations ) newValue );
             return;
-        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE:
-            getReferredByDataAttribute().clear();
-            getReferredByDataAttribute().addAll( ( Collection< ? extends DataAttribute > ) newValue );
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE:
+            getReferredByAttributeType().clear();
+            getReferredByAttributeType().addAll( ( Collection< ? extends AgAttributeType > ) newValue );
             return;
         }
         super.eSet( featureID, newValue );
@@ -489,8 +489,8 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__PARENT_SERVICE_TYPE_REALIZATIONS:
             setParentServiceTypeRealizations( ( ServiceTypeRealizations ) null );
             return;
-        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE:
-            unsetReferredByDataAttribute();
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE:
+            unsetReferredByAttributeType();
             return;
         }
         super.eUnset( featureID );
@@ -512,8 +512,8 @@ public class ConstructedAttributeImpl extends TitledClassImpl implements Constru
             return getParentConstructedAttributes() != null;
         case NsdPackage.CONSTRUCTED_ATTRIBUTE__PARENT_SERVICE_TYPE_REALIZATIONS:
             return getParentServiceTypeRealizations() != null;
-        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE:
-            return isSetReferredByDataAttribute();
+        case NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE:
+            return isSetReferredByAttributeType();
         }
         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 d2efaf4..d59f411 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
@@ -79,6 +79,9 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#isQchg <em>Qchg</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#getRefersToBasicType <em>Refers To Basic Type</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getRefersToEnumeration <em>Refers To Enumeration</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getDefaultValue <em>Default Value</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getMaxValue <em>Max Value</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getMinValue <em>Min Value</em>}</li>
@@ -93,9 +96,6 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getReferredByDataAttributeAsSizeAttribute <em>Referred By Data Attribute As Size Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getReferredByDataAttributeAsMaxIndexAttribute <em>Referred By Data Attribute As Max Index Attribute</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getRefersToBasicType <em>Refers To Basic Type</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getRefersToEnumeration <em>Refers To Enumeration</em>}</li>
  * </ul>
  *
  * @generated
@@ -469,6 +469,63 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected boolean typeKindESet;
 
+    /**
+     * The cached value of the '{@link #getRefersToBasicType() <em>Refers To Basic Type</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToBasicType()
+     * @generated
+     * @ordered
+     */
+    protected BasicType refersToBasicType;
+
+    /**
+     * This is true if the Refers To Basic Type reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToBasicTypeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToConstructedAttribute() <em>Refers To Constructed Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToConstructedAttribute()
+     * @generated
+     * @ordered
+     */
+    protected ConstructedAttribute refersToConstructedAttribute;
+
+    /**
+     * This is true if the Refers To Constructed Attribute reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToConstructedAttributeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToEnumeration() <em>Refers To Enumeration</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToEnumeration()
+     * @generated
+     * @ordered
+     */
+    protected Enumeration refersToEnumeration;
+
+    /**
+     * This is true if the Refers To Enumeration reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToEnumerationESet;
+
     /**
      * The default value of the '{@link #getDefaultValue() <em>Default Value</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -730,63 +787,6 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected EList< DataAttribute > referredByDataAttributeAsMaxIndexAttribute;
 
-    /**
-     * The cached value of the '{@link #getRefersToBasicType() <em>Refers To Basic Type</em>}' reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getRefersToBasicType()
-     * @generated
-     * @ordered
-     */
-    protected BasicType refersToBasicType;
-
-    /**
-     * This is true if the Refers To Basic Type reference has been set.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    protected boolean refersToBasicTypeESet;
-
-    /**
-     * The cached value of the '{@link #getRefersToConstructedAttribute() <em>Refers To Constructed Attribute</em>}' reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getRefersToConstructedAttribute()
-     * @generated
-     * @ordered
-     */
-    protected ConstructedAttribute refersToConstructedAttribute;
-
-    /**
-     * This is true if the Refers To Constructed Attribute reference has been set.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    protected boolean refersToConstructedAttributeESet;
-
-    /**
-     * The cached value of the '{@link #getRefersToEnumeration() <em>Refers To Enumeration</em>}' reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getRefersToEnumeration()
-     * @generated
-     * @ordered
-     */
-    protected Enumeration refersToEnumeration;
-
-    /**
-     * This is true if the Refers To Enumeration reference has been set.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    protected boolean refersToEnumerationESet;
-
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2521,10 +2521,10 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             NotificationChain msgs = null;
             if( refersToBasicType != null )
                 msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
-                        NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE, BasicType.class, msgs );
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
             if( newRefersToBasicType != null )
                 msgs = ( ( InternalEObject ) newRefersToBasicType ).eInverseAdd( this,
-                        NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE, BasicType.class, msgs );
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
             msgs = basicSetRefersToBasicType( newRefersToBasicType, msgs );
             if( msgs != null ) msgs.dispatch();
         }
@@ -2569,7 +2569,7 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         if( refersToBasicType != null ) {
             NotificationChain msgs = null;
             msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
-                    NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE, BasicType.class, msgs );
+                    NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
             msgs = basicUnsetRefersToBasicType( msgs );
             if( msgs != null ) msgs.dispatch();
         }
@@ -2636,11 +2636,11 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             NotificationChain msgs = null;
             if( refersToConstructedAttribute != null )
                 msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
-                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE, ConstructedAttribute.class,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
                         msgs );
             if( newRefersToConstructedAttribute != null )
                 msgs = ( ( InternalEObject ) newRefersToConstructedAttribute ).eInverseAdd( this,
-                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE, ConstructedAttribute.class,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
                         msgs );
             msgs = basicSetRefersToConstructedAttribute( newRefersToConstructedAttribute, msgs );
             if( msgs != null ) msgs.dispatch();
@@ -2687,7 +2687,7 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         if( refersToConstructedAttribute != null ) {
             NotificationChain msgs = null;
             msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
-                    NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE, ConstructedAttribute.class, msgs );
+                    NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class, msgs );
             msgs = basicUnsetRefersToConstructedAttribute( msgs );
             if( msgs != null ) msgs.dispatch();
         }
@@ -2754,10 +2754,10 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             NotificationChain msgs = null;
             if( refersToEnumeration != null )
                 msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
-                        NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE, Enumeration.class, msgs );
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
             if( newRefersToEnumeration != null )
                 msgs = ( ( InternalEObject ) newRefersToEnumeration ).eInverseAdd( this,
-                        NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE, Enumeration.class, msgs );
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
             msgs = basicSetRefersToEnumeration( newRefersToEnumeration, msgs );
             if( msgs != null ) msgs.dispatch();
         }
@@ -2803,7 +2803,7 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         if( refersToEnumeration != null ) {
             NotificationChain msgs = null;
             msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
-                    NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE, Enumeration.class, msgs );
+                    NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
             msgs = basicUnsetRefersToEnumeration( msgs );
             if( msgs != null ) msgs.dispatch();
         }
@@ -2840,6 +2840,22 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
                 msgs = ( ( InternalEObject ) refersToPresCondArgsDoc ).eInverseRemove( this,
                         NsdPackage.DOC__REFERRED_BY_AG_PRESENCE_CONDITION, Doc.class, msgs );
             return basicSetRefersToPresCondArgsDoc( ( Doc ) otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            if( refersToBasicType != null )
+                msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            return basicSetRefersToBasicType( ( BasicType ) otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            if( refersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            return basicSetRefersToConstructedAttribute( ( ConstructedAttribute ) otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            if( refersToEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            return basicSetRefersToEnumeration( ( Enumeration ) otherEnd, msgs );
         case NsdPackage.DATA_ATTRIBUTE__PARENT_CDC:
             if( eInternalContainer() != null )
                 msgs = eBasicRemoveFromContainer( msgs );
@@ -2879,22 +2895,6 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
             return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataAttributeAsMaxIndexAttribute() )
                     .basicAdd( otherEnd, msgs );
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
-            if( refersToBasicType != null )
-                msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
-                        NsdPackage.BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE, BasicType.class, msgs );
-            return basicSetRefersToBasicType( ( BasicType ) otherEnd, msgs );
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
-            if( refersToConstructedAttribute != null )
-                msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
-                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE, ConstructedAttribute.class,
-                        msgs );
-            return basicSetRefersToConstructedAttribute( ( ConstructedAttribute ) otherEnd, msgs );
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
-            if( refersToEnumeration != null )
-                msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
-                        NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE, Enumeration.class, msgs );
-            return basicSetRefersToEnumeration( ( Enumeration ) otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -2909,6 +2909,12 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         switch( featureID ) {
         case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_PRES_COND_ARGS_DOC:
             return basicUnsetRefersToPresCondArgsDoc( msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            return basicUnsetRefersToBasicType( msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return basicUnsetRefersToConstructedAttribute( msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            return basicUnsetRefersToEnumeration( msgs );
         case NsdPackage.DATA_ATTRIBUTE__PARENT_CDC:
             return basicSetParentCDC( null, msgs );
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE:
@@ -2929,12 +2935,6 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
             return ( ( InternalEList< ? > ) getReferredByDataAttributeAsMaxIndexAttribute() ).basicRemove( otherEnd,
                     msgs );
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
-            return basicUnsetRefersToBasicType( msgs );
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
-            return basicUnsetRefersToConstructedAttribute( msgs );
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
-            return basicUnsetRefersToEnumeration( msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -2987,6 +2987,12 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             return getType();
         case NsdPackage.DATA_ATTRIBUTE__TYPE_KIND:
             return getTypeKind();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            return getRefersToBasicType();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return getRefersToConstructedAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            return getRefersToEnumeration();
         case NsdPackage.DATA_ATTRIBUTE__DEFAULT_VALUE:
             return getDefaultValue();
         case NsdPackage.DATA_ATTRIBUTE__MAX_VALUE:
@@ -3015,12 +3021,6 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             return getReferredByDataAttributeAsSizeAttribute();
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
             return getReferredByDataAttributeAsMaxIndexAttribute();
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
-            return getRefersToBasicType();
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
-            return getRefersToConstructedAttribute();
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
-            return getRefersToEnumeration();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -3073,6 +3073,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__TYPE_KIND:
             setTypeKind( ( Enumerator ) newValue );
             return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            setRefersToBasicType( ( BasicType ) newValue );
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            setRefersToConstructedAttribute( ( ConstructedAttribute ) newValue );
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            setRefersToEnumeration( ( Enumeration ) newValue );
+            return;
         case NsdPackage.DATA_ATTRIBUTE__DEFAULT_VALUE:
             setDefaultValue( ( String ) newValue );
             return;
@@ -3121,15 +3130,6 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             getReferredByDataAttributeAsMaxIndexAttribute()
                     .addAll( ( Collection< ? extends DataAttribute > ) newValue );
             return;
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
-            setRefersToBasicType( ( BasicType ) newValue );
-            return;
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
-            setRefersToConstructedAttribute( ( ConstructedAttribute ) newValue );
-            return;
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
-            setRefersToEnumeration( ( Enumeration ) newValue );
-            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -3181,6 +3181,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__TYPE_KIND:
             unsetTypeKind();
             return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            unsetRefersToBasicType();
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            unsetRefersToConstructedAttribute();
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            unsetRefersToEnumeration();
+            return;
         case NsdPackage.DATA_ATTRIBUTE__DEFAULT_VALUE:
             unsetDefaultValue();
             return;
@@ -3223,15 +3232,6 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
             unsetReferredByDataAttributeAsMaxIndexAttribute();
             return;
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
-            unsetRefersToBasicType();
-            return;
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
-            unsetRefersToConstructedAttribute();
-            return;
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
-            unsetRefersToEnumeration();
-            return;
         }
         super.eUnset( featureID );
     }
@@ -3270,6 +3270,12 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             return isSetType();
         case NsdPackage.DATA_ATTRIBUTE__TYPE_KIND:
             return isSetTypeKind();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            return isSetRefersToBasicType();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return isSetRefersToConstructedAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            return isSetRefersToEnumeration();
         case NsdPackage.DATA_ATTRIBUTE__DEFAULT_VALUE:
             return isSetDefaultValue();
         case NsdPackage.DATA_ATTRIBUTE__MAX_VALUE:
@@ -3298,12 +3304,6 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             return isSetReferredByDataAttributeAsSizeAttribute();
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
             return isSetReferredByDataAttributeAsMaxIndexAttribute();
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
-            return isSetRefersToBasicType();
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
-            return isSetRefersToConstructedAttribute();
-        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
-            return isSetRefersToEnumeration();
         }
         return super.eIsSet( featureID );
     }
@@ -3361,6 +3361,12 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
                 return NsdPackage.AG_ATTRIBUTE_TYPE__TYPE;
             case NsdPackage.DATA_ATTRIBUTE__TYPE_KIND:
                 return NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND;
+            case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE;
+            case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE;
+            case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION;
             default:
                 return -1;
             }
@@ -3433,6 +3439,12 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
                 return NsdPackage.DATA_ATTRIBUTE__TYPE;
             case NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND:
                 return NsdPackage.DATA_ATTRIBUTE__TYPE_KIND;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE:
+                return NsdPackage.DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+                return NsdPackage.DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION:
+                return NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION;
             default:
                 return -1;
             }
@@ -3638,39 +3650,44 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
                 switch( getTypeKind().getValue() ) {
                 case DefinedAttributeTypeKind.BASIC_VALUE:
                     BasicType foundBT = ns.findBasicType( getType(), console );
-        
+
                     if( foundBT == null ) {
                         console.warning( messagePrefix + "BasicType (name: " + getType() + ") not found" );
                     }
                     else {
                         setRefersToBasicType( foundBT );
-                        console.info( "[NSD links] BasicType (name: " + getType() + ") refers as type by DataAttribute (name: "
+                        console.info( "[NSD links] BasicType (name: " + getType()
+                                + ") refers as type by DataAttribute (name: "
                                 + getName() + ") in NS (id:" + ns.getId() + ") found in NS (id:"
                                 + getRefersToBasicType().getParentBasicTypes().getParentNS().getId() + ")" );
                     }
                     break;
                 case DefinedAttributeTypeKind.CONSTRUCTED_VALUE:
                     ConstructedAttribute foundCA = ns.findConstructedAttribute( getType(), console );
-                    
+
                     if( foundCA == null ) {
                         console.warning( messagePrefix + "ConstructedAttribute (name: " + getType() + ") not found" );
                     }
                     else {
                         setRefersToConstructedAttribute( foundCA );
-                        console.info( "[NSD links] ConstructedAttribute (name: " + getType() + ") refers as type by DataAttribute (name: "
+                        console.info( "[NSD links] ConstructedAttribute (name: " + getType()
+                                + ") refers as type by DataAttribute (name: "
                                 + getName() + ") in NS (id:" + ns.getId() + ") found in NS (id:"
-                                + getRefersToConstructedAttribute().getParentConstructedAttributes().getParentNS().getId() + ")" );
+                                + getRefersToConstructedAttribute().getParentConstructedAttributes().getParentNS()
+                                        .getId()
+                                + ")" );
                     }
                     break;
                 case DefinedAttributeTypeKind.ENUMERATED_VALUE:
                     Enumeration foundEn = ns.findEnumeration( getType(), console );
-                    
+
                     if( foundEn == null ) {
                         console.warning( messagePrefix + "Enumeration (name: " + getType() + ") not found" );
                     }
                     else {
                         setRefersToEnumeration( foundEn );
-                        console.info( "[NSD links] Enumeration (name: " + getType() + ") refers as type by DataAttribute (name: "
+                        console.info( "[NSD links] Enumeration (name: " + getType()
+                                + ") refers as type by DataAttribute (name: "
                                 + getName() + ") in NS (id:" + ns.getId() + ") found in NS (id:"
                                 + getRefersToEnumeration().getParentEnumerations().getParentNS().getId() + ")" );
                     }
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 56c2d69..e74ac24 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
@@ -19,7 +19,7 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal;
@@ -57,7 +57,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getParentEnumerations <em>Parent Enumerations</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getRefersToBaseEnumeration <em>Refers To Base Enumeration</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getReferredByEnumerationAsBase <em>Referred By Enumeration As Base</em>}</li>
- *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getReferredByAttributeType <em>Referred By Attribute Type</em>}</li>
  * </ul>
  *
  * @generated
@@ -161,14 +161,14 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
     protected EList< Enumeration > referredByEnumerationAsBase;
 
     /**
-     * The cached value of the '{@link #getReferredByDataAttribute() <em>Referred By Data Attribute</em>}' reference list.
+     * The cached value of the '{@link #getReferredByAttributeType() <em>Referred By Attribute Type</em>}' reference list.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see #getReferredByDataAttribute()
+     * @see #getReferredByAttributeType()
      * @generated
      * @ordered
      */
-    protected EList< DataAttribute > referredByDataAttribute;
+    protected EList< AgAttributeType > referredByAttributeType;
 
     /**
      * <!-- begin-user-doc -->
@@ -535,13 +535,13 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
      * @generated
      */
     @Override
-    public EList< DataAttribute > getReferredByDataAttribute() {
-        if( referredByDataAttribute == null ) {
-            referredByDataAttribute = new EObjectWithInverseEList.Unsettable< DataAttribute >( DataAttribute.class,
-                    this, NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE,
-                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_ENUMERATION );
+    public EList< AgAttributeType > getReferredByAttributeType() {
+        if( referredByAttributeType == null ) {
+            referredByAttributeType = new EObjectWithInverseEList.Unsettable< AgAttributeType >( AgAttributeType.class,
+                    this, NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE,
+                    NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION );
         }
-        return referredByDataAttribute;
+        return referredByAttributeType;
     }
 
     /**
@@ -550,8 +550,8 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
      * @generated
      */
     @Override
-    public void unsetReferredByDataAttribute() {
-        if( referredByDataAttribute != null ) ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).unset();
+    public void unsetReferredByAttributeType() {
+        if( referredByAttributeType != null ) ( ( InternalEList.Unsettable< ? > ) referredByAttributeType ).unset();
     }
 
     /**
@@ -560,8 +560,8 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
      * @generated
      */
     @Override
-    public boolean isSetReferredByDataAttribute() {
-        return referredByDataAttribute != null && ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).isSet();
+    public boolean isSetReferredByAttributeType() {
+        return referredByAttributeType != null && ( ( InternalEList.Unsettable< ? > ) referredByAttributeType ).isSet();
     }
 
     /**
@@ -588,8 +588,8 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
         case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
             return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByEnumerationAsBase() )
                     .basicAdd( otherEnd, msgs );
-        case NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE:
-            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataAttribute() )
+        case NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByAttributeType() )
                     .basicAdd( otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
@@ -611,8 +611,8 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
             return basicUnsetRefersToBaseEnumeration( msgs );
         case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
             return ( ( InternalEList< ? > ) getReferredByEnumerationAsBase() ).basicRemove( otherEnd, msgs );
-        case NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE:
-            return ( ( InternalEList< ? > ) getReferredByDataAttribute() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE:
+            return ( ( InternalEList< ? > ) getReferredByAttributeType() ).basicRemove( otherEnd, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -652,8 +652,8 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
             return getRefersToBaseEnumeration();
         case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
             return getReferredByEnumerationAsBase();
-        case NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE:
-            return getReferredByDataAttribute();
+        case NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE:
+            return getReferredByAttributeType();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -687,9 +687,9 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
             getReferredByEnumerationAsBase().clear();
             getReferredByEnumerationAsBase().addAll( ( Collection< ? extends Enumeration > ) newValue );
             return;
-        case NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE:
-            getReferredByDataAttribute().clear();
-            getReferredByDataAttribute().addAll( ( Collection< ? extends DataAttribute > ) newValue );
+        case NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE:
+            getReferredByAttributeType().clear();
+            getReferredByAttributeType().addAll( ( Collection< ? extends AgAttributeType > ) newValue );
             return;
         }
         super.eSet( featureID, newValue );
@@ -721,8 +721,8 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
         case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
             unsetReferredByEnumerationAsBase();
             return;
-        case NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE:
-            unsetReferredByDataAttribute();
+        case NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE:
+            unsetReferredByAttributeType();
             return;
         }
         super.eUnset( featureID );
@@ -748,8 +748,8 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
             return isSetRefersToBaseEnumeration();
         case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
             return isSetReferredByEnumerationAsBase();
-        case NsdPackage.ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE:
-            return isSetReferredByDataAttribute();
+        case NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE:
+            return isSetReferredByAttributeType();
         }
         return super.eIsSet( featureID );
     }
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 1c1da2a..8697b97 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
@@ -1180,7 +1180,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EReference getBasicType_ReferredByDataAttribute() {
+    public EReference getBasicType_ReferredByAttributeType() {
         return ( EReference ) basicTypeEClass.getEStructuralFeatures().get( 3 );
     }
 
@@ -1520,7 +1520,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EReference getConstructedAttribute_ReferredByDataAttribute() {
+    public EReference getConstructedAttribute_ReferredByAttributeType() {
         return ( EReference ) constructedAttributeEClass.getEStructuralFeatures().get( 4 );
     }
 
@@ -1734,36 +1734,6 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 10 );
     }
 
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EReference getDataAttribute_RefersToBasicType() {
-        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 11 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EReference getDataAttribute_RefersToConstructedAttribute() {
-        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 12 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EReference getDataAttribute_RefersToEnumeration() {
-        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 13 );
-    }
-
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2140,7 +2110,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
      * @generated
      */
     @Override
-    public EReference getEnumeration_ReferredByDataAttribute() {
+    public EReference getEnumeration_ReferredByAttributeType() {
         return ( EReference ) enumerationEClass.getEStructuralFeatures().get( 6 );
     }
 
@@ -3684,6 +3654,36 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) agAttributeTypeEClass.getEStructuralFeatures().get( 1 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getAgAttributeType_RefersToBasicType() {
+        return ( EReference ) agAttributeTypeEClass.getEStructuralFeatures().get( 2 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getAgAttributeType_RefersToConstructedAttribute() {
+        return ( EReference ) agAttributeTypeEClass.getEStructuralFeatures().get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getAgAttributeType_RefersToEnumeration() {
+        return ( EReference ) agAttributeTypeEClass.getEStructuralFeatures().get( 4 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -4040,7 +4040,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( basicTypeEClass, BASIC_TYPE__DESC_ID );
         createEAttribute( basicTypeEClass, BASIC_TYPE__NAME );
         createEReference( basicTypeEClass, BASIC_TYPE__PARENT_BASIC_TYPES );
-        createEReference( basicTypeEClass, BASIC_TYPE__REFERRED_BY_DATA_ATTRIBUTE );
+        createEReference( basicTypeEClass, BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE );
         createEReference( basicTypeEClass, BASIC_TYPE__REFERS_TO_DOC );
 
         basicTypesEClass = createEClass( BASIC_TYPES );
@@ -4079,7 +4079,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( constructedAttributeEClass, CONSTRUCTED_ATTRIBUTE__NAME );
         createEReference( constructedAttributeEClass, CONSTRUCTED_ATTRIBUTE__PARENT_CONSTRUCTED_ATTRIBUTES );
         createEReference( constructedAttributeEClass, CONSTRUCTED_ATTRIBUTE__PARENT_SERVICE_TYPE_REALIZATIONS );
-        createEReference( constructedAttributeEClass, CONSTRUCTED_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE );
+        createEReference( constructedAttributeEClass, CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE );
 
         constructedAttributesEClass = createEClass( CONSTRUCTED_ATTRIBUTES );
         createEReference( constructedAttributesEClass, CONSTRUCTED_ATTRIBUTES__CONSTRUCTED_ATTRIBUTE );
@@ -4105,9 +4105,6 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE );
         createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE );
         createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE );
-        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE );
-        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE );
-        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERS_TO_ENUMERATION );
 
         dataObjectEClass = createEClass( DATA_OBJECT );
         createEAttribute( dataObjectEClass, DATA_OBJECT__NAME );
@@ -4150,7 +4147,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEReference( enumerationEClass, ENUMERATION__PARENT_ENUMERATIONS );
         createEReference( enumerationEClass, ENUMERATION__REFERS_TO_BASE_ENUMERATION );
         createEReference( enumerationEClass, ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE );
-        createEReference( enumerationEClass, ENUMERATION__REFERRED_BY_DATA_ATTRIBUTE );
+        createEReference( enumerationEClass, ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE );
 
         enumerationsEClass = createEClass( ENUMERATIONS );
         createEReference( enumerationsEClass, ENUMERATIONS__ENUMERATION );
@@ -4342,6 +4339,9 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         agAttributeTypeEClass = createEClass( AG_ATTRIBUTE_TYPE );
         createEAttribute( agAttributeTypeEClass, AG_ATTRIBUTE_TYPE__TYPE );
         createEAttribute( agAttributeTypeEClass, AG_ATTRIBUTE_TYPE__TYPE_KIND );
+        createEReference( agAttributeTypeEClass, AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE );
+        createEReference( agAttributeTypeEClass, AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE );
+        createEReference( agAttributeTypeEClass, AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION );
 
         agAttributeTypeAndValuesEClass = createEClass( AG_ATTRIBUTE_TYPE_AND_VALUES );
         createEAttribute( agAttributeTypeAndValuesEClass, AG_ATTRIBUTE_TYPE_AND_VALUES__DEFAULT_VALUE );
@@ -4633,8 +4633,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         initEReference( getBasicType_ParentBasicTypes(), this.getBasicTypes(), this.getBasicTypes_BasicType(),
                 "parentBasicTypes", null, 0, 1, BasicType.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
                 !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
-        initEReference( getBasicType_ReferredByDataAttribute(), this.getDataAttribute(),
-                this.getDataAttribute_RefersToBasicType(), "referredByDataAttribute", null, 0, -1, BasicType.class,
+        initEReference( getBasicType_ReferredByAttributeType(), this.getAgAttributeType(),
+                this.getAgAttributeType_RefersToBasicType(), "referredByAttributeType", null, 0, -1, BasicType.class,
                 IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
                 !IS_DERIVED, !IS_ORDERED );
         initEReference( getBasicType_RefersToDoc(), this.getDoc(), this.getDoc_ReferredByBasicType(), "refersToDoc",
@@ -4736,8 +4736,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 this.getServiceTypeRealizations_ServiceTypeRealization(), "parentServiceTypeRealizations", 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_ReferredByDataAttribute(), this.getDataAttribute(),
-                this.getDataAttribute_RefersToConstructedAttribute(), "referredByDataAttribute", null, 0, -1,
+        initEReference( getConstructedAttribute_ReferredByAttributeType(), this.getAgAttributeType(),
+                this.getAgAttributeType_RefersToConstructedAttribute(), "referredByAttributeType", null, 0, -1,
                 ConstructedAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
                 !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
@@ -4811,18 +4811,6 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 this.getDataAttribute_RefersToMaxIndexAttribute(), "referredByDataAttributeAsMaxIndexAttribute", null,
                 0, -1, DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
                 !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
-        initEReference( getDataAttribute_RefersToBasicType(), this.getBasicType(),
-                this.getBasicType_ReferredByDataAttribute(), "refersToBasicType", null, 0, 1, DataAttribute.class,
-                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
-                !IS_DERIVED, !IS_ORDERED );
-        initEReference( getDataAttribute_RefersToConstructedAttribute(), this.getConstructedAttribute(),
-                this.getConstructedAttribute_ReferredByDataAttribute(), "refersToConstructedAttribute", null, 0, 1,
-                DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
-                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
-        initEReference( getDataAttribute_RefersToEnumeration(), this.getEnumeration(),
-                this.getEnumeration_ReferredByDataAttribute(), "refersToEnumeration", 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 );
@@ -4937,10 +4925,10 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 this.getEnumeration_RefersToBaseEnumeration(), "referredByEnumerationAsBase", null, 0, -1,
                 Enumeration.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
                 IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
-        initEReference( getEnumeration_ReferredByDataAttribute(), this.getDataAttribute(),
-                this.getDataAttribute_RefersToEnumeration(), "referredByDataAttribute", null, 0, -1, Enumeration.class,
-                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
-                !IS_DERIVED, !IS_ORDERED );
+        initEReference( getEnumeration_ReferredByAttributeType(), this.getAgAttributeType(),
+                this.getAgAttributeType_RefersToEnumeration(), "referredByAttributeType", 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 );
@@ -5437,6 +5425,18 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         initEAttribute( getAgAttributeType_TypeKind(), this.getAttributeTypeKind(), "typeKind", "BASIC", 0, 1,
                 AgAttributeType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
+        initEReference( getAgAttributeType_RefersToBasicType(), this.getBasicType(),
+                this.getBasicType_ReferredByAttributeType(), "refersToBasicType", null, 0, 1, AgAttributeType.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
+        initEReference( getAgAttributeType_RefersToConstructedAttribute(), this.getConstructedAttribute(),
+                this.getConstructedAttribute_ReferredByAttributeType(), "refersToConstructedAttribute", null, 0, 1,
+                AgAttributeType.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getAgAttributeType_RefersToEnumeration(), this.getEnumeration(),
+                this.getEnumeration_ReferredByAttributeType(), "refersToEnumeration", null, 0, 1, AgAttributeType.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
 
         initEClass( agAttributeTypeAndValuesEClass, AgAttributeTypeAndValues.class, "AgAttributeTypeAndValues",
                 IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
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 bf6661b..9299297 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,8 +22,11 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgPresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgUnderlyingType;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceCDC;
@@ -56,6 +59,9 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceDataAttributeImpl#getRefersToPresCondArgsDoc <em>Refers To Pres Cond Args Doc</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceDataAttributeImpl#getType <em>Type</em>}</li>
  *   <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#getRefersToBasicType <em>Refers To Basic Type</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceDataAttributeImpl#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceDataAttributeImpl#getRefersToEnumeration <em>Refers To Enumeration</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#getFc <em>Fc</em>}</li>
@@ -231,6 +237,63 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
      */
     protected boolean typeKindESet;
 
+    /**
+     * The cached value of the '{@link #getRefersToBasicType() <em>Refers To Basic Type</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToBasicType()
+     * @generated
+     * @ordered
+     */
+    protected BasicType refersToBasicType;
+
+    /**
+     * This is true if the Refers To Basic Type reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToBasicTypeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToConstructedAttribute() <em>Refers To Constructed Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToConstructedAttribute()
+     * @generated
+     * @ordered
+     */
+    protected ConstructedAttribute refersToConstructedAttribute;
+
+    /**
+     * This is true if the Refers To Constructed Attribute reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToConstructedAttributeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToEnumeration() <em>Refers To Enumeration</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToEnumeration()
+     * @generated
+     * @ordered
+     */
+    protected Enumeration refersToEnumeration;
+
+    /**
+     * This is true if the Refers To Enumeration reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToEnumerationESet;
+
     /**
      * The default value of the '{@link #getUnderlyingType() <em>Underlying Type</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -896,6 +959,358 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
         return typeKindESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public BasicType getRefersToBasicType() {
+        return refersToBasicType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToBasicType( BasicType newRefersToBasicType, NotificationChain msgs ) {
+        BasicType oldRefersToBasicType = refersToBasicType;
+        refersToBasicType = newRefersToBasicType;
+        boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+        refersToBasicTypeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE, oldRefersToBasicType, newRefersToBasicType,
+                    !oldRefersToBasicTypeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToBasicType( BasicType newRefersToBasicType ) {
+        if( newRefersToBasicType != refersToBasicType ) {
+            NotificationChain msgs = null;
+            if( refersToBasicType != null )
+                msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            if( newRefersToBasicType != null )
+                msgs = ( ( InternalEObject ) newRefersToBasicType ).eInverseAdd( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            msgs = basicSetRefersToBasicType( newRefersToBasicType, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+            refersToBasicTypeESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE, newRefersToBasicType,
+                        newRefersToBasicType, !oldRefersToBasicTypeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToBasicType( NotificationChain msgs ) {
+        BasicType oldRefersToBasicType = refersToBasicType;
+        refersToBasicType = null;
+        boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+        refersToBasicTypeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE, oldRefersToBasicType, null,
+                    oldRefersToBasicTypeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToBasicType() {
+        if( refersToBasicType != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                    NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            msgs = basicUnsetRefersToBasicType( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+            refersToBasicTypeESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE, null, null,
+                        oldRefersToBasicTypeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToBasicType() {
+        return refersToBasicTypeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ConstructedAttribute getRefersToConstructedAttribute() {
+        return refersToConstructedAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToConstructedAttribute( ConstructedAttribute newRefersToConstructedAttribute,
+            NotificationChain msgs ) {
+        ConstructedAttribute oldRefersToConstructedAttribute = refersToConstructedAttribute;
+        refersToConstructedAttribute = newRefersToConstructedAttribute;
+        boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+        refersToConstructedAttributeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, oldRefersToConstructedAttribute,
+                    newRefersToConstructedAttribute, !oldRefersToConstructedAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToConstructedAttribute( ConstructedAttribute newRefersToConstructedAttribute ) {
+        if( newRefersToConstructedAttribute != refersToConstructedAttribute ) {
+            NotificationChain msgs = null;
+            if( refersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            if( newRefersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) newRefersToConstructedAttribute ).eInverseAdd( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            msgs = basicSetRefersToConstructedAttribute( newRefersToConstructedAttribute, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+            refersToConstructedAttributeESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE,
+                        newRefersToConstructedAttribute, newRefersToConstructedAttribute,
+                        !oldRefersToConstructedAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToConstructedAttribute( NotificationChain msgs ) {
+        ConstructedAttribute oldRefersToConstructedAttribute = refersToConstructedAttribute;
+        refersToConstructedAttribute = null;
+        boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+        refersToConstructedAttributeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, oldRefersToConstructedAttribute,
+                    null, oldRefersToConstructedAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToConstructedAttribute() {
+        if( refersToConstructedAttribute != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                    NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class, msgs );
+            msgs = basicUnsetRefersToConstructedAttribute( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+            refersToConstructedAttributeESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, null, null,
+                        oldRefersToConstructedAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToConstructedAttribute() {
+        return refersToConstructedAttributeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Enumeration getRefersToEnumeration() {
+        return refersToEnumeration;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToEnumeration( Enumeration newRefersToEnumeration, NotificationChain msgs ) {
+        Enumeration oldRefersToEnumeration = refersToEnumeration;
+        refersToEnumeration = newRefersToEnumeration;
+        boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+        refersToEnumerationESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION, oldRefersToEnumeration,
+                    newRefersToEnumeration, !oldRefersToEnumerationESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToEnumeration( Enumeration newRefersToEnumeration ) {
+        if( newRefersToEnumeration != refersToEnumeration ) {
+            NotificationChain msgs = null;
+            if( refersToEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            if( newRefersToEnumeration != null )
+                msgs = ( ( InternalEObject ) newRefersToEnumeration ).eInverseAdd( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            msgs = basicSetRefersToEnumeration( newRefersToEnumeration, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+            refersToEnumerationESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION, newRefersToEnumeration,
+                        newRefersToEnumeration, !oldRefersToEnumerationESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToEnumeration( NotificationChain msgs ) {
+        Enumeration oldRefersToEnumeration = refersToEnumeration;
+        refersToEnumeration = null;
+        boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+        refersToEnumerationESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION, oldRefersToEnumeration, null,
+                    oldRefersToEnumerationESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToEnumeration() {
+        if( refersToEnumeration != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                    NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            msgs = basicUnsetRefersToEnumeration( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+            refersToEnumerationESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION, null, null,
+                        oldRefersToEnumerationESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToEnumeration() {
+        return refersToEnumerationESet;
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1016,6 +1431,22 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
                 msgs = ( ( InternalEObject ) refersToPresCondArgsDoc ).eInverseRemove( this,
                         NsdPackage.DOC__REFERRED_BY_AG_PRESENCE_CONDITION, Doc.class, msgs );
             return basicSetRefersToPresCondArgsDoc( ( Doc ) otherEnd, msgs );
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            if( refersToBasicType != null )
+                msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            return basicSetRefersToBasicType( ( BasicType ) otherEnd, msgs );
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            if( refersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            return basicSetRefersToConstructedAttribute( ( ConstructedAttribute ) otherEnd, msgs );
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            if( refersToEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            return basicSetRefersToEnumeration( ( Enumeration ) otherEnd, msgs );
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__PARENT_SERVICE_CDC:
             if( eInternalContainer() != null )
                 msgs = eBasicRemoveFromContainer( msgs );
@@ -1034,6 +1465,12 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
         switch( featureID ) {
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_PRES_COND_ARGS_DOC:
             return basicUnsetRefersToPresCondArgsDoc( msgs );
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            return basicUnsetRefersToBasicType( msgs );
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return basicUnsetRefersToConstructedAttribute( msgs );
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            return basicUnsetRefersToEnumeration( msgs );
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__PARENT_SERVICE_CDC:
             return basicSetParentServiceCDC( null, msgs );
         }
@@ -1075,6 +1512,12 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
             return getType();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE_KIND:
             return getTypeKind();
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            return getRefersToBasicType();
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return getRefersToConstructedAttribute();
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            return getRefersToEnumeration();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE:
             return getUnderlyingType();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND:
@@ -1115,6 +1558,15 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE_KIND:
             setTypeKind( ( Enumerator ) newValue );
             return;
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            setRefersToBasicType( ( BasicType ) newValue );
+            return;
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            setRefersToConstructedAttribute( ( ConstructedAttribute ) newValue );
+            return;
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            setRefersToEnumeration( ( Enumeration ) newValue );
+            return;
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE:
             setUnderlyingType( ( String ) newValue );
             return;
@@ -1160,6 +1612,15 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE_KIND:
             unsetTypeKind();
             return;
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            unsetRefersToBasicType();
+            return;
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            unsetRefersToConstructedAttribute();
+            return;
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            unsetRefersToEnumeration();
+            return;
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE:
             unsetUnderlyingType();
             return;
@@ -1199,6 +1660,12 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
             return isSetType();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE_KIND:
             return isSetTypeKind();
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            return isSetRefersToBasicType();
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return isSetRefersToConstructedAttribute();
+        case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            return isSetRefersToEnumeration();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE:
             return isSetUnderlyingType();
         case NsdPackage.SERVICE_DATA_ATTRIBUTE__UNDERLYING_TYPE_KIND:
@@ -1240,6 +1707,12 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
                 return NsdPackage.AG_ATTRIBUTE_TYPE__TYPE;
             case NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE_KIND:
                 return NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND;
+            case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE;
+            case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE;
+            case NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION;
             default:
                 return -1;
             }
@@ -1284,6 +1757,12 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
                 return NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE;
             case NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND:
                 return NsdPackage.SERVICE_DATA_ATTRIBUTE__TYPE_KIND;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE:
+                return NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+                return NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION:
+                return NsdPackage.SERVICE_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION;
             default:
                 return -1;
             }
@@ -1363,10 +1842,10 @@ public class ServiceDataAttributeImpl extends DocumentedClassImpl implements Ser
     @Override
     public boolean buildExplicitLinks( IRiseClipseConsole console, boolean forceUpdate ) {
         if( super.buildExplicitLinks( console, forceUpdate ) ) return true;
-        
+
         if( isSetPresCondArgsID() ) {
             if( this.eResource().getResourceSet() instanceof NsdResourceSetImpl ) {
-                Doc doc = (( NsdResourceSetImpl ) this.eResource().getResourceSet() ).findDoc( getPresCondArgsID() );
+                Doc doc = ( ( NsdResourceSetImpl ) this.eResource().getResourceSet() ).findDoc( getPresCondArgsID() );
                 if( doc != null ) setRefersToPresCondArgsDoc( doc );
             }
         }
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 c9195e9..564c2bc 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
@@ -21,7 +21,10 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeTypeAndValues;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter;
@@ -49,6 +52,9 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
  * <ul>
  *   <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#getRefersToBasicType <em>Refers To Basic Type</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceParameterImpl#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceParameterImpl#getRefersToEnumeration <em>Refers To Enumeration</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceParameterImpl#getDefaultValue <em>Default Value</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceParameterImpl#getMaxValue <em>Max Value</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ServiceParameterImpl#getMinValue <em>Min Value</em>}</li>
@@ -118,6 +124,63 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
      */
     protected boolean typeKindESet;
 
+    /**
+     * The cached value of the '{@link #getRefersToBasicType() <em>Refers To Basic Type</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToBasicType()
+     * @generated
+     * @ordered
+     */
+    protected BasicType refersToBasicType;
+
+    /**
+     * This is true if the Refers To Basic Type reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToBasicTypeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToConstructedAttribute() <em>Refers To Constructed Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToConstructedAttribute()
+     * @generated
+     * @ordered
+     */
+    protected ConstructedAttribute refersToConstructedAttribute;
+
+    /**
+     * This is true if the Refers To Constructed Attribute reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToConstructedAttributeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToEnumeration() <em>Refers To Enumeration</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToEnumeration()
+     * @generated
+     * @ordered
+     */
+    protected Enumeration refersToEnumeration;
+
+    /**
+     * This is true if the Refers To Enumeration reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToEnumerationESet;
+
     /**
      * The default value of the '{@link #getDefaultValue() <em>Default Value</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -611,6 +674,355 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
         return typeKindESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public BasicType getRefersToBasicType() {
+        return refersToBasicType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToBasicType( BasicType newRefersToBasicType, NotificationChain msgs ) {
+        BasicType oldRefersToBasicType = refersToBasicType;
+        refersToBasicType = newRefersToBasicType;
+        boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+        refersToBasicTypeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE, oldRefersToBasicType, newRefersToBasicType,
+                    !oldRefersToBasicTypeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToBasicType( BasicType newRefersToBasicType ) {
+        if( newRefersToBasicType != refersToBasicType ) {
+            NotificationChain msgs = null;
+            if( refersToBasicType != null )
+                msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            if( newRefersToBasicType != null )
+                msgs = ( ( InternalEObject ) newRefersToBasicType ).eInverseAdd( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            msgs = basicSetRefersToBasicType( newRefersToBasicType, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+            refersToBasicTypeESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE, newRefersToBasicType, newRefersToBasicType,
+                        !oldRefersToBasicTypeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToBasicType( NotificationChain msgs ) {
+        BasicType oldRefersToBasicType = refersToBasicType;
+        refersToBasicType = null;
+        boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+        refersToBasicTypeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE, oldRefersToBasicType, null,
+                    oldRefersToBasicTypeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToBasicType() {
+        if( refersToBasicType != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                    NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            msgs = basicUnsetRefersToBasicType( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+            refersToBasicTypeESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE, null, null, oldRefersToBasicTypeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToBasicType() {
+        return refersToBasicTypeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ConstructedAttribute getRefersToConstructedAttribute() {
+        return refersToConstructedAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToConstructedAttribute( ConstructedAttribute newRefersToConstructedAttribute,
+            NotificationChain msgs ) {
+        ConstructedAttribute oldRefersToConstructedAttribute = refersToConstructedAttribute;
+        refersToConstructedAttribute = newRefersToConstructedAttribute;
+        boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+        refersToConstructedAttributeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE, oldRefersToConstructedAttribute,
+                    newRefersToConstructedAttribute, !oldRefersToConstructedAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToConstructedAttribute( ConstructedAttribute newRefersToConstructedAttribute ) {
+        if( newRefersToConstructedAttribute != refersToConstructedAttribute ) {
+            NotificationChain msgs = null;
+            if( refersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            if( newRefersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) newRefersToConstructedAttribute ).eInverseAdd( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            msgs = basicSetRefersToConstructedAttribute( newRefersToConstructedAttribute, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+            refersToConstructedAttributeESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE, newRefersToConstructedAttribute,
+                        newRefersToConstructedAttribute, !oldRefersToConstructedAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToConstructedAttribute( NotificationChain msgs ) {
+        ConstructedAttribute oldRefersToConstructedAttribute = refersToConstructedAttribute;
+        refersToConstructedAttribute = null;
+        boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+        refersToConstructedAttributeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE, oldRefersToConstructedAttribute,
+                    null, oldRefersToConstructedAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToConstructedAttribute() {
+        if( refersToConstructedAttribute != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                    NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class, msgs );
+            msgs = basicUnsetRefersToConstructedAttribute( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+            refersToConstructedAttributeESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE, null, null,
+                        oldRefersToConstructedAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToConstructedAttribute() {
+        return refersToConstructedAttributeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Enumeration getRefersToEnumeration() {
+        return refersToEnumeration;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToEnumeration( Enumeration newRefersToEnumeration, NotificationChain msgs ) {
+        Enumeration oldRefersToEnumeration = refersToEnumeration;
+        refersToEnumeration = newRefersToEnumeration;
+        boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+        refersToEnumerationESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION, oldRefersToEnumeration, newRefersToEnumeration,
+                    !oldRefersToEnumerationESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToEnumeration( Enumeration newRefersToEnumeration ) {
+        if( newRefersToEnumeration != refersToEnumeration ) {
+            NotificationChain msgs = null;
+            if( refersToEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            if( newRefersToEnumeration != null )
+                msgs = ( ( InternalEObject ) newRefersToEnumeration ).eInverseAdd( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            msgs = basicSetRefersToEnumeration( newRefersToEnumeration, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+            refersToEnumerationESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION, newRefersToEnumeration,
+                        newRefersToEnumeration, !oldRefersToEnumerationESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToEnumeration( NotificationChain msgs ) {
+        Enumeration oldRefersToEnumeration = refersToEnumeration;
+        refersToEnumeration = null;
+        boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+        refersToEnumerationESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION, oldRefersToEnumeration, null,
+                    oldRefersToEnumerationESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToEnumeration() {
+        if( refersToEnumeration != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                    NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            msgs = basicUnsetRefersToEnumeration( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+            refersToEnumerationESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION, null, null, oldRefersToEnumerationESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToEnumeration() {
+        return refersToEnumerationESet;
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -619,6 +1031,22 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
     @Override
     public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
         switch( featureID ) {
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE:
+            if( refersToBasicType != null )
+                msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            return basicSetRefersToBasicType( ( BasicType ) otherEnd, msgs );
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            if( refersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            return basicSetRefersToConstructedAttribute( ( ConstructedAttribute ) otherEnd, msgs );
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION:
+            if( refersToEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            return basicSetRefersToEnumeration( ( Enumeration ) otherEnd, msgs );
         case NsdPackage.SERVICE_PARAMETER__PARENT_CDC:
             if( eInternalContainer() != null )
                 msgs = eBasicRemoveFromContainer( msgs );
@@ -635,6 +1063,12 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
     @Override
     public NotificationChain eInverseRemove( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
         switch( featureID ) {
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE:
+            return basicUnsetRefersToBasicType( msgs );
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return basicUnsetRefersToConstructedAttribute( msgs );
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION:
+            return basicUnsetRefersToEnumeration( msgs );
         case NsdPackage.SERVICE_PARAMETER__PARENT_CDC:
             return basicSetParentCDC( null, msgs );
         }
@@ -667,6 +1101,12 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
             return getType();
         case NsdPackage.SERVICE_PARAMETER__TYPE_KIND:
             return getTypeKind();
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE:
+            return getRefersToBasicType();
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return getRefersToConstructedAttribute();
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION:
+            return getRefersToEnumeration();
         case NsdPackage.SERVICE_PARAMETER__DEFAULT_VALUE:
             return getDefaultValue();
         case NsdPackage.SERVICE_PARAMETER__MAX_VALUE:
@@ -695,6 +1135,15 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
         case NsdPackage.SERVICE_PARAMETER__TYPE_KIND:
             setTypeKind( ( Enumerator ) newValue );
             return;
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE:
+            setRefersToBasicType( ( BasicType ) newValue );
+            return;
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            setRefersToConstructedAttribute( ( ConstructedAttribute ) newValue );
+            return;
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION:
+            setRefersToEnumeration( ( Enumeration ) newValue );
+            return;
         case NsdPackage.SERVICE_PARAMETER__DEFAULT_VALUE:
             setDefaultValue( ( String ) newValue );
             return;
@@ -728,6 +1177,15 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
         case NsdPackage.SERVICE_PARAMETER__TYPE_KIND:
             unsetTypeKind();
             return;
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE:
+            unsetRefersToBasicType();
+            return;
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            unsetRefersToConstructedAttribute();
+            return;
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION:
+            unsetRefersToEnumeration();
+            return;
         case NsdPackage.SERVICE_PARAMETER__DEFAULT_VALUE:
             unsetDefaultValue();
             return;
@@ -759,6 +1217,12 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
             return isSetType();
         case NsdPackage.SERVICE_PARAMETER__TYPE_KIND:
             return isSetTypeKind();
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE:
+            return isSetRefersToBasicType();
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return isSetRefersToConstructedAttribute();
+        case NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION:
+            return isSetRefersToEnumeration();
         case NsdPackage.SERVICE_PARAMETER__DEFAULT_VALUE:
             return isSetDefaultValue();
         case NsdPackage.SERVICE_PARAMETER__MAX_VALUE:
@@ -786,6 +1250,12 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
                 return NsdPackage.AG_ATTRIBUTE_TYPE__TYPE;
             case NsdPackage.SERVICE_PARAMETER__TYPE_KIND:
                 return NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND;
+            case NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE;
+            case NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE;
+            case NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION;
             default:
                 return -1;
             }
@@ -818,6 +1288,12 @@ public class ServiceParameterImpl extends DocumentedClassImpl implements Service
                 return NsdPackage.SERVICE_PARAMETER__TYPE;
             case NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND:
                 return NsdPackage.SERVICE_PARAMETER__TYPE_KIND;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE:
+                return NsdPackage.SERVICE_PARAMETER__REFERS_TO_BASIC_TYPE;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+                return NsdPackage.SERVICE_PARAMETER__REFERS_TO_CONSTRUCTED_ATTRIBUTE;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION:
+                return NsdPackage.SERVICE_PARAMETER__REFERS_TO_ENUMERATION;
             default:
                 return -1;
             }
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 3689838..eb82a42 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
@@ -23,8 +23,11 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgArray;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgAttributeTypeAndValues;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgPresenceCondition;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
@@ -64,6 +67,9 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
  *   <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#getRefersToBasicType <em>Refers To Basic Type</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getRefersToConstructedAttribute <em>Refers To Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getRefersToEnumeration <em>Refers To Enumeration</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getDefaultValue <em>Default Value</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getMaxValue <em>Max Value</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getMinValue <em>Min Value</em>}</li>
@@ -356,6 +362,63 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected boolean typeKindESet;
 
+    /**
+     * The cached value of the '{@link #getRefersToBasicType() <em>Refers To Basic Type</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToBasicType()
+     * @generated
+     * @ordered
+     */
+    protected BasicType refersToBasicType;
+
+    /**
+     * This is true if the Refers To Basic Type reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToBasicTypeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToConstructedAttribute() <em>Refers To Constructed Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToConstructedAttribute()
+     * @generated
+     * @ordered
+     */
+    protected ConstructedAttribute refersToConstructedAttribute;
+
+    /**
+     * This is true if the Refers To Constructed Attribute reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToConstructedAttributeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToEnumeration() <em>Refers To Enumeration</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToEnumeration()
+     * @generated
+     * @ordered
+     */
+    protected Enumeration refersToEnumeration;
+
+    /**
+     * This is true if the Refers To Enumeration reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToEnumerationESet;
+
     /**
      * The default value of the '{@link #getDefaultValue() <em>Default Value</em>}' attribute.
      * <!-- begin-user-doc -->
@@ -1353,6 +1416,356 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         return typeKindESet;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public BasicType getRefersToBasicType() {
+        return refersToBasicType;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToBasicType( BasicType newRefersToBasicType, NotificationChain msgs ) {
+        BasicType oldRefersToBasicType = refersToBasicType;
+        refersToBasicType = newRefersToBasicType;
+        boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+        refersToBasicTypeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE, oldRefersToBasicType, newRefersToBasicType,
+                    !oldRefersToBasicTypeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToBasicType( BasicType newRefersToBasicType ) {
+        if( newRefersToBasicType != refersToBasicType ) {
+            NotificationChain msgs = null;
+            if( refersToBasicType != null )
+                msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            if( newRefersToBasicType != null )
+                msgs = ( ( InternalEObject ) newRefersToBasicType ).eInverseAdd( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            msgs = basicSetRefersToBasicType( newRefersToBasicType, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+            refersToBasicTypeESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE, newRefersToBasicType, newRefersToBasicType,
+                        !oldRefersToBasicTypeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToBasicType( NotificationChain msgs ) {
+        BasicType oldRefersToBasicType = refersToBasicType;
+        refersToBasicType = null;
+        boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+        refersToBasicTypeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE, oldRefersToBasicType, null,
+                    oldRefersToBasicTypeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToBasicType() {
+        if( refersToBasicType != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                    NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            msgs = basicUnsetRefersToBasicType( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToBasicTypeESet = refersToBasicTypeESet;
+            refersToBasicTypeESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE, null, null, oldRefersToBasicTypeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToBasicType() {
+        return refersToBasicTypeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public ConstructedAttribute getRefersToConstructedAttribute() {
+        return refersToConstructedAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToConstructedAttribute( ConstructedAttribute newRefersToConstructedAttribute,
+            NotificationChain msgs ) {
+        ConstructedAttribute oldRefersToConstructedAttribute = refersToConstructedAttribute;
+        refersToConstructedAttribute = newRefersToConstructedAttribute;
+        boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+        refersToConstructedAttributeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, oldRefersToConstructedAttribute,
+                    newRefersToConstructedAttribute, !oldRefersToConstructedAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToConstructedAttribute( ConstructedAttribute newRefersToConstructedAttribute ) {
+        if( newRefersToConstructedAttribute != refersToConstructedAttribute ) {
+            NotificationChain msgs = null;
+            if( refersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            if( newRefersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) newRefersToConstructedAttribute ).eInverseAdd( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            msgs = basicSetRefersToConstructedAttribute( newRefersToConstructedAttribute, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+            refersToConstructedAttributeESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, newRefersToConstructedAttribute,
+                        newRefersToConstructedAttribute, !oldRefersToConstructedAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToConstructedAttribute( NotificationChain msgs ) {
+        ConstructedAttribute oldRefersToConstructedAttribute = refersToConstructedAttribute;
+        refersToConstructedAttribute = null;
+        boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+        refersToConstructedAttributeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, oldRefersToConstructedAttribute,
+                    null, oldRefersToConstructedAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToConstructedAttribute() {
+        if( refersToConstructedAttribute != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                    NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class, msgs );
+            msgs = basicUnsetRefersToConstructedAttribute( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToConstructedAttributeESet = refersToConstructedAttributeESet;
+            refersToConstructedAttributeESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE, null, null,
+                        oldRefersToConstructedAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToConstructedAttribute() {
+        return refersToConstructedAttributeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Enumeration getRefersToEnumeration() {
+        return refersToEnumeration;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToEnumeration( Enumeration newRefersToEnumeration, NotificationChain msgs ) {
+        Enumeration oldRefersToEnumeration = refersToEnumeration;
+        refersToEnumeration = newRefersToEnumeration;
+        boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+        refersToEnumerationESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION, oldRefersToEnumeration,
+                    newRefersToEnumeration, !oldRefersToEnumerationESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToEnumeration( Enumeration newRefersToEnumeration ) {
+        if( newRefersToEnumeration != refersToEnumeration ) {
+            NotificationChain msgs = null;
+            if( refersToEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            if( newRefersToEnumeration != null )
+                msgs = ( ( InternalEObject ) newRefersToEnumeration ).eInverseAdd( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            msgs = basicSetRefersToEnumeration( newRefersToEnumeration, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+            refersToEnumerationESet = true;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.SET,
+                        NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION, newRefersToEnumeration,
+                        newRefersToEnumeration, !oldRefersToEnumerationESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToEnumeration( NotificationChain msgs ) {
+        Enumeration oldRefersToEnumeration = refersToEnumeration;
+        refersToEnumeration = null;
+        boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+        refersToEnumerationESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION, oldRefersToEnumeration, null,
+                    oldRefersToEnumerationESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToEnumeration() {
+        if( refersToEnumeration != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                    NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            msgs = basicUnsetRefersToEnumeration( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToEnumerationESet = refersToEnumerationESet;
+            refersToEnumerationESet = false;
+            if( eNotificationRequired() )
+                eNotify( new ENotificationImpl( this, Notification.UNSET,
+                        NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION, null, null,
+                        oldRefersToEnumerationESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToEnumeration() {
+        return refersToEnumerationESet;
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1483,6 +1896,22 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
                 msgs = ( ( InternalEObject ) refersToPresCondArgsDoc ).eInverseRemove( this,
                         NsdPackage.DOC__REFERRED_BY_AG_PRESENCE_CONDITION, Doc.class, msgs );
             return basicSetRefersToPresCondArgsDoc( ( Doc ) otherEnd, msgs );
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            if( refersToBasicType != null )
+                msgs = ( ( InternalEObject ) refersToBasicType ).eInverseRemove( this,
+                        NsdPackage.BASIC_TYPE__REFERRED_BY_ATTRIBUTE_TYPE, BasicType.class, msgs );
+            return basicSetRefersToBasicType( ( BasicType ) otherEnd, msgs );
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            if( refersToConstructedAttribute != null )
+                msgs = ( ( InternalEObject ) refersToConstructedAttribute ).eInverseRemove( this,
+                        NsdPackage.CONSTRUCTED_ATTRIBUTE__REFERRED_BY_ATTRIBUTE_TYPE, ConstructedAttribute.class,
+                        msgs );
+            return basicSetRefersToConstructedAttribute( ( ConstructedAttribute ) otherEnd, msgs );
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            if( refersToEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ATTRIBUTE_TYPE, Enumeration.class, msgs );
+            return basicSetRefersToEnumeration( ( Enumeration ) otherEnd, msgs );
         case NsdPackage.SUB_DATA_ATTRIBUTE__PARENT_CONSTRUCTED_ATTRIBUTE:
             if( eInternalContainer() != null )
                 msgs = eBasicRemoveFromContainer( msgs );
@@ -1506,6 +1935,12 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         switch( featureID ) {
         case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_PRES_COND_ARGS_DOC:
             return basicUnsetRefersToPresCondArgsDoc( msgs );
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            return basicUnsetRefersToBasicType( msgs );
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return basicUnsetRefersToConstructedAttribute( msgs );
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            return basicUnsetRefersToEnumeration( msgs );
         case NsdPackage.SUB_DATA_ATTRIBUTE__PARENT_CONSTRUCTED_ATTRIBUTE:
             return basicSetParentConstructedAttribute( null, msgs );
         case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
@@ -1557,6 +1992,12 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
             return getType();
         case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE_KIND:
             return getTypeKind();
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            return getRefersToBasicType();
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return getRefersToConstructedAttribute();
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            return getRefersToEnumeration();
         case NsdPackage.SUB_DATA_ATTRIBUTE__DEFAULT_VALUE:
             return getDefaultValue();
         case NsdPackage.SUB_DATA_ATTRIBUTE__MAX_VALUE:
@@ -1611,6 +2052,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE_KIND:
             setTypeKind( ( Enumerator ) newValue );
             return;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            setRefersToBasicType( ( BasicType ) newValue );
+            return;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            setRefersToConstructedAttribute( ( ConstructedAttribute ) newValue );
+            return;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            setRefersToEnumeration( ( Enumeration ) newValue );
+            return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__DEFAULT_VALUE:
             setDefaultValue( ( String ) newValue );
             return;
@@ -1671,6 +2121,15 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE_KIND:
             unsetTypeKind();
             return;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            unsetRefersToBasicType();
+            return;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            unsetRefersToConstructedAttribute();
+            return;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            unsetRefersToEnumeration();
+            return;
         case NsdPackage.SUB_DATA_ATTRIBUTE__DEFAULT_VALUE:
             unsetDefaultValue();
             return;
@@ -1721,6 +2180,12 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
             return isSetType();
         case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE_KIND:
             return isSetTypeKind();
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+            return isSetRefersToBasicType();
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+            return isSetRefersToConstructedAttribute();
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+            return isSetRefersToEnumeration();
         case NsdPackage.SUB_DATA_ATTRIBUTE__DEFAULT_VALUE:
             return isSetDefaultValue();
         case NsdPackage.SUB_DATA_ATTRIBUTE__MAX_VALUE:
@@ -1778,6 +2243,12 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
                 return NsdPackage.AG_ATTRIBUTE_TYPE__TYPE;
             case NsdPackage.SUB_DATA_ATTRIBUTE__TYPE_KIND:
                 return NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND;
+            case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE;
+            case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE;
+            case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION:
+                return NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION;
             default:
                 return -1;
             }
@@ -1838,6 +2309,12 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
                 return NsdPackage.SUB_DATA_ATTRIBUTE__TYPE;
             case NsdPackage.AG_ATTRIBUTE_TYPE__TYPE_KIND:
                 return NsdPackage.SUB_DATA_ATTRIBUTE__TYPE_KIND;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_BASIC_TYPE:
+                return NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_BASIC_TYPE;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_CONSTRUCTED_ATTRIBUTE:
+                return NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_CONSTRUCTED_ATTRIBUTE;
+            case NsdPackage.AG_ATTRIBUTE_TYPE__REFERS_TO_ENUMERATION:
+                return NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_ENUMERATION;
             default:
                 return -1;
             }
@@ -1948,7 +2425,7 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         NS ns = getParentConstructedAttribute().getParentConstructedAttributes().getParentNS();
 
         String messagePrefix = "[NSD links] while resolving link from SubDataAttribute (name: " + getName()
-                                + ", NS id: " + ns.getId() + ", line: " + getLineNumber() + "): ";
+                + ", NS id: " + ns.getId() + ", line: " + getLineNumber() + "): ";
 
         if( isSetPresCond() ) {
             PresenceCondition foundPC = ns.findPresenceCondition( getPresCond(), console );
@@ -1957,15 +2434,70 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
             }
             else {
                 setRefersToPresenceCondition( foundPC );
-                console.info( "[NSD links] PresenceCondition (name: " + getPresCond() + ") refers by SubDataAttribute (name: "
+                console.info( "[NSD links] PresenceCondition (name: " + getPresCond()
+                        + ") refers by SubDataAttribute (name: "
                         + getName() + ") in NS (id:" + ns.getId() + ") found in NS (id:"
                         + getRefersToPresenceCondition().getParentPresenceConditions().getParentNS().getId() + ")" );
             }
         }
 
+        if( getTypeKind() instanceof DefinedAttributeTypeKind ) {
+            if( isSetType() ) {
+                switch( getTypeKind().getValue() ) {
+                case DefinedAttributeTypeKind.BASIC_VALUE:
+                    BasicType foundBT = ns.findBasicType( getType(), console );
+
+                    if( foundBT == null ) {
+                        console.warning( messagePrefix + "BasicType (name: " + getType() + ") not found" );
+                    }
+                    else {
+                        setRefersToBasicType( foundBT );
+                        console.info( "[NSD links] BasicType (name: " + getType()
+                                + ") refers as type by SubDataAttribute (name: "
+                                + getName() + ") in NS (id:" + ns.getId() + ") found in NS (id:"
+                                + getRefersToBasicType().getParentBasicTypes().getParentNS().getId() + ")" );
+                    }
+                    break;
+                case DefinedAttributeTypeKind.CONSTRUCTED_VALUE:
+                    ConstructedAttribute foundCA = ns.findConstructedAttribute( getType(), console );
+
+                    if( foundCA == null ) {
+                        console.warning( messagePrefix + "ConstructedAttribute (name: " + getType() + ") not found" );
+                    }
+                    else {
+                        setRefersToConstructedAttribute( foundCA );
+                        console.info( "[NSD links] ConstructedAttribute (name: " + getType()
+                                + ") refers as type by SubDataAttribute (name: "
+                                + getName() + ") in NS (id:" + ns.getId() + ") found in NS (id:"
+                                + getRefersToConstructedAttribute().getParentConstructedAttributes().getParentNS()
+                                        .getId()
+                                + ")" );
+                    }
+                    break;
+                case DefinedAttributeTypeKind.ENUMERATED_VALUE:
+                    Enumeration foundEn = ns.findEnumeration( getType(), console );
+
+                    if( foundEn == null ) {
+                        console.warning( messagePrefix + "Enumeration (name: " + getType() + ") not found" );
+                    }
+                    else {
+                        setRefersToEnumeration( foundEn );
+                        console.info( "[NSD links] Enumeration (name: " + getType()
+                                + ") refers as type by SubDataAttribute (name: "
+                                + getName() + ") in NS (id:" + ns.getId() + ") found in NS (id:"
+                                + getRefersToEnumeration().getParentEnumerations().getParentNS().getId() + ")" );
+                    }
+                    break;
+                }
+            }
+            else {
+                console.warning( messagePrefix + "type is missing for " + getTypeKind() );
+            }
+        }
+
         if( isSetPresCondArgsID() ) {
             if( this.eResource().getResourceSet() instanceof NsdResourceSetImpl ) {
-                Doc doc = (( NsdResourceSetImpl ) this.eResource().getResourceSet() ).findDoc( getPresCondArgsID() );
+                Doc doc = ( ( NsdResourceSetImpl ) this.eResource().getResourceSet() ).findDoc( getPresCondArgsID() );
                 if( doc != null ) setRefersToPresCondArgsDoc( doc );
             }
         }
-- 
GitLab