From 8e485174713589c716cce669b766533b232a5f47 Mon Sep 17 00:00:00 2001
From: Dominique Marcadet <Dominique.Marcadet@centralesupelec.fr>
Date: Thu, 7 Feb 2019 18:36:25 +0100
Subject: [PATCH] buildExplicitLinks() done for DataObject and SubDataObject

---
 .../plugin.properties                         |   15 +
 .../nsd/provider/CDCItemProvider.java         |   32 +
 .../provider/DataAttributeItemProvider.java   |   35 +
 .../nsd/provider/DataObjectItemProvider.java  |   49 +
 .../nsd/provider/NsdObjectItemProvider.java   |   18 +
 .../PresenceConditionItemProvider.java        |   52 +
 .../provider/SubDataObjectItemProvider.java   |   66 ++
 .../model/nsd.ecore                           |   54 +-
 .../model/nsd.genmodel                        |   24 +
 .../riseclipse/iec61850/nsd/AnyLNClass.java   |    8 +
 .../edf/riseclipse/iec61850/nsd/CDC.java      |   84 ++
 .../iec61850/nsd/DataAttribute.java           |   86 ++
 .../riseclipse/iec61850/nsd/DataObject.java   |  168 +++
 .../edf/riseclipse/iec61850/nsd/NS.java       |   17 +
 .../riseclipse/iec61850/nsd/NsdObject.java    |   30 +-
 .../riseclipse/iec61850/nsd/NsdPackage.java   | 1007 ++++++++++++++++-
 .../iec61850/nsd/PresenceCondition.java       |  128 +++
 .../iec61850/nsd/SubDataObject.java           |  224 ++++
 .../iec61850/nsd/impl/AnyLNClassImpl.java     |   30 +-
 .../riseclipse/iec61850/nsd/impl/CDCImpl.java |  124 ++
 .../iec61850/nsd/impl/DataAttributeImpl.java  |  138 +++
 .../iec61850/nsd/impl/DataObjectImpl.java     |  517 +++++++++
 .../iec61850/nsd/impl/DependsOnImpl.java      |    5 +-
 .../riseclipse/iec61850/nsd/impl/NSImpl.java  |   62 +
 .../iec61850/nsd/impl/NsdObjectImpl.java      |   67 +-
 .../iec61850/nsd/impl/NsdPackageImpl.java     |  271 ++++-
 .../nsd/impl/PresenceConditionImpl.java       |  198 ++++
 .../iec61850/nsd/impl/SubDataObjectImpl.java  |  679 +++++++++++
 .../iec61850/nsd/util/NsdResourceSetImpl.java |   14 +-
 29 files changed, 4155 insertions(+), 47 deletions(-)

diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
index 11e48f5..9b7ca86 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
@@ -483,3 +483,18 @@ _UI_DependsOn_refersToNS_feature = Refers To NS
 _UI_NS_referredByDependsOn_feature = Referred By Depends On
 _UI_AbstractLNClass_referredByAnyLNClass_feature = Referred By Any LN Class
 _UI_AnyLNClass_refersToAbstractLNClass_feature = Refers To Abstract LN Class
+_UI_CDC_referredByDataObject_feature = Referred By Data Object
+_UI_DataObject_refersToCDC_feature = Refers To CDC
+_UI_DataObject_refersToPresenceCondition_feature = Refers To Presence Condition
+_UI_DataObject_refersToPresenceConditionDerivedStatistics_feature = Refers To Presence Condition Derived Statistics
+_UI_PresenceCondition_referredByDataObject_feature = Referred By Data Object
+_UI_PresenceCondition_referredByDataObjectForDerivedStatistics_feature = Referred By Data Object For Derived Statistics
+_UI_NsdObject_explicitLinksBuilt_feature = Explicit Links Built
+_UI_CDC_referredBySubDataObject_feature = Referred By Sub Data Object
+_UI_DataAttribute_referredBySubDataObjectAsSizeAttribute_feature = Referred By Sub Data Object As Size Attribute
+_UI_DataAttribute_referredBySubDataObjectAsMaxIndexAttribute_feature = Referred By Sub Data Object As Max Index Attribute
+_UI_PresenceCondition_referredBySubDataObject_feature = Referred By Sub Data Object
+_UI_SubDataObject_refersToCDC_feature = Refers To CDC
+_UI_SubDataObject_refersToPresenceCondition_feature = Refers To Presence Condition
+_UI_SubDataObject_refersToSizeAttribute_feature = Refers To Size Attribute
+_UI_SubDataObject_refersToMaxIndexAttribute_feature = Refers To Max Index Attribute
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/CDCItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/CDCItemProvider.java
index 07425a2..37f9ea2 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/CDCItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/CDCItemProvider.java
@@ -69,6 +69,8 @@ public class CDCItemProvider extends TitledClassItemProvider {
             addStatisticsPropertyDescriptor( object );
             addTypeKindParameterizedPropertyDescriptor( object );
             addVariantPropertyDescriptor( object );
+            addReferredByDataObjectPropertyDescriptor( object );
+            addReferredBySubDataObjectPropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -150,6 +152,36 @@ public class CDCItemProvider extends TitledClassItemProvider {
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Referred By Data Object feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredByDataObjectPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(), getString( "_UI_CDC_referredByDataObject_feature" ),
+                        getString( "_UI_PropertyDescriptor_description", "_UI_CDC_referredByDataObject_feature",
+                                "_UI_CDC_type" ),
+                        NsdPackage.Literals.CDC__REFERRED_BY_DATA_OBJECT, true, false, true, null, null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Referred By Sub Data Object feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredBySubDataObjectPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(), getString( "_UI_CDC_referredBySubDataObject_feature" ),
+                        getString( "_UI_PropertyDescriptor_description", "_UI_CDC_referredBySubDataObject_feature",
+                                "_UI_CDC_type" ),
+                        NsdPackage.Literals.CDC__REFERRED_BY_SUB_DATA_OBJECT, true, false, true, null, null, null ) );
+    }
+
     /**
      * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
      * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
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 b8e70bf..f1cf3c8 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
@@ -78,6 +78,8 @@ public class DataAttributeItemProvider extends DocumentedClassItemProvider {
             addMinValuePropertyDescriptor( object );
             addFcPropertyDescriptor( object );
             addNamePropertyDescriptor( object );
+            addReferredBySubDataObjectAsSizeAttributePropertyDescriptor( object );
+            addReferredBySubDataObjectAsMaxIndexAttributePropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -242,6 +244,39 @@ public class DataAttributeItemProvider extends DocumentedClassItemProvider {
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Referred By Sub Data Object As Size Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredBySubDataObjectAsSizeAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_DataAttribute_referredBySubDataObjectAsSizeAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_DataAttribute_referredBySubDataObjectAsSizeAttribute_feature", "_UI_DataAttribute_type" ),
+                NsdPackage.Literals.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE, true, false, true,
+                null, null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Referred By Sub Data Object As Max Index Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredBySubDataObjectAsMaxIndexAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_DataAttribute_referredBySubDataObjectAsMaxIndexAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_DataAttribute_referredBySubDataObjectAsMaxIndexAttribute_feature",
+                        "_UI_DataAttribute_type" ),
+                NsdPackage.Literals.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE, true, false,
+                true, null, null, null ) );
+    }
+
     /**
      * This adds a property descriptor for the Pres Cond feature.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataObjectItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataObjectItemProvider.java
index 817816b..bdb52ec 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataObjectItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataObjectItemProvider.java
@@ -72,6 +72,9 @@ public class DataObjectItemProvider extends DocumentedClassItemProvider {
             addNamePropertyDescriptor( object );
             addTransientPropertyDescriptor( object );
             addTypePropertyDescriptor( object );
+            addRefersToCDCPropertyDescriptor( object );
+            addRefersToPresenceConditionPropertyDescriptor( object );
+            addRefersToPresenceConditionDerivedStatisticsPropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -223,6 +226,52 @@ public class DataObjectItemProvider extends DocumentedClassItemProvider {
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Refers To CDC feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToCDCPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(), getString( "_UI_DataObject_refersToCDC_feature" ),
+                        getString( "_UI_PropertyDescriptor_description", "_UI_DataObject_refersToCDC_feature",
+                                "_UI_DataObject_type" ),
+                        NsdPackage.Literals.DATA_OBJECT__REFERS_TO_CDC, true, false, true, null, null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Presence Condition feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToPresenceConditionPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_DataObject_refersToPresenceCondition_feature" ),
+                getString( "_UI_PropertyDescriptor_description", "_UI_DataObject_refersToPresenceCondition_feature",
+                        "_UI_DataObject_type" ),
+                NsdPackage.Literals.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION, true, false, true, null, null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Presence Condition Derived Statistics feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToPresenceConditionDerivedStatisticsPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_DataObject_refersToPresenceConditionDerivedStatistics_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_DataObject_refersToPresenceConditionDerivedStatistics_feature", "_UI_DataObject_type" ),
+                NsdPackage.Literals.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS, 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/NsdObjectItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NsdObjectItemProvider.java
index 52b7b5a..e593440 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NsdObjectItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/NsdObjectItemProvider.java
@@ -70,6 +70,7 @@ public class NsdObjectItemProvider extends ItemProviderAdapter implements IEditi
             super.getPropertyDescriptors( object );
 
             addLineNumberPropertyDescriptor( object );
+            addExplicitLinksBuiltPropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -90,6 +91,22 @@ public class NsdObjectItemProvider extends ItemProviderAdapter implements IEditi
                         ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE, null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Explicit Links Built feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addExplicitLinksBuiltPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(), getString( "_UI_NsdObject_explicitLinksBuilt_feature" ),
+                        getString( "_UI_PropertyDescriptor_description", "_UI_NsdObject_explicitLinksBuilt_feature",
+                                "_UI_NsdObject_type" ),
+                        NsdPackage.Literals.NSD_OBJECT__EXPLICIT_LINKS_BUILT, true, false, false,
+                        ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE, null, null ) );
+    }
+
     /**
      * This returns the label text for the adapted class.
      * <!-- begin-user-doc -->
@@ -115,6 +132,7 @@ public class NsdObjectItemProvider extends ItemProviderAdapter implements IEditi
 
         switch( notification.getFeatureID( NsdObject.class ) ) {
         case NsdPackage.NSD_OBJECT__LINE_NUMBER:
+        case NsdPackage.NSD_OBJECT__EXPLICIT_LINKS_BUILT:
             fireNotifyChanged( new ViewerNotification( notification, notification.getNotifier(), false, true ) );
             return;
         }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/PresenceConditionItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/PresenceConditionItemProvider.java
index 2aec88b..83eaa58 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/PresenceConditionItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/PresenceConditionItemProvider.java
@@ -64,6 +64,9 @@ public class PresenceConditionItemProvider extends NsdObjectItemProvider {
             addDescIDPropertyDescriptor( object );
             addNamePropertyDescriptor( object );
             addTitleIDPropertyDescriptor( object );
+            addReferredByDataObjectPropertyDescriptor( object );
+            addReferredByDataObjectForDerivedStatisticsPropertyDescriptor( object );
+            addReferredBySubDataObjectPropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -132,6 +135,55 @@ public class PresenceConditionItemProvider extends NsdObjectItemProvider {
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Referred By Data Object feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredByDataObjectPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_PresenceCondition_referredByDataObject_feature" ),
+                getString( "_UI_PropertyDescriptor_description", "_UI_PresenceCondition_referredByDataObject_feature",
+                        "_UI_PresenceCondition_type" ),
+                NsdPackage.Literals.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT, true, false, true, null, null,
+                null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Referred By Data Object For Derived Statistics feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredByDataObjectForDerivedStatisticsPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_PresenceCondition_referredByDataObjectForDerivedStatistics_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_PresenceCondition_referredByDataObjectForDerivedStatistics_feature",
+                        "_UI_PresenceCondition_type" ),
+                NsdPackage.Literals.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS, true, false,
+                true, null, null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Referred By Sub Data Object feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredBySubDataObjectPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(), getString( "_UI_PresenceCondition_referredBySubDataObject_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_PresenceCondition_referredBySubDataObject_feature", "_UI_PresenceCondition_type" ),
+                        NsdPackage.Literals.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT, true, false, true, null,
+                        null, null ) );
+    }
+
     /**
      * This returns PresenceCondition.gif.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataObjectItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataObjectItemProvider.java
index 603927d..adaab35 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataObjectItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataObjectItemProvider.java
@@ -72,6 +72,10 @@ public class SubDataObjectItemProvider extends DocumentedClassItemProvider {
             addUnderlyingTypeKindPropertyDescriptor( object );
             addNamePropertyDescriptor( object );
             addTypePropertyDescriptor( object );
+            addRefersToCDCPropertyDescriptor( object );
+            addRefersToPresenceConditionPropertyDescriptor( object );
+            addRefersToSizeAttributePropertyDescriptor( object );
+            addRefersToMaxIndexAttributePropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -220,6 +224,68 @@ public class SubDataObjectItemProvider extends DocumentedClassItemProvider {
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Refers To CDC feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToCDCPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(), getString( "_UI_SubDataObject_refersToCDC_feature" ),
+                        getString( "_UI_PropertyDescriptor_description", "_UI_SubDataObject_refersToCDC_feature",
+                                "_UI_SubDataObject_type" ),
+                        NsdPackage.Literals.SUB_DATA_OBJECT__REFERS_TO_CDC, true, false, true, null, null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Presence Condition feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToPresenceConditionPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_SubDataObject_refersToPresenceCondition_feature" ),
+                getString( "_UI_PropertyDescriptor_description", "_UI_SubDataObject_refersToPresenceCondition_feature",
+                        "_UI_SubDataObject_type" ),
+                NsdPackage.Literals.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION, true, false, true, null, null,
+                null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Size Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToSizeAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_SubDataObject_refersToSizeAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description", "_UI_SubDataObject_refersToSizeAttribute_feature",
+                        "_UI_SubDataObject_type" ),
+                NsdPackage.Literals.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE, true, false, true, null, null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Max Index Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToMaxIndexAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_SubDataObject_refersToMaxIndexAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description", "_UI_SubDataObject_refersToMaxIndexAttribute_feature",
+                        "_UI_SubDataObject_type" ),
+                NsdPackage.Literals.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE, 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/model/nsd.ecore b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
index c5adcb8..8709e24 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
@@ -236,6 +236,7 @@
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
     <eOperations name="getName" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"/>
+    <eOperations name="getLNClasses" eType="#//LNClasses"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="dataObject" ordered="false"
         upperBound="-1" eType="#//DataObject" unsettable="true" containment="true"
         resolveProxies="false" eOpposite="#//DataObject/anyLNClass">
@@ -443,6 +444,12 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="cDCs" ordered="false" eType="#//CDCs"
         transient="true" unsettable="true" resolveProxies="false" eOpposite="#//CDCs/cDC"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataObject" ordered="false"
+        upperBound="-1" eType="#//DataObject" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//DataObject/refersToCDC"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredBySubDataObject"
+        ordered="false" upperBound="-1" eType="#//SubDataObject" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//SubDataObject/refersToCDC"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="CDCs" eSuperTypes="#//NsdObject">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -622,6 +629,12 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="cDC" ordered="false" eType="#//CDC"
         transient="true" unsettable="true" resolveProxies="false" eOpposite="#//CDC/dataAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredBySubDataObjectAsSizeAttribute"
+        ordered="false" upperBound="-1" eType="#//SubDataObject" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//SubDataObject/refersToSizeAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredBySubDataObjectAsMaxIndexAttribute"
+        ordered="false" upperBound="-1" eType="#//SubDataObject" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//SubDataObject/refersToMaxIndexAttribute"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DataObject" eSuperTypes="#//DocumentedClass #//AgPresenceCondition #//AgPresenceConditionDerivedStatistics #//AgUnderlyingType">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -652,6 +665,14 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="anyLNClass" ordered="false"
         eType="#//AnyLNClass" transient="true" unsettable="true" resolveProxies="false"
         eOpposite="#//AnyLNClass/dataObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToCDC" ordered="false"
+        eType="#//CDC" transient="true" unsettable="true" resolveProxies="false" eOpposite="#//CDC/referredByDataObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToPresenceCondition"
+        ordered="false" eType="#//PresenceCondition" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//PresenceCondition/referredByDataObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToPresenceConditionDerivedStatistics"
+        ordered="false" eType="#//PresenceCondition" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//PresenceCondition/referredByDataObjectForDerivedStatistics"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DataSetMemberOf" eSuperTypes="#//NsdObject">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1018,6 +1039,14 @@
       <details key="name" value="tNS"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
+    <eOperations name="findCDC" eType="#//CDC">
+      <eParameters name="cDCName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eParameters name="console" eType="#//IRiseClipseConsole"/>
+    </eOperations>
+    <eOperations name="findPresenceCondition" eType="#//PresenceCondition">
+      <eParameters name="presenceConditionName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      <eParameters name="console" eType="#//IRiseClipseConsole"/>
+    </eOperations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="changes" ordered="false"
         eType="#//Changes" unsettable="true" containment="true" resolveProxies="false"
         eOpposite="#//Changes/nS">
@@ -1169,6 +1198,15 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="presenceConditions" ordered="false"
         eType="#//PresenceConditions" transient="true" unsettable="true" resolveProxies="false"
         eOpposite="#//PresenceConditions/presenceCondition"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataObject" ordered="false"
+        upperBound="-1" eType="#//DataObject" transient="true" unsettable="true" resolveProxies="false"
+        eOpposite="#//DataObject/refersToPresenceCondition"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataObjectForDerivedStatistics"
+        ordered="false" upperBound="-1" eType="#//DataObject" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//DataObject/refersToPresenceConditionDerivedStatistics"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredBySubDataObject"
+        ordered="false" upperBound="-1" eType="#//SubDataObject" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//SubDataObject/refersToPresenceCondition"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="PresenceConditions" eSuperTypes="#//NsdObject">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1510,6 +1548,17 @@
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="cDC" ordered="false" eType="#//CDC"
         transient="true" unsettable="true" resolveProxies="false" eOpposite="#//CDC/subDataObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToCDC" ordered="false"
+        eType="#//CDC" transient="true" unsettable="true" resolveProxies="false" eOpposite="#//CDC/referredBySubDataObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToPresenceCondition"
+        ordered="false" eType="#//PresenceCondition" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//PresenceCondition/referredBySubDataObject"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToSizeAttribute"
+        ordered="false" eType="#//DataAttribute" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//DataAttribute/referredBySubDataObjectAsSizeAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToMaxIndexAttribute"
+        ordered="false" eType="#//DataAttribute" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//DataAttribute/referredBySubDataObjectAsMaxIndexAttribute"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="TitledClass" eSuperTypes="#//DocumentedClass">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1542,12 +1591,15 @@
     </eAnnotations>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="NsdObject" abstract="true">
-    <eOperations name="buildExplicitLinks">
+    <eOperations name="buildExplicitLinks" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
       <eParameters name="console" eType="#//IRiseClipseConsole"/>
     </eOperations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="lineNumber" lowerBound="1"
         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt" transient="true"
         defaultValueLiteral="-1"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="explicitLinksBuilt" lowerBound="1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean" transient="true"
+        defaultValueLiteral="false"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="AgNSIdentification" abstract="true">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="release" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
index b8e7728..0181ec0 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
@@ -147,6 +147,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//AnyLNClass/base"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//AnyLNClass/refersToAbstractLNClass"/>
       <genOperations ecoreOperation="nsd.ecore#//AnyLNClass/getName"/>
+      <genOperations ecoreOperation="nsd.ecore#//AnyLNClass/getLNClasses"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//ApplicableServiceNS">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//ApplicableServiceNS/serviceNsUsage"/>
@@ -177,6 +178,8 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//CDC/typeKindParameterized"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//CDC/variant"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//CDC/cDCs"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//CDC/referredByDataObject"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//CDC/referredBySubDataObject"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//CDCs">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//CDCs/cDC"/>
@@ -214,12 +217,17 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataAttribute/fc"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataAttribute/name"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/cDC"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/referredBySubDataObjectAsSizeAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/referredBySubDataObjectAsMaxIndexAttribute"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//DataObject">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataObject/name"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataObject/transient"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataObject/type"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//DataObject/anyLNClass"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataObject/refersToCDC"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataObject/refersToPresenceCondition"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataObject/refersToPresenceConditionDerivedStatistics"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//DataSetMemberOf">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataSetMemberOf/cb"/>
@@ -297,6 +305,14 @@
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//NS/cDCs"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//NS/lNClasses"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//NS/referredByDependsOn"/>
+      <genOperations ecoreOperation="nsd.ecore#//NS/findCDC">
+        <genParameters ecoreParameter="nsd.ecore#//NS/findCDC/cDCName"/>
+        <genParameters ecoreParameter="nsd.ecore#//NS/findCDC/console"/>
+      </genOperations>
+      <genOperations ecoreOperation="nsd.ecore#//NS/findPresenceCondition">
+        <genParameters ecoreParameter="nsd.ecore#//NS/findPresenceCondition/presenceConditionName"/>
+        <genParameters ecoreParameter="nsd.ecore#//NS/findPresenceCondition/console"/>
+      </genOperations>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//NSDoc">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//NSDoc/doc"/>
@@ -308,6 +324,9 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//PresenceCondition/name"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//PresenceCondition/titleID"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/presenceConditions"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/referredByDataObject"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/referredByDataObjectForDerivedStatistics"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/referredBySubDataObject"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//PresenceConditions">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceConditions/presenceCondition"/>
@@ -366,12 +385,17 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataObject/name"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataObject/type"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//SubDataObject/cDC"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//SubDataObject/refersToCDC"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//SubDataObject/refersToPresenceCondition"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//SubDataObject/refersToSizeAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//SubDataObject/refersToMaxIndexAttribute"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//TitledClass">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//TitledClass/titleID"/>
     </genClasses>
     <genClasses image="false" ecoreClass="nsd.ecore#//NsdObject">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//NsdObject/lineNumber"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//NsdObject/explicitLinksBuilt"/>
       <genOperations ecoreOperation="nsd.ecore#//NsdObject/buildExplicitLinks">
         <genParameters ecoreParameter="nsd.ecore#//NsdObject/buildExplicitLinks/console"/>
       </genOperations>
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AnyLNClass.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AnyLNClass.java
index ea0c6d2..32154f7 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AnyLNClass.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/AnyLNClass.java
@@ -192,4 +192,12 @@ public interface AnyLNClass extends TitledClass {
      */
     String getName();
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @model kind="operation"
+     * @generated
+     */
+    LNClasses getLNClasses();
+
 } // AnyLNClass
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java
index a7b2eb8..736f82b 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/CDC.java
@@ -39,6 +39,8 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#isTypeKindParameterized <em>Type Kind Parameterized</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getVariant <em>Variant</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getCDCs <em>CD Cs</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredByDataObject <em>Referred By Data Object</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC()
@@ -467,4 +469,86 @@ public interface CDC extends TitledClass {
      */
     void setCDCs( CDCs value );
 
+    /**
+     * Returns the value of the '<em><b>Referred By Data Object</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToCDC <em>Refers To CDC</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Data Object</em>' reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Referred By Data Object</em>' reference list.
+     * @see #isSetReferredByDataObject()
+     * @see #unsetReferredByDataObject()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC_ReferredByDataObject()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToCDC
+     * @model opposite="refersToCDC" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< DataObject > getReferredByDataObject();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredByDataObject <em>Referred By Data Object</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredByDataObject()
+     * @see #getReferredByDataObject()
+     * @generated
+     */
+    void unsetReferredByDataObject();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredByDataObject <em>Referred By Data Object</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Data Object</em>' reference list is set.
+     * @see #unsetReferredByDataObject()
+     * @see #getReferredByDataObject()
+     * @generated
+     */
+    boolean isSetReferredByDataObject();
+
+    /**
+     * Returns the value of the '<em><b>Referred By Sub Data Object</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToCDC <em>Refers To CDC</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Sub Data Object</em>' reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Referred By Sub Data Object</em>' reference list.
+     * @see #isSetReferredBySubDataObject()
+     * @see #unsetReferredBySubDataObject()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getCDC_ReferredBySubDataObject()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToCDC
+     * @model opposite="refersToCDC" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< SubDataObject > getReferredBySubDataObject();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredBySubDataObject()
+     * @see #getReferredBySubDataObject()
+     * @generated
+     */
+    void unsetReferredBySubDataObject();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Sub Data Object</em>' reference list is set.
+     * @see #unsetReferredBySubDataObject()
+     * @see #getReferredBySubDataObject()
+     * @generated
+     */
+    boolean isSetReferredBySubDataObject();
+
 } // CDC
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 d24e712..6ac5ff1 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
@@ -19,6 +19,8 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
 
+import org.eclipse.emf.common.util.EList;
+
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Data Attribute</b></em>'.
@@ -31,6 +33,8 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getFc <em>Fc</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getCDC <em>CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsSizeAttribute <em>Referred By Sub Data Object As Size Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsMaxIndexAttribute <em>Referred By Sub Data Object As Max Index Attribute</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute()
@@ -167,4 +171,86 @@ public interface DataAttribute
      */
     void setCDC( CDC value );
 
+    /**
+     * Returns the value of the '<em><b>Referred By Sub Data Object As Size Attribute</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Sub Data Object As Size Attribute</em>' reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Referred By Sub Data Object As Size Attribute</em>' reference list.
+     * @see #isSetReferredBySubDataObjectAsSizeAttribute()
+     * @see #unsetReferredBySubDataObjectAsSizeAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_ReferredBySubDataObjectAsSizeAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToSizeAttribute
+     * @model opposite="refersToSizeAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< SubDataObject > getReferredBySubDataObjectAsSizeAttribute();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsSizeAttribute <em>Referred By Sub Data Object As Size Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredBySubDataObjectAsSizeAttribute()
+     * @see #getReferredBySubDataObjectAsSizeAttribute()
+     * @generated
+     */
+    void unsetReferredBySubDataObjectAsSizeAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsSizeAttribute <em>Referred By Sub Data Object As Size Attribute</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Sub Data Object As Size Attribute</em>' reference list is set.
+     * @see #unsetReferredBySubDataObjectAsSizeAttribute()
+     * @see #getReferredBySubDataObjectAsSizeAttribute()
+     * @generated
+     */
+    boolean isSetReferredBySubDataObjectAsSizeAttribute();
+
+    /**
+     * Returns the value of the '<em><b>Referred By Sub Data Object As Max Index Attribute</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Sub Data Object As Max Index Attribute</em>' reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Referred By Sub Data Object As Max Index Attribute</em>' reference list.
+     * @see #isSetReferredBySubDataObjectAsMaxIndexAttribute()
+     * @see #unsetReferredBySubDataObjectAsMaxIndexAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_ReferredBySubDataObjectAsMaxIndexAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToMaxIndexAttribute
+     * @model opposite="refersToMaxIndexAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< SubDataObject > getReferredBySubDataObjectAsMaxIndexAttribute();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsMaxIndexAttribute <em>Referred By Sub Data Object As Max Index Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredBySubDataObjectAsMaxIndexAttribute()
+     * @see #getReferredBySubDataObjectAsMaxIndexAttribute()
+     * @generated
+     */
+    void unsetReferredBySubDataObjectAsMaxIndexAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsMaxIndexAttribute <em>Referred By Sub Data Object As Max Index Attribute</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Sub Data Object As Max Index Attribute</em>' reference list is set.
+     * @see #unsetReferredBySubDataObjectAsMaxIndexAttribute()
+     * @see #getReferredBySubDataObjectAsMaxIndexAttribute()
+     * @generated
+     */
+    boolean isSetReferredBySubDataObjectAsMaxIndexAttribute();
+
 } // DataAttribute
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java
index a738656..f4b20db 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataObject.java
@@ -32,6 +32,9 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#isTransient <em>Transient</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getAnyLNClass <em>Any LN Class</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToCDC <em>Refers To CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceConditionDerivedStatistics <em>Refers To Presence Condition Derived Statistics</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject()
@@ -219,4 +222,169 @@ public interface DataObject
      */
     void setAnyLNClass( AnyLNClass value );
 
+    /**
+     * Returns the value of the '<em><b>Refers To CDC</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredByDataObject <em>Referred By Data Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To CDC</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 CDC</em>' reference.
+     * @see #isSetRefersToCDC()
+     * @see #unsetRefersToCDC()
+     * @see #setRefersToCDC(CDC)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_RefersToCDC()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredByDataObject
+     * @model opposite="referredByDataObject" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    CDC getRefersToCDC();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToCDC <em>Refers To CDC</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To CDC</em>' reference.
+     * @see #isSetRefersToCDC()
+     * @see #unsetRefersToCDC()
+     * @see #getRefersToCDC()
+     * @generated
+     */
+    void setRefersToCDC( CDC value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToCDC <em>Refers To CDC</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToCDC()
+     * @see #getRefersToCDC()
+     * @see #setRefersToCDC(CDC)
+     * @generated
+     */
+    void unsetRefersToCDC();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToCDC <em>Refers To CDC</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To CDC</em>' reference is set.
+     * @see #unsetRefersToCDC()
+     * @see #getRefersToCDC()
+     * @see #setRefersToCDC(CDC)
+     * @generated
+     */
+    boolean isSetRefersToCDC();
+
+    /**
+     * Returns the value of the '<em><b>Refers To Presence Condition</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObject <em>Referred By Data Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To Presence Condition</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 Presence Condition</em>' reference.
+     * @see #isSetRefersToPresenceCondition()
+     * @see #unsetRefersToPresenceCondition()
+     * @see #setRefersToPresenceCondition(PresenceCondition)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_RefersToPresenceCondition()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObject
+     * @model opposite="referredByDataObject" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    PresenceCondition getRefersToPresenceCondition();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Presence Condition</em>' reference.
+     * @see #isSetRefersToPresenceCondition()
+     * @see #unsetRefersToPresenceCondition()
+     * @see #getRefersToPresenceCondition()
+     * @generated
+     */
+    void setRefersToPresenceCondition( PresenceCondition value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToPresenceCondition()
+     * @see #getRefersToPresenceCondition()
+     * @see #setRefersToPresenceCondition(PresenceCondition)
+     * @generated
+     */
+    void unsetRefersToPresenceCondition();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Presence Condition</em>' reference is set.
+     * @see #unsetRefersToPresenceCondition()
+     * @see #getRefersToPresenceCondition()
+     * @see #setRefersToPresenceCondition(PresenceCondition)
+     * @generated
+     */
+    boolean isSetRefersToPresenceCondition();
+
+    /**
+     * Returns the value of the '<em><b>Refers To Presence Condition Derived Statistics</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObjectForDerivedStatistics <em>Referred By Data Object For Derived Statistics</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To Presence Condition Derived Statistics</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 Presence Condition Derived Statistics</em>' reference.
+     * @see #isSetRefersToPresenceConditionDerivedStatistics()
+     * @see #unsetRefersToPresenceConditionDerivedStatistics()
+     * @see #setRefersToPresenceConditionDerivedStatistics(PresenceCondition)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataObject_RefersToPresenceConditionDerivedStatistics()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObjectForDerivedStatistics
+     * @model opposite="referredByDataObjectForDerivedStatistics" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    PresenceCondition getRefersToPresenceConditionDerivedStatistics();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceConditionDerivedStatistics <em>Refers To Presence Condition Derived Statistics</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Presence Condition Derived Statistics</em>' reference.
+     * @see #isSetRefersToPresenceConditionDerivedStatistics()
+     * @see #unsetRefersToPresenceConditionDerivedStatistics()
+     * @see #getRefersToPresenceConditionDerivedStatistics()
+     * @generated
+     */
+    void setRefersToPresenceConditionDerivedStatistics( PresenceCondition value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceConditionDerivedStatistics <em>Refers To Presence Condition Derived Statistics</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToPresenceConditionDerivedStatistics()
+     * @see #getRefersToPresenceConditionDerivedStatistics()
+     * @see #setRefersToPresenceConditionDerivedStatistics(PresenceCondition)
+     * @generated
+     */
+    void unsetRefersToPresenceConditionDerivedStatistics();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceConditionDerivedStatistics <em>Refers To Presence Condition Derived Statistics</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Presence Condition Derived Statistics</em>' reference is set.
+     * @see #unsetRefersToPresenceConditionDerivedStatistics()
+     * @see #getRefersToPresenceConditionDerivedStatistics()
+     * @see #setRefersToPresenceConditionDerivedStatistics(PresenceCondition)
+     * @generated
+     */
+    boolean isSetRefersToPresenceConditionDerivedStatistics();
+
 } // DataObject
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NS.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NS.java
index 2cffc9c..42a3a41 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NS.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NS.java
@@ -19,6 +19,7 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
 
+import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
 import org.eclipse.emf.common.util.EList;
 
 /**
@@ -609,4 +610,20 @@ public interface NS extends Copyrighted, AgNSIdentification, AgUML, AgNSdesc {
      */
     boolean isSetReferredByDependsOn();
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
+     * @generated
+     */
+    CDC findCDC( String cDCName, IRiseClipseConsole console );
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
+     * @generated
+     */
+    PresenceCondition findPresenceCondition( String presenceConditionName, IRiseClipseConsole console );
+
 } // NS
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdObject.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdObject.java
index 7ef47df..b4c2c48 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdObject.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NsdObject.java
@@ -32,6 +32,7 @@ import org.eclipse.emf.ecore.EObject;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdObject#getLineNumber <em>Line Number</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdObject#isExplicitLinksBuilt <em>Explicit Links Built</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNsdObject()
@@ -67,11 +68,38 @@ public interface NsdObject extends EObject {
      */
     void setLineNumber( int value );
 
+    /**
+     * Returns the value of the '<em><b>Explicit Links Built</b></em>' attribute.
+     * The default value is <code>"false"</code>.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Explicit Links Built</em>' attribute isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Explicit Links Built</em>' attribute.
+     * @see #setExplicitLinksBuilt(boolean)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getNsdObject_ExplicitLinksBuilt()
+     * @model default="false" required="true" transient="true"
+     * @generated
+     */
+    boolean isExplicitLinksBuilt();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdObject#isExplicitLinksBuilt <em>Explicit Links Built</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Explicit Links Built</em>' attribute.
+     * @see #isExplicitLinksBuilt()
+     * @generated
+     */
+    void setExplicitLinksBuilt( boolean value );
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
      * @generated
      */
-    void buildExplicitLinks( IRiseClipseConsole console );
+    boolean buildExplicitLinks( IRiseClipseConsole console );
 } // NsdObject
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 4116869..b4e0f95 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
@@ -688,6 +688,15 @@ public interface NsdPackage extends EPackage {
      */
     int NSD_OBJECT__LINE_NUMBER = 0;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NSD_OBJECT__EXPLICIT_LINKS_BUILT = 1;
+
     /**
      * The number of structural features of the '<em>Object</em>' class.
      * <!-- begin-user-doc -->
@@ -695,7 +704,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int NSD_OBJECT_FEATURE_COUNT = 1;
+    int NSD_OBJECT_FEATURE_COUNT = 2;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -724,6 +733,15 @@ public interface NsdPackage extends EPackage {
      */
     int APPLIES_TO_TYPE__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int APPLIES_TO_TYPE__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Release</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -814,6 +832,15 @@ public interface NsdPackage extends EPackage {
      */
     int DEPENDS_ON__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DEPENDS_ON__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Release</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -994,6 +1021,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_TYPE__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_TYPE__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -1048,6 +1084,15 @@ public interface NsdPackage extends EPackage {
      */
     int ABBREVIATION__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ABBREVIATION__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Desc ID</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -1111,6 +1156,15 @@ public interface NsdPackage extends EPackage {
      */
     int ABBREVIATIONS__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ABBREVIATIONS__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Abbreviation</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -1174,6 +1228,15 @@ public interface NsdPackage extends EPackage {
      */
     int DOCUMENTED_CLASS__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DOCUMENTED_CLASS__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -1237,6 +1300,15 @@ public interface NsdPackage extends EPackage {
      */
     int TITLED_CLASS__LINE_NUMBER = DOCUMENTED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int TITLED_CLASS__EXPLICIT_LINKS_BUILT = DOCUMENTED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -1309,6 +1381,15 @@ public interface NsdPackage extends EPackage {
      */
     int ANY_LN_CLASS__LINE_NUMBER = TITLED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ANY_LN_CLASS__EXPLICIT_LINKS_BUILT = TITLED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -1399,6 +1480,15 @@ public interface NsdPackage extends EPackage {
      */
     int ANY_LN_CLASS___GET_NAME = TITLED_CLASS_OPERATION_COUNT + 0;
 
+    /**
+     * The operation id for the '<em>Get LN Classes</em>' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ANY_LN_CLASS___GET_LN_CLASSES = TITLED_CLASS_OPERATION_COUNT + 1;
+
     /**
      * The number of operations of the '<em>Any LN Class</em>' class.
      * <!-- begin-user-doc -->
@@ -1406,7 +1496,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int ANY_LN_CLASS_OPERATION_COUNT = TITLED_CLASS_OPERATION_COUNT + 1;
+    int ANY_LN_CLASS_OPERATION_COUNT = TITLED_CLASS_OPERATION_COUNT + 2;
 
     /**
      * The feature id for the '<em><b>Line Number</b></em>' attribute.
@@ -1417,6 +1507,15 @@ public interface NsdPackage extends EPackage {
      */
     int ABSTRACT_LN_CLASS__LINE_NUMBER = ANY_LN_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ABSTRACT_LN_CLASS__EXPLICIT_LINKS_BUILT = ANY_LN_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -1534,6 +1633,15 @@ public interface NsdPackage extends EPackage {
      */
     int ABSTRACT_LN_CLASS___GET_NAME = ANY_LN_CLASS___GET_NAME;
 
+    /**
+     * The operation id for the '<em>Get LN Classes</em>' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ABSTRACT_LN_CLASS___GET_LN_CLASSES = ANY_LN_CLASS___GET_LN_CLASSES;
+
     /**
      * The number of operations of the '<em>Abstract LN Class</em>' class.
      * <!-- begin-user-doc -->
@@ -1552,6 +1660,15 @@ public interface NsdPackage extends EPackage {
      */
     int COPYRIGHTED__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int COPYRIGHTED__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Copyright</b></em>' containment reference.
      * <!-- begin-user-doc -->
@@ -1597,6 +1714,15 @@ public interface NsdPackage extends EPackage {
      */
     int APPLICABLE_SERVICE_NS__LINE_NUMBER = COPYRIGHTED__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int APPLICABLE_SERVICE_NS__EXPLICIT_LINKS_BUILT = COPYRIGHTED__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Copyright</b></em>' containment reference.
      * <!-- begin-user-doc -->
@@ -1669,6 +1795,15 @@ public interface NsdPackage extends EPackage {
      */
     int APPLICABLE_SERVICES__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int APPLICABLE_SERVICES__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Service</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -1732,6 +1867,15 @@ public interface NsdPackage extends EPackage {
      */
     int BASIC_TYPE__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int BASIC_TYPE__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Desc ID</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -1795,6 +1939,15 @@ public interface NsdPackage extends EPackage {
      */
     int BASIC_TYPES__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int BASIC_TYPES__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Basic Type</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -1849,6 +2002,15 @@ public interface NsdPackage extends EPackage {
      */
     int CDC__LINE_NUMBER = TITLED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CDC__EXPLICIT_LINKS_BUILT = TITLED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -1966,6 +2128,24 @@ public interface NsdPackage extends EPackage {
      */
     int CDC__CD_CS = TITLED_CLASS_FEATURE_COUNT + 8;
 
+    /**
+     * The feature id for the '<em><b>Referred By Data Object</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CDC__REFERRED_BY_DATA_OBJECT = TITLED_CLASS_FEATURE_COUNT + 9;
+
+    /**
+     * The feature id for the '<em><b>Referred By Sub Data Object</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CDC__REFERRED_BY_SUB_DATA_OBJECT = TITLED_CLASS_FEATURE_COUNT + 10;
+
     /**
      * The number of structural features of the '<em>CDC</em>' class.
      * <!-- begin-user-doc -->
@@ -1973,7 +2153,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int CDC_FEATURE_COUNT = TITLED_CLASS_FEATURE_COUNT + 9;
+    int CDC_FEATURE_COUNT = TITLED_CLASS_FEATURE_COUNT + 11;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -2002,6 +2182,15 @@ public interface NsdPackage extends EPackage {
      */
     int CD_CS__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CD_CS__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>CDC</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -2056,6 +2245,15 @@ public interface NsdPackage extends EPackage {
      */
     int CHANGES__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CHANGES__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Changes ID</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -2164,6 +2362,15 @@ public interface NsdPackage extends EPackage {
      */
     int CONSTRUCTED_ATTRIBUTE__LINE_NUMBER = TITLED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CONSTRUCTED_ATTRIBUTE__EXPLICIT_LINKS_BUILT = TITLED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -2272,6 +2479,15 @@ public interface NsdPackage extends EPackage {
      */
     int CONSTRUCTED_ATTRIBUTES__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int CONSTRUCTED_ATTRIBUTES__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Constructed Attribute</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -2326,6 +2542,15 @@ public interface NsdPackage extends EPackage {
      */
     int COPYRIGHT_NOTICE__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int COPYRIGHT_NOTICE__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Notice</b></em>' containment reference.
      * <!-- begin-user-doc -->
@@ -2389,6 +2614,15 @@ public interface NsdPackage extends EPackage {
      */
     int DATA_ATTRIBUTE__LINE_NUMBER = DOCUMENTED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ATTRIBUTE__EXPLICIT_LINKS_BUILT = DOCUMENTED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -2578,6 +2812,24 @@ public interface NsdPackage extends EPackage {
      */
     int DATA_ATTRIBUTE__CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 17;
 
+    /**
+     * 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__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 18;
+
+    /**
+     * 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__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 19;
+
     /**
      * The number of structural features of the '<em>Data Attribute</em>' class.
      * <!-- begin-user-doc -->
@@ -2585,7 +2837,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 18;
+    int DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 20;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -2614,6 +2866,15 @@ public interface NsdPackage extends EPackage {
      */
     int DATA_OBJECT__LINE_NUMBER = DOCUMENTED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_OBJECT__EXPLICIT_LINKS_BUILT = DOCUMENTED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -2749,6 +3010,33 @@ public interface NsdPackage extends EPackage {
      */
     int DATA_OBJECT__ANY_LN_CLASS = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
 
+    /**
+     * The feature id for the '<em><b>Refers To CDC</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_OBJECT__REFERS_TO_CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
+
+    /**
+     * The feature id for the '<em><b>Refers To Presence Condition</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION = DOCUMENTED_CLASS_FEATURE_COUNT + 13;
+
+    /**
+     * The feature id for the '<em><b>Refers To Presence Condition Derived Statistics</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS = DOCUMENTED_CLASS_FEATURE_COUNT + 14;
+
     /**
      * The number of structural features of the '<em>Data Object</em>' class.
      * <!-- begin-user-doc -->
@@ -2756,7 +3044,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DATA_OBJECT_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
+    int DATA_OBJECT_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 15;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -2785,6 +3073,15 @@ public interface NsdPackage extends EPackage {
      */
     int DATA_SET_MEMBER_OF__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_SET_MEMBER_OF__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Cb</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -2839,6 +3136,15 @@ public interface NsdPackage extends EPackage {
      */
     int DOC__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DOC__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Mixed</b></em>' attribute list.
      * <!-- begin-user-doc -->
@@ -2920,6 +3226,15 @@ public interface NsdPackage extends EPackage {
      */
     int ENUMERATION__LINE_NUMBER = TITLED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ENUMERATION__EXPLICIT_LINKS_BUILT = TITLED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -3028,6 +3343,15 @@ public interface NsdPackage extends EPackage {
      */
     int ENUMERATIONS__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ENUMERATIONS__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Enumeration</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -3082,6 +3406,15 @@ public interface NsdPackage extends EPackage {
      */
     int FUNCTIONAL_CONSTRAINT__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FUNCTIONAL_CONSTRAINT__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Applicable Services</b></em>' containment reference.
      * <!-- begin-user-doc -->
@@ -3163,6 +3496,15 @@ public interface NsdPackage extends EPackage {
      */
     int FUNCTIONAL_CONSTRAINTS__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FUNCTIONAL_CONSTRAINTS__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Functional Constraint</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -3226,6 +3568,15 @@ public interface NsdPackage extends EPackage {
      */
     int LICENSE__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LICENSE__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Mixed</b></em>' attribute list.
      * <!-- begin-user-doc -->
@@ -3298,6 +3649,15 @@ public interface NsdPackage extends EPackage {
      */
     int LITERAL__LINE_NUMBER = DOCUMENTED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LITERAL__EXPLICIT_LINKS_BUILT = DOCUMENTED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -3388,6 +3748,15 @@ public interface NsdPackage extends EPackage {
      */
     int LN_CLASS__LINE_NUMBER = ANY_LN_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LN_CLASS__EXPLICIT_LINKS_BUILT = ANY_LN_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -3514,6 +3883,15 @@ public interface NsdPackage extends EPackage {
      */
     int LN_CLASS___GET_NAME = ANY_LN_CLASS___GET_NAME;
 
+    /**
+     * The operation id for the '<em>Get LN Classes</em>' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LN_CLASS___GET_LN_CLASSES = ANY_LN_CLASS___GET_LN_CLASSES;
+
     /**
      * The number of operations of the '<em>LN Class</em>' class.
      * <!-- begin-user-doc -->
@@ -3532,6 +3910,15 @@ public interface NsdPackage extends EPackage {
      */
     int LN_CLASSES__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int LN_CLASSES__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Abstract LN Class</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -3595,6 +3982,15 @@ public interface NsdPackage extends EPackage {
      */
     int NOTICE__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NOTICE__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Mixed</b></em>' attribute list.
      * <!-- begin-user-doc -->
@@ -3649,6 +4045,15 @@ public interface NsdPackage extends EPackage {
      */
     int NS__LINE_NUMBER = COPYRIGHTED__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NS__EXPLICIT_LINKS_BUILT = COPYRIGHTED__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Copyright</b></em>' containment reference.
      * <!-- begin-user-doc -->
@@ -3847,6 +4252,24 @@ public interface NsdPackage extends EPackage {
      */
     int NS___BUILD_EXPLICIT_LINKS__IRISECLIPSECONSOLE = COPYRIGHTED___BUILD_EXPLICIT_LINKS__IRISECLIPSECONSOLE;
 
+    /**
+     * The operation id for the '<em>Find CDC</em>' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NS___FIND_CDC__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 0;
+
+    /**
+     * The operation id for the '<em>Find Presence Condition</em>' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 1;
+
     /**
      * The number of operations of the '<em>NS</em>' class.
      * <!-- begin-user-doc -->
@@ -3854,7 +4277,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int NS_OPERATION_COUNT = COPYRIGHTED_OPERATION_COUNT + 0;
+    int NS_OPERATION_COUNT = COPYRIGHTED_OPERATION_COUNT + 2;
 
     /**
      * The feature id for the '<em><b>Line Number</b></em>' attribute.
@@ -3865,6 +4288,15 @@ public interface NsdPackage extends EPackage {
      */
     int NS_DOC__LINE_NUMBER = COPYRIGHTED__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NS_DOC__EXPLICIT_LINKS_BUILT = COPYRIGHTED__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Copyright</b></em>' containment reference.
      * <!-- begin-user-doc -->
@@ -3991,6 +4423,15 @@ public interface NsdPackage extends EPackage {
      */
     int PRESENCE_CONDITION__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PRESENCE_CONDITION__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Argument</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -4036,6 +4477,33 @@ public interface NsdPackage extends EPackage {
      */
     int PRESENCE_CONDITION__PRESENCE_CONDITIONS = NSD_OBJECT_FEATURE_COUNT + 4;
 
+    /**
+     * The feature id for the '<em><b>Referred By Data Object</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT = NSD_OBJECT_FEATURE_COUNT + 5;
+
+    /**
+     * The feature id for the '<em><b>Referred By Data Object For Derived Statistics</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS = NSD_OBJECT_FEATURE_COUNT + 6;
+
+    /**
+     * The feature id for the '<em><b>Referred By Sub Data Object</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT = NSD_OBJECT_FEATURE_COUNT + 7;
+
     /**
      * The number of structural features of the '<em>Presence Condition</em>' class.
      * <!-- begin-user-doc -->
@@ -4043,7 +4511,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int PRESENCE_CONDITION_FEATURE_COUNT = NSD_OBJECT_FEATURE_COUNT + 5;
+    int PRESENCE_CONDITION_FEATURE_COUNT = NSD_OBJECT_FEATURE_COUNT + 8;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -4072,6 +4540,15 @@ public interface NsdPackage extends EPackage {
      */
     int PRESENCE_CONDITIONS__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PRESENCE_CONDITIONS__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Presence Condition</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -4135,6 +4612,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_CDC__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_CDC__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Service Data Attribute</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -4207,6 +4693,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_CD_CS__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_CD_CS__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Service CDC</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -4261,6 +4756,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_CONSTRUCTED_ATTRIBUTE__LINE_NUMBER = CONSTRUCTED_ATTRIBUTE__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_CONSTRUCTED_ATTRIBUTE__EXPLICIT_LINKS_BUILT = CONSTRUCTED_ATTRIBUTE__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -4387,6 +4891,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_CONSTRUCTED_ATTRIBUTES__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_CONSTRUCTED_ATTRIBUTES__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Service Constructed Attribute</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -4441,6 +4954,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_DATA_ATTRIBUTE__LINE_NUMBER = DOCUMENTED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_DATA_ATTRIBUTE__EXPLICIT_LINKS_BUILT = DOCUMENTED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -4594,6 +5116,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_NS__LINE_NUMBER = COPYRIGHTED__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_NS__EXPLICIT_LINKS_BUILT = COPYRIGHTED__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Copyright</b></em>' containment reference.
      * <!-- begin-user-doc -->
@@ -4774,6 +5305,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_NS_USAGE__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_NS_USAGE__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Release</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -4873,6 +5413,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_PARAMETER__LINE_NUMBER = DOCUMENTED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_PARAMETER__EXPLICIT_LINKS_BUILT = DOCUMENTED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -4999,6 +5548,15 @@ public interface NsdPackage extends EPackage {
      */
     int SERVICE_TYPE_REALIZATIONS__LINE_NUMBER = NSD_OBJECT__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SERVICE_TYPE_REALIZATIONS__EXPLICIT_LINKS_BUILT = NSD_OBJECT__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Service Type Realization</b></em>' containment reference list.
      * <!-- begin-user-doc -->
@@ -5053,6 +5611,15 @@ public interface NsdPackage extends EPackage {
      */
     int SUB_DATA_ATTRIBUTE__LINE_NUMBER = DOCUMENTED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_ATTRIBUTE__EXPLICIT_LINKS_BUILT = DOCUMENTED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -5242,6 +5809,15 @@ public interface NsdPackage extends EPackage {
      */
     int SUB_DATA_OBJECT__LINE_NUMBER = DOCUMENTED_CLASS__LINE_NUMBER;
 
+    /**
+     * The feature id for the '<em><b>Explicit Links Built</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_OBJECT__EXPLICIT_LINKS_BUILT = DOCUMENTED_CLASS__EXPLICIT_LINKS_BUILT;
+
     /**
      * The feature id for the '<em><b>Deprecated</b></em>' attribute.
      * <!-- begin-user-doc -->
@@ -5306,76 +5882,112 @@ public interface NsdPackage extends EPackage {
     int SUB_DATA_OBJECT__IS_ARRAY = DOCUMENTED_CLASS_FEATURE_COUNT + 3;
 
     /**
-     * The feature id for the '<em><b>Max Index Attribute</b></em>' attribute.
+     * The feature id for the '<em><b>Max Index Attribute</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_OBJECT__MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 4;
+
+    /**
+     * The feature id for the '<em><b>Min Index</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_OBJECT__MIN_INDEX = DOCUMENTED_CLASS_FEATURE_COUNT + 5;
+
+    /**
+     * The feature id for the '<em><b>Size Attribute</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_OBJECT__SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 6;
+
+    /**
+     * The feature id for the '<em><b>Underlying Type</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int SUB_DATA_OBJECT__UNDERLYING_TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 7;
+
+    /**
+     * The feature id for the '<em><b>Underlying Type Kind</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SUB_DATA_OBJECT__MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 4;
+    int SUB_DATA_OBJECT__UNDERLYING_TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 8;
 
     /**
-     * The feature id for the '<em><b>Min Index</b></em>' attribute.
+     * The feature id for the '<em><b>Name</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SUB_DATA_OBJECT__MIN_INDEX = DOCUMENTED_CLASS_FEATURE_COUNT + 5;
+    int SUB_DATA_OBJECT__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 9;
 
     /**
-     * The feature id for the '<em><b>Size Attribute</b></em>' attribute.
+     * The feature id for the '<em><b>Type</b></em>' attribute.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SUB_DATA_OBJECT__SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 6;
+    int SUB_DATA_OBJECT__TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 10;
 
     /**
-     * The feature id for the '<em><b>Underlying Type</b></em>' attribute.
+     * The feature id for the '<em><b>CDC</b></em>' container reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SUB_DATA_OBJECT__UNDERLYING_TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 7;
+    int SUB_DATA_OBJECT__CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
 
     /**
-     * The feature id for the '<em><b>Underlying Type Kind</b></em>' attribute.
+     * The feature id for the '<em><b>Refers To CDC</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SUB_DATA_OBJECT__UNDERLYING_TYPE_KIND = DOCUMENTED_CLASS_FEATURE_COUNT + 8;
+    int SUB_DATA_OBJECT__REFERS_TO_CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
 
     /**
-     * The feature id for the '<em><b>Name</b></em>' attribute.
+     * The feature id for the '<em><b>Refers To Presence Condition</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SUB_DATA_OBJECT__NAME = DOCUMENTED_CLASS_FEATURE_COUNT + 9;
+    int SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION = DOCUMENTED_CLASS_FEATURE_COUNT + 13;
 
     /**
-     * The feature id for the '<em><b>Type</b></em>' attribute.
+     * The feature id for the '<em><b>Refers To Size Attribute</b></em>' reference.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      * @ordered
      */
-    int SUB_DATA_OBJECT__TYPE = DOCUMENTED_CLASS_FEATURE_COUNT + 10;
+    int SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 14;
 
     /**
-     * The feature id for the '<em><b>CDC</b></em>' container 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 SUB_DATA_OBJECT__CDC = DOCUMENTED_CLASS_FEATURE_COUNT + 11;
+    int SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 15;
 
     /**
      * The number of structural features of the '<em>Sub Data Object</em>' class.
@@ -5384,7 +5996,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_OBJECT_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 12;
+    int SUB_DATA_OBJECT_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 16;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -6366,6 +6978,16 @@ public interface NsdPackage extends EPackage {
      */
     EOperation getAnyLNClass__GetName();
 
+    /**
+     * Returns the meta object for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass#getLNClasses() <em>Get LN Classes</em>}' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the '<em>Get LN Classes</em>' operation.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass#getLNClasses()
+     * @generated
+     */
+    EOperation getAnyLNClass__GetLNClasses();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServiceNS <em>Applicable Service NS</em>}'.
      * <!-- begin-user-doc -->
@@ -6636,6 +7258,28 @@ public interface NsdPackage extends EPackage {
      */
     EReference getCDC_CDCs();
 
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredByDataObject <em>Referred By Data Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Data Object</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredByDataObject()
+     * @see #getCDC()
+     * @generated
+     */
+    EReference getCDC_ReferredByDataObject();
+
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Sub Data Object</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredBySubDataObject()
+     * @see #getCDC()
+     * @generated
+     */
+    EReference getCDC_ReferredBySubDataObject();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs <em>CD Cs</em>}'.
      * <!-- begin-user-doc -->
@@ -6959,6 +7603,28 @@ public interface NsdPackage extends EPackage {
      */
     EReference getDataAttribute_CDC();
 
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsSizeAttribute <em>Referred By Sub Data Object As Size Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Sub Data Object As Size Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsSizeAttribute()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    EReference getDataAttribute_ReferredBySubDataObjectAsSizeAttribute();
+
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsMaxIndexAttribute <em>Referred By Sub Data Object As Max Index Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Sub Data Object As Max Index Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsMaxIndexAttribute()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    EReference getDataAttribute_ReferredBySubDataObjectAsMaxIndexAttribute();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject <em>Data Object</em>}'.
      * <!-- begin-user-doc -->
@@ -7013,6 +7679,39 @@ public interface NsdPackage extends EPackage {
      */
     EReference getDataObject_AnyLNClass();
 
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToCDC <em>Refers To CDC</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To CDC</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToCDC()
+     * @see #getDataObject()
+     * @generated
+     */
+    EReference getDataObject_RefersToCDC();
+
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Presence Condition</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceCondition()
+     * @see #getDataObject()
+     * @generated
+     */
+    EReference getDataObject_RefersToPresenceCondition();
+
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceConditionDerivedStatistics <em>Refers To Presence Condition Derived Statistics</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Presence Condition Derived Statistics</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceConditionDerivedStatistics()
+     * @see #getDataObject()
+     * @generated
+     */
+    EReference getDataObject_RefersToPresenceConditionDerivedStatistics();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataSetMemberOf <em>Data Set Member Of</em>}'.
      * <!-- begin-user-doc -->
@@ -7704,6 +8403,26 @@ public interface NsdPackage extends EPackage {
      */
     EReference getNS_ReferredByDependsOn();
 
+    /**
+     * Returns the meta object for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findCDC(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) <em>Find CDC</em>}' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the '<em>Find CDC</em>' operation.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findCDC(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole)
+     * @generated
+     */
+    EOperation getNS__FindCDC__String_IRiseClipseConsole();
+
+    /**
+     * Returns the meta object for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findPresenceCondition(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) <em>Find Presence Condition</em>}' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the '<em>Find Presence Condition</em>' operation.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findPresenceCondition(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole)
+     * @generated
+     */
+    EOperation getNS__FindPresenceCondition__String_IRiseClipseConsole();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc <em>NS Doc</em>}'.
      * <!-- begin-user-doc -->
@@ -7801,6 +8520,39 @@ public interface NsdPackage extends EPackage {
      */
     EReference getPresenceCondition_PresenceConditions();
 
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObject <em>Referred By Data Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Data Object</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObject()
+     * @see #getPresenceCondition()
+     * @generated
+     */
+    EReference getPresenceCondition_ReferredByDataObject();
+
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObjectForDerivedStatistics <em>Referred By Data Object For Derived Statistics</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Data Object For Derived Statistics</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObjectForDerivedStatistics()
+     * @see #getPresenceCondition()
+     * @generated
+     */
+    EReference getPresenceCondition_ReferredByDataObjectForDerivedStatistics();
+
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Sub Data Object</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataObject()
+     * @see #getPresenceCondition()
+     * @generated
+     */
+    EReference getPresenceCondition_ReferredBySubDataObject();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions <em>Presence Conditions</em>}'.
      * <!-- begin-user-doc -->
@@ -8295,6 +9047,50 @@ public interface NsdPackage extends EPackage {
      */
     EReference getSubDataObject_CDC();
 
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToCDC <em>Refers To CDC</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To CDC</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToCDC()
+     * @see #getSubDataObject()
+     * @generated
+     */
+    EReference getSubDataObject_RefersToCDC();
+
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Presence Condition</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToPresenceCondition()
+     * @see #getSubDataObject()
+     * @generated
+     */
+    EReference getSubDataObject_RefersToPresenceCondition();
+
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Size Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToSizeAttribute()
+     * @see #getSubDataObject()
+     * @generated
+     */
+    EReference getSubDataObject_RefersToSizeAttribute();
+
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Max Index Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToMaxIndexAttribute()
+     * @see #getSubDataObject()
+     * @generated
+     */
+    EReference getSubDataObject_RefersToMaxIndexAttribute();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.TitledClass <em>Titled Class</em>}'.
      * <!-- begin-user-doc -->
@@ -8337,6 +9133,17 @@ public interface NsdPackage extends EPackage {
      */
     EAttribute getNsdObject_LineNumber();
 
+    /**
+     * Returns the meta object for the attribute '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdObject#isExplicitLinksBuilt <em>Explicit Links Built</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the attribute '<em>Explicit Links Built</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdObject#isExplicitLinksBuilt()
+     * @see #getNsdObject()
+     * @generated
+     */
+    EAttribute getNsdObject_ExplicitLinksBuilt();
+
     /**
      * Returns the meta object for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdObject#buildExplicitLinks(fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) <em>Build Explicit Links</em>}' operation.
      * <!-- begin-user-doc -->
@@ -9213,6 +10020,14 @@ public interface NsdPackage extends EPackage {
          */
         EOperation ANY_LN_CLASS___GET_NAME = eINSTANCE.getAnyLNClass__GetName();
 
+        /**
+         * The meta object literal for the '<em><b>Get LN Classes</b></em>' operation.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EOperation ANY_LN_CLASS___GET_LN_CLASSES = eINSTANCE.getAnyLNClass__GetLNClasses();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.ApplicableServiceNSImpl <em>Applicable Service NS</em>}' class.
          * <!-- begin-user-doc -->
@@ -9423,6 +10238,22 @@ public interface NsdPackage extends EPackage {
          */
         EReference CDC__CD_CS = eINSTANCE.getCDC_CDCs();
 
+        /**
+         * The meta object literal for the '<em><b>Referred By Data Object</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CDC__REFERRED_BY_DATA_OBJECT = eINSTANCE.getCDC_ReferredByDataObject();
+
+        /**
+         * The meta object literal for the '<em><b>Referred By Sub Data Object</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference CDC__REFERRED_BY_SUB_DATA_OBJECT = eINSTANCE.getCDC_ReferredBySubDataObject();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCsImpl <em>CD Cs</em>}' class.
          * <!-- begin-user-doc -->
@@ -9680,6 +10511,24 @@ public interface NsdPackage extends EPackage {
          */
         EReference DATA_ATTRIBUTE__CDC = eINSTANCE.getDataAttribute_CDC();
 
+        /**
+         * The meta object literal for the '<em><b>Referred By Sub Data Object As Size Attribute</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE = eINSTANCE
+                .getDataAttribute_ReferredBySubDataObjectAsSizeAttribute();
+
+        /**
+         * The meta object literal for the '<em><b>Referred By Sub Data Object As Max Index Attribute</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE = eINSTANCE
+                .getDataAttribute_ReferredBySubDataObjectAsMaxIndexAttribute();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl <em>Data Object</em>}' class.
          * <!-- begin-user-doc -->
@@ -9722,6 +10571,31 @@ public interface NsdPackage extends EPackage {
          */
         EReference DATA_OBJECT__ANY_LN_CLASS = eINSTANCE.getDataObject_AnyLNClass();
 
+        /**
+         * The meta object literal for the '<em><b>Refers To CDC</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_OBJECT__REFERS_TO_CDC = eINSTANCE.getDataObject_RefersToCDC();
+
+        /**
+         * The meta object literal for the '<em><b>Refers To Presence Condition</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION = eINSTANCE.getDataObject_RefersToPresenceCondition();
+
+        /**
+         * The meta object literal for the '<em><b>Refers To Presence Condition Derived Statistics</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS = eINSTANCE
+                .getDataObject_RefersToPresenceConditionDerivedStatistics();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataSetMemberOfImpl <em>Data Set Member Of</em>}' class.
          * <!-- begin-user-doc -->
@@ -10262,6 +11136,23 @@ public interface NsdPackage extends EPackage {
          */
         EReference NS__REFERRED_BY_DEPENDS_ON = eINSTANCE.getNS_ReferredByDependsOn();
 
+        /**
+         * The meta object literal for the '<em><b>Find CDC</b></em>' operation.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EOperation NS___FIND_CDC__STRING_IRISECLIPSECONSOLE = eINSTANCE.getNS__FindCDC__String_IRiseClipseConsole();
+
+        /**
+         * The meta object literal for the '<em><b>Find Presence Condition</b></em>' operation.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EOperation NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE = eINSTANCE
+                .getNS__FindPresenceCondition__String_IRiseClipseConsole();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NSDocImpl <em>NS Doc</em>}' class.
          * <!-- begin-user-doc -->
@@ -10338,6 +11229,32 @@ public interface NsdPackage extends EPackage {
          */
         EReference PRESENCE_CONDITION__PRESENCE_CONDITIONS = eINSTANCE.getPresenceCondition_PresenceConditions();
 
+        /**
+         * The meta object literal for the '<em><b>Referred By Data Object</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT = eINSTANCE.getPresenceCondition_ReferredByDataObject();
+
+        /**
+         * The meta object literal for the '<em><b>Referred By Data Object For Derived Statistics</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS = eINSTANCE
+                .getPresenceCondition_ReferredByDataObjectForDerivedStatistics();
+
+        /**
+         * The meta object literal for the '<em><b>Referred By Sub Data Object</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT = eINSTANCE
+                .getPresenceCondition_ReferredBySubDataObject();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionsImpl <em>Presence Conditions</em>}' class.
          * <!-- begin-user-doc -->
@@ -10734,6 +11651,40 @@ public interface NsdPackage extends EPackage {
          */
         EReference SUB_DATA_OBJECT__CDC = eINSTANCE.getSubDataObject_CDC();
 
+        /**
+         * The meta object literal for the '<em><b>Refers To CDC</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SUB_DATA_OBJECT__REFERS_TO_CDC = eINSTANCE.getSubDataObject_RefersToCDC();
+
+        /**
+         * The meta object literal for the '<em><b>Refers To Presence Condition</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION = eINSTANCE
+                .getSubDataObject_RefersToPresenceCondition();
+
+        /**
+         * The meta object literal for the '<em><b>Refers To Size Attribute</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE = eINSTANCE.getSubDataObject_RefersToSizeAttribute();
+
+        /**
+         * The meta object literal for the '<em><b>Refers To Max Index Attribute</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE = eINSTANCE
+                .getSubDataObject_RefersToMaxIndexAttribute();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.TitledClassImpl <em>Titled Class</em>}' class.
          * <!-- begin-user-doc -->
@@ -10770,6 +11721,14 @@ public interface NsdPackage extends EPackage {
          */
         EAttribute NSD_OBJECT__LINE_NUMBER = eINSTANCE.getNsdObject_LineNumber();
 
+        /**
+         * The meta object literal for the '<em><b>Explicit Links Built</b></em>' attribute feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EAttribute NSD_OBJECT__EXPLICIT_LINKS_BUILT = eINSTANCE.getNsdObject_ExplicitLinksBuilt();
+
         /**
          * The meta object literal for the '<em><b>Build Explicit Links</b></em>' operation.
          * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java
index 312d3bd..2cebb8d 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java
@@ -19,6 +19,8 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
 
+import org.eclipse.emf.common.util.EList;
+
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Presence Condition</b></em>'.
@@ -33,6 +35,9 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getTitleID <em>Title ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getPresenceConditions <em>Presence Conditions</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObject <em>Referred By Data Object</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObjectForDerivedStatistics <em>Referred By Data Object For Derived Statistics</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition()
@@ -268,4 +273,127 @@ public interface PresenceCondition extends NsdObject {
      */
     void setPresenceConditions( PresenceConditions value );
 
+    /**
+     * Returns the value of the '<em><b>Referred By Data Object</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Data Object</em>' reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Referred By Data Object</em>' reference list.
+     * @see #isSetReferredByDataObject()
+     * @see #unsetReferredByDataObject()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition_ReferredByDataObject()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceCondition
+     * @model opposite="refersToPresenceCondition" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< DataObject > getReferredByDataObject();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObject <em>Referred By Data Object</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredByDataObject()
+     * @see #getReferredByDataObject()
+     * @generated
+     */
+    void unsetReferredByDataObject();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObject <em>Referred By Data Object</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Data Object</em>' reference list is set.
+     * @see #unsetReferredByDataObject()
+     * @see #getReferredByDataObject()
+     * @generated
+     */
+    boolean isSetReferredByDataObject();
+
+    /**
+     * Returns the value of the '<em><b>Referred By Data Object For Derived Statistics</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceConditionDerivedStatistics <em>Refers To Presence Condition Derived Statistics</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Data Object For Derived Statistics</em>' reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Referred By Data Object For Derived Statistics</em>' reference list.
+     * @see #isSetReferredByDataObjectForDerivedStatistics()
+     * @see #unsetReferredByDataObjectForDerivedStatistics()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition_ReferredByDataObjectForDerivedStatistics()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject#getRefersToPresenceConditionDerivedStatistics
+     * @model opposite="refersToPresenceConditionDerivedStatistics" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< DataObject > getReferredByDataObjectForDerivedStatistics();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObjectForDerivedStatistics <em>Referred By Data Object For Derived Statistics</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredByDataObjectForDerivedStatistics()
+     * @see #getReferredByDataObjectForDerivedStatistics()
+     * @generated
+     */
+    void unsetReferredByDataObjectForDerivedStatistics();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObjectForDerivedStatistics <em>Referred By Data Object For Derived Statistics</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Data Object For Derived Statistics</em>' reference list is set.
+     * @see #unsetReferredByDataObjectForDerivedStatistics()
+     * @see #getReferredByDataObjectForDerivedStatistics()
+     * @generated
+     */
+    boolean isSetReferredByDataObjectForDerivedStatistics();
+
+    /**
+     * Returns the value of the '<em><b>Referred By Sub Data Object</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Sub Data Object</em>' reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Referred By Sub Data Object</em>' reference list.
+     * @see #isSetReferredBySubDataObject()
+     * @see #unsetReferredBySubDataObject()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition_ReferredBySubDataObject()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToPresenceCondition
+     * @model opposite="refersToPresenceCondition" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< SubDataObject > getReferredBySubDataObject();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredBySubDataObject()
+     * @see #getReferredBySubDataObject()
+     * @generated
+     */
+    void unsetReferredBySubDataObject();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Sub Data Object</em>' reference list is set.
+     * @see #unsetReferredBySubDataObject()
+     * @see #getReferredBySubDataObject()
+     * @generated
+     */
+    boolean isSetReferredBySubDataObject();
+
 } // PresenceCondition
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java
index 2eb1af4..17aa9e4 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataObject.java
@@ -31,6 +31,10 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getCDC <em>CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToCDC <em>Refers To CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject()
@@ -166,4 +170,224 @@ public interface SubDataObject extends DocumentedClass, AgPresenceCondition, AgA
      */
     void setCDC( CDC value );
 
+    /**
+     * Returns the value of the '<em><b>Refers To CDC</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To CDC</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 CDC</em>' reference.
+     * @see #isSetRefersToCDC()
+     * @see #unsetRefersToCDC()
+     * @see #setRefersToCDC(CDC)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_RefersToCDC()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC#getReferredBySubDataObject
+     * @model opposite="referredBySubDataObject" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    CDC getRefersToCDC();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToCDC <em>Refers To CDC</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To CDC</em>' reference.
+     * @see #isSetRefersToCDC()
+     * @see #unsetRefersToCDC()
+     * @see #getRefersToCDC()
+     * @generated
+     */
+    void setRefersToCDC( CDC value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToCDC <em>Refers To CDC</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToCDC()
+     * @see #getRefersToCDC()
+     * @see #setRefersToCDC(CDC)
+     * @generated
+     */
+    void unsetRefersToCDC();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToCDC <em>Refers To CDC</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To CDC</em>' reference is set.
+     * @see #unsetRefersToCDC()
+     * @see #getRefersToCDC()
+     * @see #setRefersToCDC(CDC)
+     * @generated
+     */
+    boolean isSetRefersToCDC();
+
+    /**
+     * Returns the value of the '<em><b>Refers To Presence Condition</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To Presence Condition</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 Presence Condition</em>' reference.
+     * @see #isSetRefersToPresenceCondition()
+     * @see #unsetRefersToPresenceCondition()
+     * @see #setRefersToPresenceCondition(PresenceCondition)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_RefersToPresenceCondition()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataObject
+     * @model opposite="referredBySubDataObject" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    PresenceCondition getRefersToPresenceCondition();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Presence Condition</em>' reference.
+     * @see #isSetRefersToPresenceCondition()
+     * @see #unsetRefersToPresenceCondition()
+     * @see #getRefersToPresenceCondition()
+     * @generated
+     */
+    void setRefersToPresenceCondition( PresenceCondition value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToPresenceCondition()
+     * @see #getRefersToPresenceCondition()
+     * @see #setRefersToPresenceCondition(PresenceCondition)
+     * @generated
+     */
+    void unsetRefersToPresenceCondition();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Presence Condition</em>' reference is set.
+     * @see #unsetRefersToPresenceCondition()
+     * @see #getRefersToPresenceCondition()
+     * @see #setRefersToPresenceCondition(PresenceCondition)
+     * @generated
+     */
+    boolean isSetRefersToPresenceCondition();
+
+    /**
+     * Returns the value of the '<em><b>Refers To Size Attribute</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsSizeAttribute <em>Referred By Sub Data Object As Size Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To Size 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>Refers To Size Attribute</em>' reference.
+     * @see #isSetRefersToSizeAttribute()
+     * @see #unsetRefersToSizeAttribute()
+     * @see #setRefersToSizeAttribute(DataAttribute)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_RefersToSizeAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsSizeAttribute
+     * @model opposite="referredBySubDataObjectAsSizeAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    DataAttribute getRefersToSizeAttribute();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Size Attribute</em>' reference.
+     * @see #isSetRefersToSizeAttribute()
+     * @see #unsetRefersToSizeAttribute()
+     * @see #getRefersToSizeAttribute()
+     * @generated
+     */
+    void setRefersToSizeAttribute( DataAttribute value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToSizeAttribute()
+     * @see #getRefersToSizeAttribute()
+     * @see #setRefersToSizeAttribute(DataAttribute)
+     * @generated
+     */
+    void unsetRefersToSizeAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Size Attribute</em>' reference is set.
+     * @see #unsetRefersToSizeAttribute()
+     * @see #getRefersToSizeAttribute()
+     * @see #setRefersToSizeAttribute(DataAttribute)
+     * @generated
+     */
+    boolean isSetRefersToSizeAttribute();
+
+    /**
+     * Returns the value of the '<em><b>Refers To Max Index Attribute</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsMaxIndexAttribute <em>Referred By Sub Data Object As Max Index Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To Max Index 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>Refers To Max Index Attribute</em>' reference.
+     * @see #isSetRefersToMaxIndexAttribute()
+     * @see #unsetRefersToMaxIndexAttribute()
+     * @see #setRefersToMaxIndexAttribute(DataAttribute)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataObject_RefersToMaxIndexAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsMaxIndexAttribute
+     * @model opposite="referredBySubDataObjectAsMaxIndexAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    DataAttribute getRefersToMaxIndexAttribute();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Max Index Attribute</em>' reference.
+     * @see #isSetRefersToMaxIndexAttribute()
+     * @see #unsetRefersToMaxIndexAttribute()
+     * @see #getRefersToMaxIndexAttribute()
+     * @generated
+     */
+    void setRefersToMaxIndexAttribute( DataAttribute value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToMaxIndexAttribute()
+     * @see #getRefersToMaxIndexAttribute()
+     * @see #setRefersToMaxIndexAttribute(DataAttribute)
+     * @generated
+     */
+    void unsetRefersToMaxIndexAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Max Index Attribute</em>' reference is set.
+     * @see #unsetRefersToMaxIndexAttribute()
+     * @see #getRefersToMaxIndexAttribute()
+     * @see #setRefersToMaxIndexAttribute(DataAttribute)
+     * @generated
+     */
+    boolean isSetRefersToMaxIndexAttribute();
+
 } // SubDataObject
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AnyLNClassImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AnyLNClassImpl.java
index f04c4cc..9044f7d 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AnyLNClassImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/AnyLNClassImpl.java
@@ -336,12 +336,22 @@ public abstract class AnyLNClassImpl extends TitledClassImpl implements AnyLNCla
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @generated
+     * @generated NOT
      */
     @Override
     public String getName() {
-        // TODO: implement this method
-        // Ensure that you remove @generated or mark it @generated NOT
+        // TODO: use a RiseClipseException ?
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public LNClasses getLNClasses() {
+        // TODO: use a RiseClipseException ?
         throw new UnsupportedOperationException();
     }
 
@@ -472,6 +482,8 @@ public abstract class AnyLNClassImpl extends TitledClassImpl implements AnyLNCla
         switch( operationID ) {
         case NsdPackage.ANY_LN_CLASS___GET_NAME:
             return getName();
+        case NsdPackage.ANY_LN_CLASS___GET_LN_CLASSES:
+            return getLNClasses();
         }
         return super.eInvoke( operationID, arguments );
     }
@@ -499,10 +511,12 @@ public abstract class AnyLNClassImpl extends TitledClassImpl implements AnyLNCla
      *   AnyLNClass.base                    -> AbstractLNClass  
      */
     @Override
-    public void buildExplicitLinks( IRiseClipseConsole console ) {
-        super.buildExplicitLinks( console );
-        if( !baseESet ) return;
+    public boolean buildExplicitLinks( IRiseClipseConsole console ) {
+        if( super.buildExplicitLinks( console ) ) return true;
+        if( !isSetBase() ) return false;
 
+        // This code assumes that the referred AbstractLNClass is in the same NS
+        // TODO: check that it is right
         LNClasses lNClasses = ( LNClasses ) eContainer();
         EList< AbstractLNClass > l = lNClasses.getAbstractLNClass();
         setRefersToAbstractLNClass( l.stream()
@@ -513,8 +527,10 @@ public abstract class AnyLNClassImpl extends TitledClassImpl implements AnyLNCla
         }
         else {
             console.info( "AbstractLNClass (name: " + getBase() + ") refers by AnyLNClass (name: " + getName()
-                    + ") in NS (id:" + lNClasses.getNS().getId() + ") found" );
+                    + ") in NS (id:" + lNClasses.getNS().getId() + ") found in NS (id:"
+                    + getRefersToAbstractLNClass().getLNClasses().getNS().getId() + ")" );
         }
+        return false;
     }
 
 } //AnyLNClassImpl
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCImpl.java
index 389b0af..c18bf25 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/CDCImpl.java
@@ -22,6 +22,7 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ServiceParameter;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject;
@@ -38,6 +39,7 @@ import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseEList;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
@@ -58,6 +60,8 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCImpl#isTypeKindParameterized <em>Type Kind Parameterized</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCImpl#getVariant <em>Variant</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCImpl#getCDCs <em>CD Cs</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCImpl#getReferredByDataObject <em>Referred By Data Object</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.CDCImpl#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}</li>
  * </ul>
  *
  * @generated
@@ -247,6 +251,26 @@ public class CDCImpl extends TitledClassImpl implements CDC {
      */
     protected boolean variantESet;
 
+    /**
+     * The cached value of the '{@link #getReferredByDataObject() <em>Referred By Data Object</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredByDataObject()
+     * @generated
+     * @ordered
+     */
+    protected EList< DataObject > referredByDataObject;
+
+    /**
+     * The cached value of the '{@link #getReferredBySubDataObject() <em>Referred By Sub Data Object</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredBySubDataObject()
+     * @generated
+     * @ordered
+     */
+    protected EList< SubDataObject > referredBySubDataObject;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -740,6 +764,74 @@ public class CDCImpl extends TitledClassImpl implements CDC {
             eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.CDC__CD_CS, newCDCs, newCDCs ) );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EList< DataObject > getReferredByDataObject() {
+        if( referredByDataObject == null ) {
+            referredByDataObject = new EObjectWithInverseEList.Unsettable< DataObject >( DataObject.class, this,
+                    NsdPackage.CDC__REFERRED_BY_DATA_OBJECT, NsdPackage.DATA_OBJECT__REFERS_TO_CDC );
+        }
+        return referredByDataObject;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredByDataObject() {
+        if( referredByDataObject != null ) ( ( InternalEList.Unsettable< ? > ) referredByDataObject ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredByDataObject() {
+        return referredByDataObject != null && ( ( InternalEList.Unsettable< ? > ) referredByDataObject ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EList< SubDataObject > getReferredBySubDataObject() {
+        if( referredBySubDataObject == null ) {
+            referredBySubDataObject = new EObjectWithInverseEList.Unsettable< SubDataObject >( SubDataObject.class,
+                    this, NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT, NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC );
+        }
+        return referredBySubDataObject;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredBySubDataObject() {
+        if( referredBySubDataObject != null ) ( ( InternalEList.Unsettable< ? > ) referredBySubDataObject ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredBySubDataObject() {
+        return referredBySubDataObject != null && ( ( InternalEList.Unsettable< ? > ) referredBySubDataObject ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -762,6 +854,12 @@ public class CDCImpl extends TitledClassImpl implements CDC {
         case NsdPackage.CDC__CD_CS:
             if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
             return basicSetCDCs( ( CDCs ) otherEnd, msgs );
+        case NsdPackage.CDC__REFERRED_BY_DATA_OBJECT:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataObject() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredBySubDataObject() )
+                    .basicAdd( otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -782,6 +880,10 @@ public class CDCImpl extends TitledClassImpl implements CDC {
             return basicUnsetServiceParameter( msgs );
         case NsdPackage.CDC__CD_CS:
             return basicSetCDCs( null, msgs );
+        case NsdPackage.CDC__REFERRED_BY_DATA_OBJECT:
+            return ( ( InternalEList< ? > ) getReferredByDataObject() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT:
+            return ( ( InternalEList< ? > ) getReferredBySubDataObject() ).basicRemove( otherEnd, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -826,6 +928,10 @@ public class CDCImpl extends TitledClassImpl implements CDC {
             return getVariant();
         case NsdPackage.CDC__CD_CS:
             return getCDCs();
+        case NsdPackage.CDC__REFERRED_BY_DATA_OBJECT:
+            return getReferredByDataObject();
+        case NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT:
+            return getReferredBySubDataObject();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -868,6 +974,14 @@ public class CDCImpl extends TitledClassImpl implements CDC {
         case NsdPackage.CDC__CD_CS:
             setCDCs( ( CDCs ) newValue );
             return;
+        case NsdPackage.CDC__REFERRED_BY_DATA_OBJECT:
+            getReferredByDataObject().clear();
+            getReferredByDataObject().addAll( ( Collection< ? extends DataObject > ) newValue );
+            return;
+        case NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT:
+            getReferredBySubDataObject().clear();
+            getReferredBySubDataObject().addAll( ( Collection< ? extends SubDataObject > ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -907,6 +1021,12 @@ public class CDCImpl extends TitledClassImpl implements CDC {
         case NsdPackage.CDC__CD_CS:
             setCDCs( ( CDCs ) null );
             return;
+        case NsdPackage.CDC__REFERRED_BY_DATA_OBJECT:
+            unsetReferredByDataObject();
+            return;
+        case NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT:
+            unsetReferredBySubDataObject();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -937,6 +1057,10 @@ public class CDCImpl extends TitledClassImpl implements CDC {
             return isSetVariant();
         case NsdPackage.CDC__CD_CS:
             return getCDCs() != null;
+        case NsdPackage.CDC__REFERRED_BY_DATA_OBJECT:
+            return isSetReferredByDataObject();
+        case NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT:
+            return isSetReferredBySubDataObject();
         }
         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 ec3e4d6..80f4c8f 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
@@ -29,18 +29,23 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject;
 import java.math.BigDecimal;
 
+import java.util.Collection;
 import org.eclipse.emf.common.notify.Notification;
 
 import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.Enumerator;
 
 import org.eclipse.emf.ecore.EClass;
 
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseEList;
 import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
  * <!-- begin-user-doc -->
@@ -68,6 +73,8 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getFc <em>Fc</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getCDC <em>CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getReferredBySubDataObjectAsSizeAttribute <em>Referred By Sub Data Object As Size Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getReferredBySubDataObjectAsMaxIndexAttribute <em>Referred By Sub Data Object As Max Index Attribute</em>}</li>
  * </ul>
  *
  * @generated
@@ -567,6 +574,26 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected boolean nameESet;
 
+    /**
+     * The cached value of the '{@link #getReferredBySubDataObjectAsSizeAttribute() <em>Referred By Sub Data Object As Size Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredBySubDataObjectAsSizeAttribute()
+     * @generated
+     * @ordered
+     */
+    protected EList< SubDataObject > referredBySubDataObjectAsSizeAttribute;
+
+    /**
+     * The cached value of the '{@link #getReferredBySubDataObjectAsMaxIndexAttribute() <em>Referred By Sub Data Object As Max Index Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredBySubDataObjectAsMaxIndexAttribute()
+     * @generated
+     * @ordered
+     */
+    protected EList< SubDataObject > referredBySubDataObjectAsMaxIndexAttribute;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1492,11 +1519,93 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      * @generated
      */
     @Override
+    public EList< SubDataObject > getReferredBySubDataObjectAsSizeAttribute() {
+        if( referredBySubDataObjectAsSizeAttribute == null ) {
+            referredBySubDataObjectAsSizeAttribute = new EObjectWithInverseEList.Unsettable< SubDataObject >(
+                    SubDataObject.class, this, NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE );
+        }
+        return referredBySubDataObjectAsSizeAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredBySubDataObjectAsSizeAttribute() {
+        if( referredBySubDataObjectAsSizeAttribute != null )
+            ( ( InternalEList.Unsettable< ? > ) referredBySubDataObjectAsSizeAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredBySubDataObjectAsSizeAttribute() {
+        return referredBySubDataObjectAsSizeAttribute != null
+                && ( ( InternalEList.Unsettable< ? > ) referredBySubDataObjectAsSizeAttribute ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EList< SubDataObject > getReferredBySubDataObjectAsMaxIndexAttribute() {
+        if( referredBySubDataObjectAsMaxIndexAttribute == null ) {
+            referredBySubDataObjectAsMaxIndexAttribute = new EObjectWithInverseEList.Unsettable< SubDataObject >(
+                    SubDataObject.class, this,
+                    NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE );
+        }
+        return referredBySubDataObjectAsMaxIndexAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredBySubDataObjectAsMaxIndexAttribute() {
+        if( referredBySubDataObjectAsMaxIndexAttribute != null )
+            ( ( InternalEList.Unsettable< ? > ) referredBySubDataObjectAsMaxIndexAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredBySubDataObjectAsMaxIndexAttribute() {
+        return referredBySubDataObjectAsMaxIndexAttribute != null
+                && ( ( InternalEList.Unsettable< ? > ) referredBySubDataObjectAsMaxIndexAttribute ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
     public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
         switch( featureID ) {
         case NsdPackage.DATA_ATTRIBUTE__CDC:
             if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
             return basicSetCDC( ( CDC ) otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredBySubDataObjectAsSizeAttribute() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredBySubDataObjectAsMaxIndexAttribute() )
+                    .basicAdd( otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -1511,6 +1620,11 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         switch( featureID ) {
         case NsdPackage.DATA_ATTRIBUTE__CDC:
             return basicSetCDC( null, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE:
+            return ( ( InternalEList< ? > ) getReferredBySubDataObjectAsSizeAttribute() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
+            return ( ( InternalEList< ? > ) getReferredBySubDataObjectAsMaxIndexAttribute() ).basicRemove( otherEnd,
+                    msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -1573,6 +1687,10 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             return getName();
         case NsdPackage.DATA_ATTRIBUTE__CDC:
             return getCDC();
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE:
+            return getReferredBySubDataObjectAsSizeAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
+            return getReferredBySubDataObjectAsMaxIndexAttribute();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -1582,6 +1700,7 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      * <!-- end-user-doc -->
      * @generated
      */
+    @SuppressWarnings( "unchecked" )
     @Override
     public void eSet( int featureID, Object newValue ) {
         switch( featureID ) {
@@ -1639,6 +1758,15 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__CDC:
             setCDC( ( CDC ) newValue );
             return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE:
+            getReferredBySubDataObjectAsSizeAttribute().clear();
+            getReferredBySubDataObjectAsSizeAttribute().addAll( ( Collection< ? extends SubDataObject > ) newValue );
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
+            getReferredBySubDataObjectAsMaxIndexAttribute().clear();
+            getReferredBySubDataObjectAsMaxIndexAttribute()
+                    .addAll( ( Collection< ? extends SubDataObject > ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -1705,6 +1833,12 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__CDC:
             setCDC( ( CDC ) null );
             return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE:
+            unsetReferredBySubDataObjectAsSizeAttribute();
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
+            unsetReferredBySubDataObjectAsMaxIndexAttribute();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -1753,6 +1887,10 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             return isSetName();
         case NsdPackage.DATA_ATTRIBUTE__CDC:
             return getCDC() != null;
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE:
+            return isSetReferredBySubDataObjectAsSizeAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
+            return isSetReferredBySubDataObjectAsMaxIndexAttribute();
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java
index 99e7c95..7a8fe98 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java
@@ -23,10 +23,14 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgPresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgPresenceConditionDerivedStatistics;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgUnderlyingType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AnyLNClass;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition;
+import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
+
 import org.eclipse.emf.common.notify.Notification;
 
 import org.eclipse.emf.common.notify.NotificationChain;
@@ -56,6 +60,9 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl#isTransient <em>Transient</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl#getAnyLNClass <em>Any LN Class</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl#getRefersToCDC <em>Refers To CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl#getRefersToPresenceConditionDerivedStatistics <em>Refers To Presence Condition Derived Statistics</em>}</li>
  * </ul>
  *
  * @generated
@@ -380,6 +387,63 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
      */
     protected boolean typeESet;
 
+    /**
+     * The cached value of the '{@link #getRefersToCDC() <em>Refers To CDC</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToCDC()
+     * @generated
+     * @ordered
+     */
+    protected CDC refersToCDC;
+
+    /**
+     * This is true if the Refers To CDC reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToCDCESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToPresenceCondition() <em>Refers To Presence Condition</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToPresenceCondition()
+     * @generated
+     * @ordered
+     */
+    protected PresenceCondition refersToPresenceCondition;
+
+    /**
+     * This is true if the Refers To Presence Condition reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToPresenceConditionESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToPresenceConditionDerivedStatistics() <em>Refers To Presence Condition Derived Statistics</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToPresenceConditionDerivedStatistics()
+     * @generated
+     * @ordered
+     */
+    protected PresenceCondition refersToPresenceConditionDerivedStatistics;
+
+    /**
+     * This is true if the Refers To Presence Condition Derived Statistics reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToPresenceConditionDerivedStatisticsESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1002,6 +1066,352 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
                 NsdPackage.DATA_OBJECT__ANY_LN_CLASS, newAnyLNClass, newAnyLNClass ) );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public CDC getRefersToCDC() {
+        return refersToCDC;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToCDC( CDC newRefersToCDC, NotificationChain msgs ) {
+        CDC oldRefersToCDC = refersToCDC;
+        refersToCDC = newRefersToCDC;
+        boolean oldRefersToCDCESet = refersToCDCESet;
+        refersToCDCESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_CDC, oldRefersToCDC, newRefersToCDC, !oldRefersToCDCESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToCDC( CDC newRefersToCDC ) {
+        if( newRefersToCDC != refersToCDC ) {
+            NotificationChain msgs = null;
+            if( refersToCDC != null ) msgs = ( ( InternalEObject ) refersToCDC ).eInverseRemove( this,
+                    NsdPackage.CDC__REFERRED_BY_DATA_OBJECT, CDC.class, msgs );
+            if( newRefersToCDC != null ) msgs = ( ( InternalEObject ) newRefersToCDC ).eInverseAdd( this,
+                    NsdPackage.CDC__REFERRED_BY_DATA_OBJECT, CDC.class, msgs );
+            msgs = basicSetRefersToCDC( newRefersToCDC, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToCDCESet = refersToCDCESet;
+            refersToCDCESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_CDC, newRefersToCDC, newRefersToCDC, !oldRefersToCDCESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToCDC( NotificationChain msgs ) {
+        CDC oldRefersToCDC = refersToCDC;
+        refersToCDC = null;
+        boolean oldRefersToCDCESet = refersToCDCESet;
+        refersToCDCESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_CDC, oldRefersToCDC, null, oldRefersToCDCESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToCDC() {
+        if( refersToCDC != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToCDC ).eInverseRemove( this, NsdPackage.CDC__REFERRED_BY_DATA_OBJECT,
+                    CDC.class, msgs );
+            msgs = basicUnsetRefersToCDC( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToCDCESet = refersToCDCESet;
+            refersToCDCESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_CDC, null, null, oldRefersToCDCESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToCDC() {
+        return refersToCDCESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public PresenceCondition getRefersToPresenceCondition() {
+        return refersToPresenceCondition;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToPresenceCondition( PresenceCondition newRefersToPresenceCondition,
+            NotificationChain msgs ) {
+        PresenceCondition oldRefersToPresenceCondition = refersToPresenceCondition;
+        refersToPresenceCondition = newRefersToPresenceCondition;
+        boolean oldRefersToPresenceConditionESet = refersToPresenceConditionESet;
+        refersToPresenceConditionESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION, oldRefersToPresenceCondition,
+                    newRefersToPresenceCondition, !oldRefersToPresenceConditionESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToPresenceCondition( PresenceCondition newRefersToPresenceCondition ) {
+        if( newRefersToPresenceCondition != refersToPresenceCondition ) {
+            NotificationChain msgs = null;
+            if( refersToPresenceCondition != null )
+                msgs = ( ( InternalEObject ) refersToPresenceCondition ).eInverseRemove( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT, PresenceCondition.class, msgs );
+            if( newRefersToPresenceCondition != null )
+                msgs = ( ( InternalEObject ) newRefersToPresenceCondition ).eInverseAdd( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT, PresenceCondition.class, msgs );
+            msgs = basicSetRefersToPresenceCondition( newRefersToPresenceCondition, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToPresenceConditionESet = refersToPresenceConditionESet;
+            refersToPresenceConditionESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION, newRefersToPresenceCondition,
+                    newRefersToPresenceCondition, !oldRefersToPresenceConditionESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToPresenceCondition( NotificationChain msgs ) {
+        PresenceCondition oldRefersToPresenceCondition = refersToPresenceCondition;
+        refersToPresenceCondition = null;
+        boolean oldRefersToPresenceConditionESet = refersToPresenceConditionESet;
+        refersToPresenceConditionESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION, oldRefersToPresenceCondition, null,
+                    oldRefersToPresenceConditionESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToPresenceCondition() {
+        if( refersToPresenceCondition != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToPresenceCondition ).eInverseRemove( this,
+                    NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT, PresenceCondition.class, msgs );
+            msgs = basicUnsetRefersToPresenceCondition( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToPresenceConditionESet = refersToPresenceConditionESet;
+            refersToPresenceConditionESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION, null, null,
+                    oldRefersToPresenceConditionESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToPresenceCondition() {
+        return refersToPresenceConditionESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public PresenceCondition getRefersToPresenceConditionDerivedStatistics() {
+        return refersToPresenceConditionDerivedStatistics;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToPresenceConditionDerivedStatistics(
+            PresenceCondition newRefersToPresenceConditionDerivedStatistics, NotificationChain msgs ) {
+        PresenceCondition oldRefersToPresenceConditionDerivedStatistics = refersToPresenceConditionDerivedStatistics;
+        refersToPresenceConditionDerivedStatistics = newRefersToPresenceConditionDerivedStatistics;
+        boolean oldRefersToPresenceConditionDerivedStatisticsESet = refersToPresenceConditionDerivedStatisticsESet;
+        refersToPresenceConditionDerivedStatisticsESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS,
+                    oldRefersToPresenceConditionDerivedStatistics, newRefersToPresenceConditionDerivedStatistics,
+                    !oldRefersToPresenceConditionDerivedStatisticsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToPresenceConditionDerivedStatistics(
+            PresenceCondition newRefersToPresenceConditionDerivedStatistics ) {
+        if( newRefersToPresenceConditionDerivedStatistics != refersToPresenceConditionDerivedStatistics ) {
+            NotificationChain msgs = null;
+            if( refersToPresenceConditionDerivedStatistics != null )
+                msgs = ( ( InternalEObject ) refersToPresenceConditionDerivedStatistics ).eInverseRemove( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS,
+                        PresenceCondition.class, msgs );
+            if( newRefersToPresenceConditionDerivedStatistics != null )
+                msgs = ( ( InternalEObject ) newRefersToPresenceConditionDerivedStatistics ).eInverseAdd( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS,
+                        PresenceCondition.class, msgs );
+            msgs = basicSetRefersToPresenceConditionDerivedStatistics( newRefersToPresenceConditionDerivedStatistics,
+                    msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToPresenceConditionDerivedStatisticsESet = refersToPresenceConditionDerivedStatisticsESet;
+            refersToPresenceConditionDerivedStatisticsESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS,
+                    newRefersToPresenceConditionDerivedStatistics, newRefersToPresenceConditionDerivedStatistics,
+                    !oldRefersToPresenceConditionDerivedStatisticsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToPresenceConditionDerivedStatistics( NotificationChain msgs ) {
+        PresenceCondition oldRefersToPresenceConditionDerivedStatistics = refersToPresenceConditionDerivedStatistics;
+        refersToPresenceConditionDerivedStatistics = null;
+        boolean oldRefersToPresenceConditionDerivedStatisticsESet = refersToPresenceConditionDerivedStatisticsESet;
+        refersToPresenceConditionDerivedStatisticsESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS,
+                    oldRefersToPresenceConditionDerivedStatistics, null,
+                    oldRefersToPresenceConditionDerivedStatisticsESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToPresenceConditionDerivedStatistics() {
+        if( refersToPresenceConditionDerivedStatistics != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToPresenceConditionDerivedStatistics ).eInverseRemove( this,
+                    NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS,
+                    PresenceCondition.class, msgs );
+            msgs = basicUnsetRefersToPresenceConditionDerivedStatistics( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToPresenceConditionDerivedStatisticsESet = refersToPresenceConditionDerivedStatisticsESet;
+            refersToPresenceConditionDerivedStatisticsESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS, null, null,
+                    oldRefersToPresenceConditionDerivedStatisticsESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToPresenceConditionDerivedStatistics() {
+        return refersToPresenceConditionDerivedStatisticsESet;
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1013,6 +1423,21 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
             if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
             return basicSetAnyLNClass( ( AnyLNClass ) otherEnd, msgs );
+        case NsdPackage.DATA_OBJECT__REFERS_TO_CDC:
+            if( refersToCDC != null ) msgs = ( ( InternalEObject ) refersToCDC ).eInverseRemove( this,
+                    NsdPackage.CDC__REFERRED_BY_DATA_OBJECT, CDC.class, msgs );
+            return basicSetRefersToCDC( ( CDC ) otherEnd, msgs );
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            if( refersToPresenceCondition != null )
+                msgs = ( ( InternalEObject ) refersToPresenceCondition ).eInverseRemove( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT, PresenceCondition.class, msgs );
+            return basicSetRefersToPresenceCondition( ( PresenceCondition ) otherEnd, msgs );
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS:
+            if( refersToPresenceConditionDerivedStatistics != null )
+                msgs = ( ( InternalEObject ) refersToPresenceConditionDerivedStatistics ).eInverseRemove( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS,
+                        PresenceCondition.class, msgs );
+            return basicSetRefersToPresenceConditionDerivedStatistics( ( PresenceCondition ) otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -1027,6 +1452,12 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         switch( featureID ) {
         case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
             return basicSetAnyLNClass( null, msgs );
+        case NsdPackage.DATA_OBJECT__REFERS_TO_CDC:
+            return basicUnsetRefersToCDC( msgs );
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            return basicUnsetRefersToPresenceCondition( msgs );
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS:
+            return basicUnsetRefersToPresenceConditionDerivedStatistics( msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -1078,6 +1509,12 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
             return getType();
         case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
             return getAnyLNClass();
+        case NsdPackage.DATA_OBJECT__REFERS_TO_CDC:
+            return getRefersToCDC();
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            return getRefersToPresenceCondition();
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS:
+            return getRefersToPresenceConditionDerivedStatistics();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -1126,6 +1563,15 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
             setAnyLNClass( ( AnyLNClass ) newValue );
             return;
+        case NsdPackage.DATA_OBJECT__REFERS_TO_CDC:
+            setRefersToCDC( ( CDC ) newValue );
+            return;
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            setRefersToPresenceCondition( ( PresenceCondition ) newValue );
+            return;
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS:
+            setRefersToPresenceConditionDerivedStatistics( ( PresenceCondition ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -1174,6 +1620,15 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
             setAnyLNClass( ( AnyLNClass ) null );
             return;
+        case NsdPackage.DATA_OBJECT__REFERS_TO_CDC:
+            unsetRefersToCDC();
+            return;
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            unsetRefersToPresenceCondition();
+            return;
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS:
+            unsetRefersToPresenceConditionDerivedStatistics();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -1210,6 +1665,12 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
             return isSetType();
         case NsdPackage.DATA_OBJECT__ANY_LN_CLASS:
             return getAnyLNClass() != null;
+        case NsdPackage.DATA_OBJECT__REFERS_TO_CDC:
+            return isSetRefersToCDC();
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            return isSetRefersToPresenceCondition();
+        case NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS:
+            return isSetRefersToPresenceConditionDerivedStatistics();
         }
         return super.eIsSet( featureID );
     }
@@ -1371,4 +1832,60 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         return result.toString();
     }
 
+    /* Implicit link
+     *   DataObject.type                    -> CDC.name
+     *   DataObject.presCond                -> PresenceCondition.name
+     *   DataObject.dsPresCond              -> PresenceCondition.name
+     */
+    @Override
+    public boolean buildExplicitLinks( IRiseClipseConsole console ) {
+        if( super.buildExplicitLinks( console ) ) return true;
+
+        if( isSetType() ) {
+            setRefersToCDC( getAnyLNClass().getLNClasses().getNS().findCDC( getType(), console ) );
+            if( getRefersToCDC() == null ) {
+                console.error( "CDC (name: " + getType() + ") refers by DataObject (name: " + getName() + ") in NS (id:"
+                        + getAnyLNClass().getLNClasses().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "CDC (name: " + getType() + ") refers by DataObject (name: " + getName() + ") in NS (id:"
+                        + getAnyLNClass().getLNClasses().getNS().getId() + ") found in NS (id:"
+                        + getRefersToCDC().getCDCs().getNS().getId() + ")" );
+            }
+        }
+
+        if( isSetPresCond() ) {
+            setRefersToPresenceCondition(
+                    getAnyLNClass().getLNClasses().getNS().findPresenceCondition( getPresCond(), console ) );
+            if( getRefersToPresenceCondition() == null ) {
+                console.error(
+                        "PresenceCondition (name: " + getPresCond() + ") refers by DataObject (name: " + getName()
+                                + ") in NS (id:" + getAnyLNClass().getLNClasses().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "PresenceCondition (name: " + getPresCond() + ") refers by DataObject (name: " + getName()
+                        + ") in NS (id:" + getAnyLNClass().getLNClasses().getNS().getId() + ") found in NS (id:"
+                        + getRefersToPresenceCondition().getPresenceConditions().getNS().getId() + ")" );
+            }
+        }
+
+        if( isSetDsPresCond() ) {
+            setRefersToPresenceConditionDerivedStatistics(
+                    getAnyLNClass().getLNClasses().getNS().findPresenceCondition( getDsPresCond(), console ) );
+            if( getRefersToPresenceConditionDerivedStatistics() == null ) {
+                console.error(
+                        "PresenceCondition (name: " + getDsPresCond() + ") refers by DataObject (name: " + getName()
+                                + ") in NS (id:" + getAnyLNClass().getLNClasses().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "PresenceCondition (name: " + getDsPresCond() + ") refers by DataObject (name: "
+                        + getName() + ") in NS (id:" + getAnyLNClass().getLNClasses().getNS().getId()
+                        + ") found in NS (id:"
+                        + getRefersToPresenceConditionDerivedStatistics().getPresenceConditions().getNS().getId()
+                        + ")" );
+            }
+        }
+        return false;
+    }
+
 } //DataObjectImpl
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DependsOnImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DependsOnImpl.java
index 0a4650b..b3ca771 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DependsOnImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DependsOnImpl.java
@@ -888,8 +888,8 @@ public class DependsOnImpl extends NsdObjectImpl implements DependsOn {
      *   DependsOn.id                       -> NS.id
      */
     @Override
-    public void buildExplicitLinks( IRiseClipseConsole console ) {
-        super.buildExplicitLinks( console );
+    public boolean buildExplicitLinks( IRiseClipseConsole console ) {
+        if( super.buildExplicitLinks( console ) ) return true;
 
         NsdResourceSetImpl resourceSet = ( NsdResourceSetImpl ) eResource().getResourceSet();
         setRefersToNS( resourceSet.getNS( getId() ) );
@@ -900,6 +900,7 @@ public class DependsOnImpl extends NsdObjectImpl implements DependsOn {
         else {
             console.info( "NS (id: " + getId() + ") and refers by DependsOn in NS (id:" + getNS().getId() + ") found" );
         }
+        return false;
     }
 
 } //DependsOnImpl
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSImpl.java
index ad36eb8..5e376c2 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NSImpl.java
@@ -24,6 +24,7 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgNSIdentification;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgNSdesc;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgUML;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes;
@@ -33,8 +34,11 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage;
+import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
+import java.lang.reflect.InvocationTargetException;
 import java.util.Collection;
 import javax.xml.datatype.XMLGregorianCalendar;
 
@@ -1655,6 +1659,48 @@ public class NSImpl extends CopyrightedImpl implements NS {
         return referredByDependsOn != null && ( ( InternalEList.Unsettable< ? > ) referredByDependsOn ).isSet();
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public CDC findCDC( String cDCName, IRiseClipseConsole console ) {
+        if( cDCsESet ) {
+            CDC found = getCDCs().getCDC().stream().filter( cdc -> cdc.getName().equals( cDCName ) ).findAny()
+                    .orElse( null );
+            if( found != null ) return found;
+        }
+
+        if( dependsOnESet ) {
+            getDependsOn().buildExplicitLinks( console );
+            return getDependsOn().getRefersToNS().findCDC( cDCName, console );
+        }
+
+        return null;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public PresenceCondition findPresenceCondition( String presenceConditionName, IRiseClipseConsole console ) {
+        if( presenceConditionsESet ) {
+            PresenceCondition found = getPresenceConditions().getPresenceCondition().stream()
+                    .filter( cond -> cond.getName().equals( presenceConditionName ) ).findAny().orElse( null );
+            if( found != null ) return found;
+        }
+
+        if( dependsOnESet ) {
+            getDependsOn().buildExplicitLinks( console );
+            return getDependsOn().getRefersToNS().findPresenceCondition( presenceConditionName, console );
+        }
+
+        return null;
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2474,6 +2520,22 @@ public class NSImpl extends CopyrightedImpl implements NS {
         return super.eDerivedStructuralFeatureID( baseFeatureID, baseClass );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Object eInvoke( int operationID, EList< ? > arguments ) throws InvocationTargetException {
+        switch( operationID ) {
+        case NsdPackage.NS___FIND_CDC__STRING_IRISECLIPSECONSOLE:
+            return findCDC( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
+        case NsdPackage.NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE:
+            return findPresenceCondition( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
+        }
+        return super.eInvoke( operationID, arguments );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdObjectImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdObjectImpl.java
index 1fd5f9c..5e5b949 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdObjectImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdObjectImpl.java
@@ -41,6 +41,7 @@ import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
  * </p>
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdObjectImpl#getLineNumber <em>Line Number</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.NsdObjectImpl#isExplicitLinksBuilt <em>Explicit Links Built</em>}</li>
  * </ul>
  *
  * @generated
@@ -65,6 +66,25 @@ public abstract class NsdObjectImpl extends MinimalEObjectImpl.Container impleme
      */
     protected int lineNumber = LINE_NUMBER_EDEFAULT;
 
+    /**
+     * The default value of the '{@link #isExplicitLinksBuilt() <em>Explicit Links Built</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isExplicitLinksBuilt()
+     * @generated
+     * @ordered
+     */
+    protected static final boolean EXPLICIT_LINKS_BUILT_EDEFAULT = false;
+    /**
+     * The cached value of the '{@link #isExplicitLinksBuilt() <em>Explicit Links Built</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isExplicitLinksBuilt()
+     * @generated
+     * @ordered
+     */
+    protected boolean explicitLinksBuilt = EXPLICIT_LINKS_BUILT_EDEFAULT;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -110,10 +130,36 @@ public abstract class NsdObjectImpl extends MinimalEObjectImpl.Container impleme
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isExplicitLinksBuilt() {
+        return explicitLinksBuilt;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setExplicitLinksBuilt( boolean newExplicitLinksBuilt ) {
+        boolean oldExplicitLinksBuilt = explicitLinksBuilt;
+        explicitLinksBuilt = newExplicitLinksBuilt;
+        if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                NsdPackage.NSD_OBJECT__EXPLICIT_LINKS_BUILT, oldExplicitLinksBuilt, explicitLinksBuilt ) );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return true if explicit links were already built, false otherwise
      * @generated NOT
      */
     @Override
-    public void buildExplicitLinks( IRiseClipseConsole console ) {
+    public boolean buildExplicitLinks( IRiseClipseConsole console ) {
+        if( isExplicitLinksBuilt() ) return true;
+
         TreeIterator< EObject > it = eAllContents();
         while( it.hasNext() ) {
             EObject o = it.next();
@@ -121,7 +167,9 @@ public abstract class NsdObjectImpl extends MinimalEObjectImpl.Container impleme
                 ( ( NsdObject ) o ).buildExplicitLinks( console );
             }
         }
-        return;
+
+        setExplicitLinksBuilt( true );
+        return false;
     }
 
     /**
@@ -134,6 +182,8 @@ public abstract class NsdObjectImpl extends MinimalEObjectImpl.Container impleme
         switch( featureID ) {
         case NsdPackage.NSD_OBJECT__LINE_NUMBER:
             return getLineNumber();
+        case NsdPackage.NSD_OBJECT__EXPLICIT_LINKS_BUILT:
+            return isExplicitLinksBuilt();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -149,6 +199,9 @@ public abstract class NsdObjectImpl extends MinimalEObjectImpl.Container impleme
         case NsdPackage.NSD_OBJECT__LINE_NUMBER:
             setLineNumber( ( Integer ) newValue );
             return;
+        case NsdPackage.NSD_OBJECT__EXPLICIT_LINKS_BUILT:
+            setExplicitLinksBuilt( ( Boolean ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -164,6 +217,9 @@ public abstract class NsdObjectImpl extends MinimalEObjectImpl.Container impleme
         case NsdPackage.NSD_OBJECT__LINE_NUMBER:
             setLineNumber( LINE_NUMBER_EDEFAULT );
             return;
+        case NsdPackage.NSD_OBJECT__EXPLICIT_LINKS_BUILT:
+            setExplicitLinksBuilt( EXPLICIT_LINKS_BUILT_EDEFAULT );
+            return;
         }
         super.eUnset( featureID );
     }
@@ -178,6 +234,8 @@ public abstract class NsdObjectImpl extends MinimalEObjectImpl.Container impleme
         switch( featureID ) {
         case NsdPackage.NSD_OBJECT__LINE_NUMBER:
             return lineNumber != LINE_NUMBER_EDEFAULT;
+        case NsdPackage.NSD_OBJECT__EXPLICIT_LINKS_BUILT:
+            return explicitLinksBuilt != EXPLICIT_LINKS_BUILT_EDEFAULT;
         }
         return super.eIsSet( featureID );
     }
@@ -191,8 +249,7 @@ public abstract class NsdObjectImpl extends MinimalEObjectImpl.Container impleme
     public Object eInvoke( int operationID, EList< ? > arguments ) throws InvocationTargetException {
         switch( operationID ) {
         case NsdPackage.NSD_OBJECT___BUILD_EXPLICIT_LINKS__IRISECLIPSECONSOLE:
-            buildExplicitLinks( ( IRiseClipseConsole ) arguments.get( 0 ) );
-            return null;
+            return buildExplicitLinks( ( IRiseClipseConsole ) arguments.get( 0 ) );
         }
         return super.eInvoke( operationID, arguments );
     }
@@ -209,6 +266,8 @@ public abstract class NsdObjectImpl extends MinimalEObjectImpl.Container impleme
         StringBuilder result = new StringBuilder( super.toString() );
         result.append( " (lineNumber: " );
         result.append( lineNumber );
+        result.append( ", explicitLinksBuilt: " );
+        result.append( explicitLinksBuilt );
         result.append( ')' );
         return result.toString();
     }
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 86de77a..ccb6af2 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
@@ -1033,6 +1033,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return anyLNClassEClass.getEOperations().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EOperation getAnyLNClass__GetLNClasses() {
+        return anyLNClassEClass.getEOperations().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1283,6 +1293,26 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) cdcEClass.getEStructuralFeatures().get( 8 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getCDC_ReferredByDataObject() {
+        return ( EReference ) cdcEClass.getEStructuralFeatures().get( 9 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getCDC_ReferredBySubDataObject() {
+        return ( EReference ) cdcEClass.getEStructuralFeatures().get( 10 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1583,6 +1613,26 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 2 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataAttribute_ReferredBySubDataObjectAsSizeAttribute() {
+        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataAttribute_ReferredBySubDataObjectAsMaxIndexAttribute() {
+        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 4 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1633,6 +1683,36 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) dataObjectEClass.getEStructuralFeatures().get( 3 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataObject_RefersToCDC() {
+        return ( EReference ) dataObjectEClass.getEStructuralFeatures().get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataObject_RefersToPresenceCondition() {
+        return ( EReference ) dataObjectEClass.getEStructuralFeatures().get( 5 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataObject_RefersToPresenceConditionDerivedStatistics() {
+        return ( EReference ) dataObjectEClass.getEStructuralFeatures().get( 6 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2273,6 +2353,26 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) nsEClass.getEStructuralFeatures().get( 10 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EOperation getNS__FindCDC__String_IRiseClipseConsole() {
+        return nsEClass.getEOperations().get( 0 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EOperation getNS__FindPresenceCondition__String_IRiseClipseConsole() {
+        return nsEClass.getEOperations().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2363,6 +2463,36 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) presenceConditionEClass.getEStructuralFeatures().get( 4 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getPresenceCondition_ReferredByDataObject() {
+        return ( EReference ) presenceConditionEClass.getEStructuralFeatures().get( 5 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getPresenceCondition_ReferredByDataObjectForDerivedStatistics() {
+        return ( EReference ) presenceConditionEClass.getEStructuralFeatures().get( 6 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getPresenceCondition_ReferredBySubDataObject() {
+        return ( EReference ) presenceConditionEClass.getEStructuralFeatures().get( 7 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2823,6 +2953,46 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) subDataObjectEClass.getEStructuralFeatures().get( 2 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getSubDataObject_RefersToCDC() {
+        return ( EReference ) subDataObjectEClass.getEStructuralFeatures().get( 3 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getSubDataObject_RefersToPresenceCondition() {
+        return ( EReference ) subDataObjectEClass.getEStructuralFeatures().get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getSubDataObject_RefersToSizeAttribute() {
+        return ( EReference ) subDataObjectEClass.getEStructuralFeatures().get( 5 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getSubDataObject_RefersToMaxIndexAttribute() {
+        return ( EReference ) subDataObjectEClass.getEStructuralFeatures().get( 6 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2863,6 +3033,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EAttribute ) nsdObjectEClass.getEStructuralFeatures().get( 0 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EAttribute getNsdObject_ExplicitLinksBuilt() {
+        return ( EAttribute ) nsdObjectEClass.getEStructuralFeatures().get( 1 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -3462,6 +3642,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( anyLNClassEClass, ANY_LN_CLASS__BASE );
         createEReference( anyLNClassEClass, ANY_LN_CLASS__REFERS_TO_ABSTRACT_LN_CLASS );
         createEOperation( anyLNClassEClass, ANY_LN_CLASS___GET_NAME );
+        createEOperation( anyLNClassEClass, ANY_LN_CLASS___GET_LN_CLASSES );
 
         applicableServiceNSEClass = createEClass( APPLICABLE_SERVICE_NS );
         createEReference( applicableServiceNSEClass, APPLICABLE_SERVICE_NS__SERVICE_NS_USAGE );
@@ -3492,6 +3673,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( cdcEClass, CDC__TYPE_KIND_PARAMETERIZED );
         createEAttribute( cdcEClass, CDC__VARIANT );
         createEReference( cdcEClass, CDC__CD_CS );
+        createEReference( cdcEClass, CDC__REFERRED_BY_DATA_OBJECT );
+        createEReference( cdcEClass, CDC__REFERRED_BY_SUB_DATA_OBJECT );
 
         cdCsEClass = createEClass( CD_CS );
         createEReference( cdCsEClass, CD_CS__CDC );
@@ -3529,12 +3712,17 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( dataAttributeEClass, DATA_ATTRIBUTE__FC );
         createEAttribute( dataAttributeEClass, DATA_ATTRIBUTE__NAME );
         createEReference( dataAttributeEClass, DATA_ATTRIBUTE__CDC );
+        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE );
+        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE );
 
         dataObjectEClass = createEClass( DATA_OBJECT );
         createEAttribute( dataObjectEClass, DATA_OBJECT__NAME );
         createEAttribute( dataObjectEClass, DATA_OBJECT__TRANSIENT );
         createEAttribute( dataObjectEClass, DATA_OBJECT__TYPE );
         createEReference( dataObjectEClass, DATA_OBJECT__ANY_LN_CLASS );
+        createEReference( dataObjectEClass, DATA_OBJECT__REFERS_TO_CDC );
+        createEReference( dataObjectEClass, DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION );
+        createEReference( dataObjectEClass, DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS );
 
         dataSetMemberOfEClass = createEClass( DATA_SET_MEMBER_OF );
         createEAttribute( dataSetMemberOfEClass, DATA_SET_MEMBER_OF__CB );
@@ -3612,6 +3800,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEReference( nsEClass, NS__CD_CS );
         createEReference( nsEClass, NS__LN_CLASSES );
         createEReference( nsEClass, NS__REFERRED_BY_DEPENDS_ON );
+        createEOperation( nsEClass, NS___FIND_CDC__STRING_IRISECLIPSECONSOLE );
+        createEOperation( nsEClass, NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE );
 
         nsDocEClass = createEClass( NS_DOC );
         createEReference( nsDocEClass, NS_DOC__DOC );
@@ -3623,6 +3813,9 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( presenceConditionEClass, PRESENCE_CONDITION__NAME );
         createEAttribute( presenceConditionEClass, PRESENCE_CONDITION__TITLE_ID );
         createEReference( presenceConditionEClass, PRESENCE_CONDITION__PRESENCE_CONDITIONS );
+        createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT );
+        createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS );
+        createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT );
 
         presenceConditionsEClass = createEClass( PRESENCE_CONDITIONS );
         createEReference( presenceConditionsEClass, PRESENCE_CONDITIONS__PRESENCE_CONDITION );
@@ -3683,12 +3876,17 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( subDataObjectEClass, SUB_DATA_OBJECT__NAME );
         createEAttribute( subDataObjectEClass, SUB_DATA_OBJECT__TYPE );
         createEReference( subDataObjectEClass, SUB_DATA_OBJECT__CDC );
+        createEReference( subDataObjectEClass, SUB_DATA_OBJECT__REFERS_TO_CDC );
+        createEReference( subDataObjectEClass, SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION );
+        createEReference( subDataObjectEClass, SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE );
+        createEReference( subDataObjectEClass, SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE );
 
         titledClassEClass = createEClass( TITLED_CLASS );
         createEAttribute( titledClassEClass, TITLED_CLASS__TITLE_ID );
 
         nsdObjectEClass = createEClass( NSD_OBJECT );
         createEAttribute( nsdObjectEClass, NSD_OBJECT__LINE_NUMBER );
+        createEAttribute( nsdObjectEClass, NSD_OBJECT__EXPLICIT_LINKS_BUILT );
         createEOperation( nsdObjectEClass, NSD_OBJECT___BUILD_EXPLICIT_LINKS__IRISECLIPSECONSOLE );
 
         agNSIdentificationEClass = createEClass( AG_NS_IDENTIFICATION );
@@ -3969,6 +4167,9 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         initEOperation( getAnyLNClass__GetName(), theXMLTypePackage.getString(), "getName", 0, 1, IS_UNIQUE,
                 IS_ORDERED );
 
+        initEOperation( getAnyLNClass__GetLNClasses(), this.getLNClasses(), "getLNClasses", 0, 1, IS_UNIQUE,
+                IS_ORDERED );
+
         initEClass( applicableServiceNSEClass, ApplicableServiceNS.class, "ApplicableServiceNS", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
         initEReference( getApplicableServiceNS_ServiceNsUsage(), this.getServiceNsUsage(),
@@ -4046,6 +4247,14 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         initEReference( getCDC_CDCs(), this.getCDCs(), this.getCDCs_CDC(), "cDCs", null, 0, 1,
                 fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
                 !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getCDC_ReferredByDataObject(), this.getDataObject(), this.getDataObject_RefersToCDC(),
+                "referredByDataObject", null, 0, -1, fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
+        initEReference( getCDC_ReferredBySubDataObject(), this.getSubDataObject(), this.getSubDataObject_RefersToCDC(),
+                "referredBySubDataObject", null, 0, -1, fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC.class,
+                IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
+                !IS_DERIVED, !IS_ORDERED );
 
         initEClass( cdCsEClass, CDCs.class, "CDCs", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
         initEReference( getCDCs_CDC(), this.getCDC(), this.getCDC_CDCs(), "cDC", null, 0, -1, CDCs.class, !IS_TRANSIENT,
@@ -4130,6 +4339,14 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         initEReference( getDataAttribute_CDC(), this.getCDC(), this.getCDC_DataAttribute(), "cDC", null, 0, 1,
                 DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
                 !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getDataAttribute_ReferredBySubDataObjectAsSizeAttribute(), this.getSubDataObject(),
+                this.getSubDataObject_RefersToSizeAttribute(), "referredBySubDataObjectAsSizeAttribute", 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_ReferredBySubDataObjectAsMaxIndexAttribute(), this.getSubDataObject(),
+                this.getSubDataObject_RefersToMaxIndexAttribute(), "referredBySubDataObjectAsMaxIndexAttribute", 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 );
@@ -4143,6 +4360,17 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         initEReference( getDataObject_AnyLNClass(), this.getAnyLNClass(), this.getAnyLNClass_DataObject(), "anyLNClass",
                 null, 0, 1, DataObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
                 !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getDataObject_RefersToCDC(), this.getCDC(), this.getCDC_ReferredByDataObject(), "refersToCDC",
+                null, 0, 1, DataObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getDataObject_RefersToPresenceCondition(), this.getPresenceCondition(),
+                this.getPresenceCondition_ReferredByDataObject(), "refersToPresenceCondition", null, 0, 1,
+                DataObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getDataObject_RefersToPresenceConditionDerivedStatistics(), this.getPresenceCondition(),
+                this.getPresenceCondition_ReferredByDataObjectForDerivedStatistics(),
+                "refersToPresenceConditionDerivedStatistics", null, 0, 1, DataObject.class, IS_TRANSIENT, !IS_VOLATILE,
+                IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( dataSetMemberOfEClass, DataSetMemberOf.class, "DataSetMemberOf", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
@@ -4330,6 +4558,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
                 !IS_DERIVED, !IS_ORDERED );
 
+        EOperation op = initEOperation( getNS__FindCDC__String_IRiseClipseConsole(), this.getCDC(), "findCDC", 0, 1,
+                IS_UNIQUE, IS_ORDERED );
+        addEParameter( op, ecorePackage.getEString(), "cDCName", 0, 1, IS_UNIQUE, IS_ORDERED );
+        addEParameter( op, this.getIRiseClipseConsole(), "console", 0, 1, IS_UNIQUE, IS_ORDERED );
+
+        op = initEOperation( getNS__FindPresenceCondition__String_IRiseClipseConsole(), this.getPresenceCondition(),
+                "findPresenceCondition", 0, 1, IS_UNIQUE, IS_ORDERED );
+        addEParameter( op, ecorePackage.getEString(), "presenceConditionName", 0, 1, IS_UNIQUE, IS_ORDERED );
+        addEParameter( op, this.getIRiseClipseConsole(), "console", 0, 1, IS_UNIQUE, IS_ORDERED );
+
         initEClass( nsDocEClass, NSDoc.class, "NSDoc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
         initEReference( getNSDoc_Doc(), this.getDoc(), this.getDoc_NSDoc(), "doc", null, 0, -1, NSDoc.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
@@ -4355,6 +4593,19 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 this.getPresenceConditions_PresenceCondition(), "presenceConditions", null, 0, 1,
                 PresenceCondition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
                 !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getPresenceCondition_ReferredByDataObject(), this.getDataObject(),
+                this.getDataObject_RefersToPresenceCondition(), "referredByDataObject", null, 0, -1,
+                PresenceCondition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getPresenceCondition_ReferredByDataObjectForDerivedStatistics(), this.getDataObject(),
+                this.getDataObject_RefersToPresenceConditionDerivedStatistics(),
+                "referredByDataObjectForDerivedStatistics", null, 0, -1, PresenceCondition.class, IS_TRANSIENT,
+                !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,
+                !IS_ORDERED );
+        initEReference( getPresenceCondition_ReferredBySubDataObject(), this.getSubDataObject(),
+                this.getSubDataObject_RefersToPresenceCondition(), "referredBySubDataObject", null, 0, -1,
+                PresenceCondition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( presenceConditionsEClass, PresenceConditions.class, "PresenceConditions", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
@@ -4505,6 +4756,21 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         initEReference( getSubDataObject_CDC(), this.getCDC(), this.getCDC_SubDataObject(), "cDC", null, 0, 1,
                 SubDataObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
                 !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getSubDataObject_RefersToCDC(), this.getCDC(), this.getCDC_ReferredBySubDataObject(),
+                "refersToCDC", null, 0, 1, SubDataObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+                !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getSubDataObject_RefersToPresenceCondition(), this.getPresenceCondition(),
+                this.getPresenceCondition_ReferredBySubDataObject(), "refersToPresenceCondition", null, 0, 1,
+                SubDataObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getSubDataObject_RefersToSizeAttribute(), this.getDataAttribute(),
+                this.getDataAttribute_ReferredBySubDataObjectAsSizeAttribute(), "refersToSizeAttribute", null, 0, 1,
+                SubDataObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getSubDataObject_RefersToMaxIndexAttribute(), this.getDataAttribute(),
+                this.getDataAttribute_ReferredBySubDataObjectAsMaxIndexAttribute(), "refersToMaxIndexAttribute", null,
+                0, 1, SubDataObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( titledClassEClass, TitledClass.class, "TitledClass", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
@@ -4515,8 +4781,11 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 IS_GENERATED_INSTANCE_CLASS );
         initEAttribute( getNsdObject_LineNumber(), ecorePackage.getEInt(), "lineNumber", "-1", 1, 1, NsdObject.class,
                 IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED );
+        initEAttribute( getNsdObject_ExplicitLinksBuilt(), ecorePackage.getEBoolean(), "explicitLinksBuilt", "false", 1,
+                1, NsdObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
+                !IS_DERIVED, IS_ORDERED );
 
-        EOperation op = initEOperation( getNsdObject__BuildExplicitLinks__IRiseClipseConsole(), null,
+        op = initEOperation( getNsdObject__BuildExplicitLinks__IRiseClipseConsole(), ecorePackage.getEBoolean(),
                 "buildExplicitLinks", 0, 1, IS_UNIQUE, IS_ORDERED );
         addEParameter( op, this.getIRiseClipseConsole(), "console", 0, 1, IS_UNIQUE, IS_ORDERED );
 
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionImpl.java
index 95f7a69..4bafb3a 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionImpl.java
@@ -19,18 +19,24 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject;
+import java.util.Collection;
 import org.eclipse.emf.common.notify.Notification;
 
 import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseEList;
 import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
  * <!-- begin-user-doc -->
@@ -45,6 +51,9 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getTitleID <em>Title ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getPresenceConditions <em>Presence Conditions</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getReferredByDataObject <em>Referred By Data Object</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getReferredByDataObjectForDerivedStatistics <em>Referred By Data Object For Derived Statistics</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}</li>
  * </ul>
  *
  * @generated
@@ -166,6 +175,36 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
      */
     protected boolean titleIDESet;
 
+    /**
+     * The cached value of the '{@link #getReferredByDataObject() <em>Referred By Data Object</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredByDataObject()
+     * @generated
+     * @ordered
+     */
+    protected EList< DataObject > referredByDataObject;
+
+    /**
+     * The cached value of the '{@link #getReferredByDataObjectForDerivedStatistics() <em>Referred By Data Object For Derived Statistics</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredByDataObjectForDerivedStatistics()
+     * @generated
+     * @ordered
+     */
+    protected EList< DataObject > referredByDataObjectForDerivedStatistics;
+
+    /**
+     * The cached value of the '{@link #getReferredBySubDataObject() <em>Referred By Sub Data Object</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredBySubDataObject()
+     * @generated
+     * @ordered
+     */
+    protected EList< SubDataObject > referredBySubDataObject;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -437,11 +476,129 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
      * @generated
      */
     @Override
+    public EList< DataObject > getReferredByDataObject() {
+        if( referredByDataObject == null ) {
+            referredByDataObject = new EObjectWithInverseEList.Unsettable< DataObject >( DataObject.class, this,
+                    NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION );
+        }
+        return referredByDataObject;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredByDataObject() {
+        if( referredByDataObject != null ) ( ( InternalEList.Unsettable< ? > ) referredByDataObject ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredByDataObject() {
+        return referredByDataObject != null && ( ( InternalEList.Unsettable< ? > ) referredByDataObject ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EList< DataObject > getReferredByDataObjectForDerivedStatistics() {
+        if( referredByDataObjectForDerivedStatistics == null ) {
+            referredByDataObjectForDerivedStatistics = new EObjectWithInverseEList.Unsettable< DataObject >(
+                    DataObject.class, this,
+                    NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS,
+                    NsdPackage.DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION_DERIVED_STATISTICS );
+        }
+        return referredByDataObjectForDerivedStatistics;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredByDataObjectForDerivedStatistics() {
+        if( referredByDataObjectForDerivedStatistics != null )
+            ( ( InternalEList.Unsettable< ? > ) referredByDataObjectForDerivedStatistics ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredByDataObjectForDerivedStatistics() {
+        return referredByDataObjectForDerivedStatistics != null
+                && ( ( InternalEList.Unsettable< ? > ) referredByDataObjectForDerivedStatistics ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EList< SubDataObject > getReferredBySubDataObject() {
+        if( referredBySubDataObject == null ) {
+            referredBySubDataObject = new EObjectWithInverseEList.Unsettable< SubDataObject >( SubDataObject.class,
+                    this, NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION );
+        }
+        return referredBySubDataObject;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredBySubDataObject() {
+        if( referredBySubDataObject != null ) ( ( InternalEList.Unsettable< ? > ) referredBySubDataObject ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredBySubDataObject() {
+        return referredBySubDataObject != null && ( ( InternalEList.Unsettable< ? > ) referredBySubDataObject ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
     public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
         switch( featureID ) {
         case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
             if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
             return basicSetPresenceConditions( ( PresenceConditions ) otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataObject() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataObjectForDerivedStatistics() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredBySubDataObject() )
+                    .basicAdd( otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -456,6 +613,13 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
         switch( featureID ) {
         case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
             return basicSetPresenceConditions( null, msgs );
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT:
+            return ( ( InternalEList< ? > ) getReferredByDataObject() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS:
+            return ( ( InternalEList< ? > ) getReferredByDataObjectForDerivedStatistics() ).basicRemove( otherEnd,
+                    msgs );
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
+            return ( ( InternalEList< ? > ) getReferredBySubDataObject() ).basicRemove( otherEnd, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -493,6 +657,12 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
             return getTitleID();
         case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
             return getPresenceConditions();
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT:
+            return getReferredByDataObject();
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS:
+            return getReferredByDataObjectForDerivedStatistics();
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
+            return getReferredBySubDataObject();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -502,6 +672,7 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
      * <!-- end-user-doc -->
      * @generated
      */
+    @SuppressWarnings( "unchecked" )
     @Override
     public void eSet( int featureID, Object newValue ) {
         switch( featureID ) {
@@ -520,6 +691,18 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
         case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
             setPresenceConditions( ( PresenceConditions ) newValue );
             return;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT:
+            getReferredByDataObject().clear();
+            getReferredByDataObject().addAll( ( Collection< ? extends DataObject > ) newValue );
+            return;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS:
+            getReferredByDataObjectForDerivedStatistics().clear();
+            getReferredByDataObjectForDerivedStatistics().addAll( ( Collection< ? extends DataObject > ) newValue );
+            return;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
+            getReferredBySubDataObject().clear();
+            getReferredBySubDataObject().addAll( ( Collection< ? extends SubDataObject > ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -547,6 +730,15 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
         case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
             setPresenceConditions( ( PresenceConditions ) null );
             return;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT:
+            unsetReferredByDataObject();
+            return;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS:
+            unsetReferredByDataObjectForDerivedStatistics();
+            return;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
+            unsetReferredBySubDataObject();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -569,6 +761,12 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
             return isSetTitleID();
         case NsdPackage.PRESENCE_CONDITION__PRESENCE_CONDITIONS:
             return getPresenceConditions() != null;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT:
+            return isSetReferredByDataObject();
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS:
+            return isSetReferredByDataObjectForDerivedStatistics();
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
+            return isSetReferredBySubDataObject();
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java
index 6efb6ba..9916873 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java
@@ -23,9 +23,12 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgArray;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgPresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgUnderlyingType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DefinedAttributeTypeKind;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject;
+import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
 
 import org.eclipse.emf.common.notify.Notification;
 
@@ -56,6 +59,10 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getType <em>Type</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getCDC <em>CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getRefersToCDC <em>Refers To CDC</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}</li>
  * </ul>
  *
  * @generated
@@ -380,6 +387,82 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
      */
     protected boolean typeESet;
 
+    /**
+     * The cached value of the '{@link #getRefersToCDC() <em>Refers To CDC</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToCDC()
+     * @generated
+     * @ordered
+     */
+    protected CDC refersToCDC;
+
+    /**
+     * This is true if the Refers To CDC reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToCDCESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToPresenceCondition() <em>Refers To Presence Condition</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToPresenceCondition()
+     * @generated
+     * @ordered
+     */
+    protected PresenceCondition refersToPresenceCondition;
+
+    /**
+     * This is true if the Refers To Presence Condition reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToPresenceConditionESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToSizeAttribute() <em>Refers To Size Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToSizeAttribute()
+     * @generated
+     * @ordered
+     */
+    protected DataAttribute refersToSizeAttribute;
+
+    /**
+     * This is true if the Refers To Size Attribute reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToSizeAttributeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToMaxIndexAttribute() <em>Refers To Max Index Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToMaxIndexAttribute()
+     * @generated
+     * @ordered
+     */
+    protected DataAttribute refersToMaxIndexAttribute;
+
+    /**
+     * This is true if the Refers To Max Index Attribute reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToMaxIndexAttributeESet;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1002,6 +1085,464 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
             eNotify( new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_OBJECT__CDC, newCDC, newCDC ) );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public CDC getRefersToCDC() {
+        return refersToCDC;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToCDC( CDC newRefersToCDC, NotificationChain msgs ) {
+        CDC oldRefersToCDC = refersToCDC;
+        refersToCDC = newRefersToCDC;
+        boolean oldRefersToCDCESet = refersToCDCESet;
+        refersToCDCESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC, oldRefersToCDC, newRefersToCDC, !oldRefersToCDCESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToCDC( CDC newRefersToCDC ) {
+        if( newRefersToCDC != refersToCDC ) {
+            NotificationChain msgs = null;
+            if( refersToCDC != null ) msgs = ( ( InternalEObject ) refersToCDC ).eInverseRemove( this,
+                    NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT, CDC.class, msgs );
+            if( newRefersToCDC != null ) msgs = ( ( InternalEObject ) newRefersToCDC ).eInverseAdd( this,
+                    NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT, CDC.class, msgs );
+            msgs = basicSetRefersToCDC( newRefersToCDC, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToCDCESet = refersToCDCESet;
+            refersToCDCESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC, newRefersToCDC, newRefersToCDC, !oldRefersToCDCESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToCDC( NotificationChain msgs ) {
+        CDC oldRefersToCDC = refersToCDC;
+        refersToCDC = null;
+        boolean oldRefersToCDCESet = refersToCDCESet;
+        refersToCDCESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC, oldRefersToCDC, null, oldRefersToCDCESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToCDC() {
+        if( refersToCDC != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToCDC ).eInverseRemove( this,
+                    NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT, CDC.class, msgs );
+            msgs = basicUnsetRefersToCDC( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToCDCESet = refersToCDCESet;
+            refersToCDCESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC, null, null, oldRefersToCDCESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToCDC() {
+        return refersToCDCESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public PresenceCondition getRefersToPresenceCondition() {
+        return refersToPresenceCondition;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToPresenceCondition( PresenceCondition newRefersToPresenceCondition,
+            NotificationChain msgs ) {
+        PresenceCondition oldRefersToPresenceCondition = refersToPresenceCondition;
+        refersToPresenceCondition = newRefersToPresenceCondition;
+        boolean oldRefersToPresenceConditionESet = refersToPresenceConditionESet;
+        refersToPresenceConditionESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION, oldRefersToPresenceCondition,
+                    newRefersToPresenceCondition, !oldRefersToPresenceConditionESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToPresenceCondition( PresenceCondition newRefersToPresenceCondition ) {
+        if( newRefersToPresenceCondition != refersToPresenceCondition ) {
+            NotificationChain msgs = null;
+            if( refersToPresenceCondition != null )
+                msgs = ( ( InternalEObject ) refersToPresenceCondition ).eInverseRemove( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT, PresenceCondition.class, msgs );
+            if( newRefersToPresenceCondition != null )
+                msgs = ( ( InternalEObject ) newRefersToPresenceCondition ).eInverseAdd( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT, PresenceCondition.class, msgs );
+            msgs = basicSetRefersToPresenceCondition( newRefersToPresenceCondition, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToPresenceConditionESet = refersToPresenceConditionESet;
+            refersToPresenceConditionESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION, newRefersToPresenceCondition,
+                    newRefersToPresenceCondition, !oldRefersToPresenceConditionESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToPresenceCondition( NotificationChain msgs ) {
+        PresenceCondition oldRefersToPresenceCondition = refersToPresenceCondition;
+        refersToPresenceCondition = null;
+        boolean oldRefersToPresenceConditionESet = refersToPresenceConditionESet;
+        refersToPresenceConditionESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION, oldRefersToPresenceCondition, null,
+                    oldRefersToPresenceConditionESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToPresenceCondition() {
+        if( refersToPresenceCondition != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToPresenceCondition ).eInverseRemove( this,
+                    NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT, PresenceCondition.class, msgs );
+            msgs = basicUnsetRefersToPresenceCondition( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToPresenceConditionESet = refersToPresenceConditionESet;
+            refersToPresenceConditionESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION, null, null,
+                    oldRefersToPresenceConditionESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToPresenceCondition() {
+        return refersToPresenceConditionESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public DataAttribute getRefersToSizeAttribute() {
+        return refersToSizeAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToSizeAttribute( DataAttribute newRefersToSizeAttribute,
+            NotificationChain msgs ) {
+        DataAttribute oldRefersToSizeAttribute = refersToSizeAttribute;
+        refersToSizeAttribute = newRefersToSizeAttribute;
+        boolean oldRefersToSizeAttributeESet = refersToSizeAttributeESet;
+        refersToSizeAttributeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE, oldRefersToSizeAttribute,
+                    newRefersToSizeAttribute, !oldRefersToSizeAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToSizeAttribute( DataAttribute newRefersToSizeAttribute ) {
+        if( newRefersToSizeAttribute != refersToSizeAttribute ) {
+            NotificationChain msgs = null;
+            if( refersToSizeAttribute != null )
+                msgs = ( ( InternalEObject ) refersToSizeAttribute ).eInverseRemove( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE, DataAttribute.class,
+                        msgs );
+            if( newRefersToSizeAttribute != null )
+                msgs = ( ( InternalEObject ) newRefersToSizeAttribute ).eInverseAdd( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE, DataAttribute.class,
+                        msgs );
+            msgs = basicSetRefersToSizeAttribute( newRefersToSizeAttribute, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToSizeAttributeESet = refersToSizeAttributeESet;
+            refersToSizeAttributeESet = true;
+            if( eNotificationRequired() ) eNotify(
+                    new ENotificationImpl( this, Notification.SET, NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE,
+                            newRefersToSizeAttribute, newRefersToSizeAttribute, !oldRefersToSizeAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToSizeAttribute( NotificationChain msgs ) {
+        DataAttribute oldRefersToSizeAttribute = refersToSizeAttribute;
+        refersToSizeAttribute = null;
+        boolean oldRefersToSizeAttributeESet = refersToSizeAttributeESet;
+        refersToSizeAttributeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE, oldRefersToSizeAttribute, null,
+                    oldRefersToSizeAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToSizeAttribute() {
+        if( refersToSizeAttribute != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToSizeAttribute ).eInverseRemove( this,
+                    NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE, DataAttribute.class,
+                    msgs );
+            msgs = basicUnsetRefersToSizeAttribute( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToSizeAttributeESet = refersToSizeAttributeESet;
+            refersToSizeAttributeESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE, null, null, oldRefersToSizeAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToSizeAttribute() {
+        return refersToSizeAttributeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public DataAttribute getRefersToMaxIndexAttribute() {
+        return refersToMaxIndexAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToMaxIndexAttribute( DataAttribute newRefersToMaxIndexAttribute,
+            NotificationChain msgs ) {
+        DataAttribute oldRefersToMaxIndexAttribute = refersToMaxIndexAttribute;
+        refersToMaxIndexAttribute = newRefersToMaxIndexAttribute;
+        boolean oldRefersToMaxIndexAttributeESet = refersToMaxIndexAttributeESet;
+        refersToMaxIndexAttributeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE, oldRefersToMaxIndexAttribute,
+                    newRefersToMaxIndexAttribute, !oldRefersToMaxIndexAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToMaxIndexAttribute( DataAttribute newRefersToMaxIndexAttribute ) {
+        if( newRefersToMaxIndexAttribute != refersToMaxIndexAttribute ) {
+            NotificationChain msgs = null;
+            if( refersToMaxIndexAttribute != null )
+                msgs = ( ( InternalEObject ) refersToMaxIndexAttribute ).eInverseRemove( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE,
+                        DataAttribute.class, msgs );
+            if( newRefersToMaxIndexAttribute != null )
+                msgs = ( ( InternalEObject ) newRefersToMaxIndexAttribute ).eInverseAdd( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE,
+                        DataAttribute.class, msgs );
+            msgs = basicSetRefersToMaxIndexAttribute( newRefersToMaxIndexAttribute, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToMaxIndexAttributeESet = refersToMaxIndexAttributeESet;
+            refersToMaxIndexAttributeESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE, newRefersToMaxIndexAttribute,
+                    newRefersToMaxIndexAttribute, !oldRefersToMaxIndexAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToMaxIndexAttribute( NotificationChain msgs ) {
+        DataAttribute oldRefersToMaxIndexAttribute = refersToMaxIndexAttribute;
+        refersToMaxIndexAttribute = null;
+        boolean oldRefersToMaxIndexAttributeESet = refersToMaxIndexAttributeESet;
+        refersToMaxIndexAttributeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE, oldRefersToMaxIndexAttribute, null,
+                    oldRefersToMaxIndexAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToMaxIndexAttribute() {
+        if( refersToMaxIndexAttribute != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToMaxIndexAttribute ).eInverseRemove( this,
+                    NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE, DataAttribute.class,
+                    msgs );
+            msgs = basicUnsetRefersToMaxIndexAttribute( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToMaxIndexAttributeESet = refersToMaxIndexAttributeESet;
+            refersToMaxIndexAttributeESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE, null, null,
+                    oldRefersToMaxIndexAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToMaxIndexAttribute() {
+        return refersToMaxIndexAttributeESet;
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1013,6 +1554,27 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         case NsdPackage.SUB_DATA_OBJECT__CDC:
             if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
             return basicSetCDC( ( CDC ) otherEnd, msgs );
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC:
+            if( refersToCDC != null ) msgs = ( ( InternalEObject ) refersToCDC ).eInverseRemove( this,
+                    NsdPackage.CDC__REFERRED_BY_SUB_DATA_OBJECT, CDC.class, msgs );
+            return basicSetRefersToCDC( ( CDC ) otherEnd, msgs );
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            if( refersToPresenceCondition != null )
+                msgs = ( ( InternalEObject ) refersToPresenceCondition ).eInverseRemove( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT, PresenceCondition.class, msgs );
+            return basicSetRefersToPresenceCondition( ( PresenceCondition ) otherEnd, msgs );
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE:
+            if( refersToSizeAttribute != null )
+                msgs = ( ( InternalEObject ) refersToSizeAttribute ).eInverseRemove( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE, DataAttribute.class,
+                        msgs );
+            return basicSetRefersToSizeAttribute( ( DataAttribute ) otherEnd, msgs );
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            if( refersToMaxIndexAttribute != null )
+                msgs = ( ( InternalEObject ) refersToMaxIndexAttribute ).eInverseRemove( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE,
+                        DataAttribute.class, msgs );
+            return basicSetRefersToMaxIndexAttribute( ( DataAttribute ) otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -1027,6 +1589,14 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         switch( featureID ) {
         case NsdPackage.SUB_DATA_OBJECT__CDC:
             return basicSetCDC( null, msgs );
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC:
+            return basicUnsetRefersToCDC( msgs );
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            return basicUnsetRefersToPresenceCondition( msgs );
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE:
+            return basicUnsetRefersToSizeAttribute( msgs );
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            return basicUnsetRefersToMaxIndexAttribute( msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -1077,6 +1647,14 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
             return getType();
         case NsdPackage.SUB_DATA_OBJECT__CDC:
             return getCDC();
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC:
+            return getRefersToCDC();
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            return getRefersToPresenceCondition();
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE:
+            return getRefersToSizeAttribute();
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            return getRefersToMaxIndexAttribute();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -1125,6 +1703,18 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         case NsdPackage.SUB_DATA_OBJECT__CDC:
             setCDC( ( CDC ) newValue );
             return;
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC:
+            setRefersToCDC( ( CDC ) newValue );
+            return;
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            setRefersToPresenceCondition( ( PresenceCondition ) newValue );
+            return;
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE:
+            setRefersToSizeAttribute( ( DataAttribute ) newValue );
+            return;
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            setRefersToMaxIndexAttribute( ( DataAttribute ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -1173,6 +1763,18 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         case NsdPackage.SUB_DATA_OBJECT__CDC:
             setCDC( ( CDC ) null );
             return;
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC:
+            unsetRefersToCDC();
+            return;
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            unsetRefersToPresenceCondition();
+            return;
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE:
+            unsetRefersToSizeAttribute();
+            return;
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            unsetRefersToMaxIndexAttribute();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -1209,6 +1811,14 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
             return isSetType();
         case NsdPackage.SUB_DATA_OBJECT__CDC:
             return getCDC() != null;
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_CDC:
+            return isSetRefersToCDC();
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_PRESENCE_CONDITION:
+            return isSetRefersToPresenceCondition();
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_SIZE_ATTRIBUTE:
+            return isSetRefersToSizeAttribute();
+        case NsdPackage.SUB_DATA_OBJECT__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            return isSetRefersToMaxIndexAttribute();
         }
         return super.eIsSet( featureID );
     }
@@ -1374,4 +1984,73 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         return result.toString();
     }
 
+    /* Implicit link
+     *   SubDataObject.type                 -> CDC.name
+     *   SubDataObject.presCond             -> PresenceCondition.name
+     *   SubDataObject.sizeAttribute        -> DataAttribute.name
+     *   SubDataObject.maxIndexAttribute    -> DataAttribute.name
+     */
+    @Override
+    public boolean buildExplicitLinks( IRiseClipseConsole console ) {
+        if( super.buildExplicitLinks( console ) ) return true;
+
+        if( isSetType() ) {
+            setRefersToCDC( getCDC().getCDCs().getNS().findCDC( getType(), console ) );
+            if( getRefersToCDC() == null ) {
+                console.error( "CDC (name: " + getType() + ") refers by SubDataObject (name: " + getName()
+                        + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "CDC (name: " + getType() + ") refers by SubDataObject (name: " + getName()
+                        + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") found in NS (id:"
+                        + getRefersToCDC().getCDCs().getNS().getId() + ")" );
+            }
+        }
+
+        if( isSetPresCond() ) {
+            setRefersToPresenceCondition( getCDC().getCDCs().getNS().findPresenceCondition( getPresCond(), console ) );
+            if( getRefersToPresenceCondition() == null ) {
+                console.error( "PresenceCondition (name: " + getPresCond() + ") refers by SubDataObject (name: "
+                        + getName() + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "PresenceCondition (name: " + getPresCond() + ") refers by SubDataObject (name: "
+                        + getName() + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") found in NS (id:"
+                        + getRefersToPresenceCondition().getPresenceConditions().getNS().getId() + ")" );
+            }
+        }
+
+        if( isSetSizeAttribute() ) {
+            setRefersToSizeAttribute( getCDC().getDataAttribute().stream()
+                    .filter( att -> att.getName().equals( getSizeAttribute() ) ).findAny().orElse( null ) );
+            if( getRefersToSizeAttribute() == null ) {
+                console.error( "DataAttribute (name: " + getSizeAttribute()
+                        + ") refers as sizeAttribute by SubDataObject (name: " + getName() + ") in NS (id:"
+                        + getCDC().getCDCs().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "DataAttribute (name: " + getSizeAttribute()
+                        + ") refers as sizeAttribute by SubDataObject (name: " + getName() + ") in NS (id:"
+                        + getCDC().getCDCs().getNS().getId() + ") found" );
+            }
+        }
+
+        if( isSetMaxIndexAttribute() ) {
+            setRefersToMaxIndexAttribute( getCDC().getDataAttribute().stream()
+                    .filter( att -> att.getName().equals( getMaxIndexAttribute() ) ).findAny().orElse( null ) );
+            if( getRefersToMaxIndexAttribute() == null ) {
+                console.error( "DataAttribute (name: " + getMaxIndexAttribute()
+                        + ") refers as maxIndexAttribute by SubDataObject (name: " + getName() + ") in NS (id:"
+                        + getCDC().getCDCs().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "DataAttribute (name: " + getMaxIndexAttribute()
+                        + ") refers as maxIndexAttribute by SubDataObject (name: " + getName() + ") in NS (id:"
+                        + getCDC().getCDCs().getNS().getId() + ") found" );
+            }
+        }
+
+        return false;
+    }
+
 } //SubDataObjectImpl
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java
index a6627b6..3e89911 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java
@@ -147,13 +147,13 @@ public class NsdResourceSetImpl extends ResourceSetImpl {
      * The following links are implicit:
      *   DependsOn.id                       -> NS.id                                DONE
      *   AnyLNClass.base                    -> AbstractLNClass                      DONE
-     *   DataObject.type                    -> CDC.name
-     *   DataObject.presCond                -> PresenceCondition.name
-     *   DataObject.dsPresCond              -> PresenceCondition.name
-     *   SubDataObject.type                 -> CDC.name
-     *   SubDataObject.presCond             -> PresenceCondition.name
-     *   SubDataObject.sizeAttribute        -> DataAttribute.name
-     *   SubDataObject.maxIndexAttribute    -> DataAttribute.name
+     *   DataObject.type                    -> CDC.name                             DONE
+     *   DataObject.presCond                -> PresenceCondition.name               DONE
+     *   DataObject.dsPresCond              -> PresenceCondition.name               DONE
+     *   SubDataObject.type                 -> CDC.name                             DONE
+     *   SubDataObject.presCond             -> PresenceCondition.name               DONE
+     *   SubDataObject.sizeAttribute        -> DataAttribute.name                   DONE
+     *   SubDataObject.maxIndexAttribute    -> DataAttribute.name                   DONE
      *   DataAttribute.fc                   -> FunctionalConstraint.abbreviation
      *   DataAttribute.presCond             -> PresenceCondition.name
      *   DataAttribute.sizeAttribute        -> DataAttribute.name
-- 
GitLab