diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
index f4846e7a3c18b87e44852ed238705af1223f2c30..57ba8c8840e79474f18ba2ecf92a90fa08a482c8 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
@@ -506,3 +506,7 @@ _UI_DataAttribute_referredByDataAttributeAsSizeAttribute_feature = Referred By D
 _UI_DataAttribute_referredByDataAttributeAsMaxIndexAttribute_feature = Referred By Data Attribute As Max Index Attribute
 _UI_FunctionalConstraint_referredByDataAttribute_feature = Referred By Data Attribute
 _UI_PresenceCondition_referredByDataAttribute_feature = Referred By Data Attribute
+_UI_PresenceCondition_referredBySubDataAttribute_feature = Referred By Sub Data Attribute
+_UI_SubDataAttribute_refersToPresenceCondition_feature = Refers To Presence Condition
+_UI_Enumeration_refersToBaseEnumeration_feature = Refers To Base Enumeration
+_UI_Enumeration_referredByEnumerationAsBase_feature = Referred By Enumeration As Base
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/EnumerationItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/EnumerationItemProvider.java
index bae04746446dfb2b1b333fbd5e9e225e2994623b..4efe943c50f0c4484e48be01fb6adaa3537220c6 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/EnumerationItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/EnumerationItemProvider.java
@@ -66,6 +66,8 @@ public class EnumerationItemProvider extends TitledClassItemProvider {
 
             addInheritedFromPropertyDescriptor( object );
             addNamePropertyDescriptor( object );
+            addRefersToBaseEnumerationPropertyDescriptor( object );
+            addReferredByEnumerationAsBasePropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -102,6 +104,37 @@ public class EnumerationItemProvider extends TitledClassItemProvider {
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Refers To Base Enumeration feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToBaseEnumerationPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_Enumeration_refersToBaseEnumeration_feature" ),
+                getString( "_UI_PropertyDescriptor_description", "_UI_Enumeration_refersToBaseEnumeration_feature",
+                        "_UI_Enumeration_type" ),
+                NsdPackage.Literals.ENUMERATION__REFERS_TO_BASE_ENUMERATION, true, false, true, null, null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Referred By Enumeration As Base feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredByEnumerationAsBasePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_Enumeration_referredByEnumerationAsBase_feature" ),
+                getString( "_UI_PropertyDescriptor_description", "_UI_Enumeration_referredByEnumerationAsBase_feature",
+                        "_UI_Enumeration_type" ),
+                NsdPackage.Literals.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE, 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/PresenceConditionItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/PresenceConditionItemProvider.java
index b9cdd96c46b039510d961f7e8bff024eeb455752..85c419f59cb8705c0746243d4772908359d9fd15 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
@@ -68,6 +68,7 @@ public class PresenceConditionItemProvider extends NsdObjectItemProvider {
             addReferredByDataObjectForDerivedStatisticsPropertyDescriptor( object );
             addReferredBySubDataObjectPropertyDescriptor( object );
             addReferredByDataAttributePropertyDescriptor( object );
+            addReferredBySubDataAttributePropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -201,6 +202,22 @@ public class PresenceConditionItemProvider extends NsdObjectItemProvider {
                         null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Referred By Sub Data Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredBySubDataAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_PresenceCondition_referredBySubDataAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_PresenceCondition_referredBySubDataAttribute_feature", "_UI_PresenceCondition_type" ),
+                NsdPackage.Literals.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE, 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/SubDataAttributeItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataAttributeItemProvider.java
index c02b0a49b747e492e804a628a2b8a047a0a46365..490b359a00db19222d1e34c33e73919d965fa41b 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataAttributeItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/SubDataAttributeItemProvider.java
@@ -74,6 +74,7 @@ public class SubDataAttributeItemProvider extends DocumentedClassItemProvider {
             addMaxValuePropertyDescriptor( object );
             addMinValuePropertyDescriptor( object );
             addNamePropertyDescriptor( object );
+            addRefersToPresenceConditionPropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -190,6 +191,22 @@ public class SubDataAttributeItemProvider extends DocumentedClassItemProvider {
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, 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_SubDataAttribute_refersToPresenceCondition_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_SubDataAttribute_refersToPresenceCondition_feature", "_UI_SubDataAttribute_type" ),
+                        NsdPackage.Literals.SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION, 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/model/nsd.ecore b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
index 31e45673f0a7df36e8450791fa6fe53a3093d0e8..4ed29cb8a11c82eb2926cbb0c8e4480e54c839b1 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
@@ -833,6 +833,12 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="enumerations" ordered="false"
         eType="#//Enumerations" transient="true" unsettable="true" resolveProxies="false"
         eOpposite="#//Enumerations/enumeration"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToBaseEnumeration"
+        ordered="false" eType="#//Enumeration" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//Enumeration/referredByEnumerationAsBase"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByEnumerationAsBase"
+        ordered="false" upperBound="-1" eType="#//Enumeration" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//Enumeration/refersToBaseEnumeration"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Enumerations" eSuperTypes="#//NsdObject">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1072,6 +1078,10 @@
       <eParameters name="functionalConstraintAbbreviation" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
       <eParameters name="console" eType="#//IRiseClipseConsole"/>
     </eOperations>
+    <eOperations name="findEnumeration" eType="#//Enumeration">
+      <eParameters name="enumerationName" 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">
@@ -1235,6 +1245,9 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataAttribute"
         ordered="false" upperBound="-1" eType="#//DataAttribute" transient="true"
         unsettable="true" resolveProxies="false" eOpposite="#//DataAttribute/refersToPresenceCondition"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredBySubDataAttribute"
+        ordered="false" upperBound="-1" eType="#//SubDataAttribute" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//SubDataAttribute/refersToPresenceCondition"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="PresenceConditions" eSuperTypes="#//NsdObject">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1554,6 +1567,9 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="constructedAttribute" ordered="false"
         eType="#//ConstructedAttribute" transient="true" unsettable="true" resolveProxies="false"
         eOpposite="#//ConstructedAttribute/subDataAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToPresenceCondition"
+        ordered="false" eType="#//PresenceCondition" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//PresenceCondition/referredBySubDataAttribute"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="SubDataObject" eSuperTypes="#//DocumentedClass #//AgPresenceCondition #//AgArray #//AgUnderlyingType">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
index 7987efc48fb5a64a8b5f5598165d380cf2012382..34f799a431c8b3f77dd9cf0eab2d32198c368c48 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
@@ -256,6 +256,8 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Enumeration/inheritedFrom"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//Enumeration/name"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//Enumeration/enumerations"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//Enumeration/refersToBaseEnumeration"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//Enumeration/referredByEnumerationAsBase"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//Enumerations">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//Enumerations/enumeration"/>
@@ -324,6 +326,10 @@
         <genParameters ecoreParameter="nsd.ecore#//NS/findFunctionalConstraint/functionalConstraintAbbreviation"/>
         <genParameters ecoreParameter="nsd.ecore#//NS/findFunctionalConstraint/console"/>
       </genOperations>
+      <genOperations ecoreOperation="nsd.ecore#//NS/findEnumeration">
+        <genParameters ecoreParameter="nsd.ecore#//NS/findEnumeration/enumerationName"/>
+        <genParameters ecoreParameter="nsd.ecore#//NS/findEnumeration/console"/>
+      </genOperations>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//NSDoc">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//NSDoc/doc"/>
@@ -339,6 +345,7 @@
       <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"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/referredByDataAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/referredBySubDataAttribute"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//PresenceConditions">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceConditions/presenceCondition"/>
@@ -392,6 +399,7 @@
     <genClasses ecoreClass="nsd.ecore#//SubDataAttribute">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataAttribute/name"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//SubDataAttribute/constructedAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//SubDataAttribute/refersToPresenceCondition"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//SubDataObject">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//SubDataObject/name"/>
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java
index 19afbf43ab62e2b132e95bd1f452e52b62a00906..ac1a737331df4172a7dae01b1858e3ebd014d4ac 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/Enumeration.java
@@ -34,6 +34,8 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getInheritedFrom <em>Inherited From</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getEnumerations <em>Enumerations</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getRefersToBaseEnumeration <em>Refers To Base Enumeration</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByEnumerationAsBase <em>Referred By Enumeration As Base</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration()
@@ -211,4 +213,100 @@ public interface Enumeration extends TitledClass {
      */
     void setEnumerations( Enumerations value );
 
+    /**
+     * Returns the value of the '<em><b>Refers To Base Enumeration</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByEnumerationAsBase <em>Referred By Enumeration As Base</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To Base Enumeration</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 Base Enumeration</em>' reference.
+     * @see #isSetRefersToBaseEnumeration()
+     * @see #unsetRefersToBaseEnumeration()
+     * @see #setRefersToBaseEnumeration(Enumeration)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration_RefersToBaseEnumeration()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByEnumerationAsBase
+     * @model opposite="referredByEnumerationAsBase" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    Enumeration getRefersToBaseEnumeration();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getRefersToBaseEnumeration <em>Refers To Base Enumeration</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Base Enumeration</em>' reference.
+     * @see #isSetRefersToBaseEnumeration()
+     * @see #unsetRefersToBaseEnumeration()
+     * @see #getRefersToBaseEnumeration()
+     * @generated
+     */
+    void setRefersToBaseEnumeration( Enumeration value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getRefersToBaseEnumeration <em>Refers To Base Enumeration</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToBaseEnumeration()
+     * @see #getRefersToBaseEnumeration()
+     * @see #setRefersToBaseEnumeration(Enumeration)
+     * @generated
+     */
+    void unsetRefersToBaseEnumeration();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getRefersToBaseEnumeration <em>Refers To Base Enumeration</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Base Enumeration</em>' reference is set.
+     * @see #unsetRefersToBaseEnumeration()
+     * @see #getRefersToBaseEnumeration()
+     * @see #setRefersToBaseEnumeration(Enumeration)
+     * @generated
+     */
+    boolean isSetRefersToBaseEnumeration();
+
+    /**
+     * Returns the value of the '<em><b>Referred By Enumeration As Base</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getRefersToBaseEnumeration <em>Refers To Base Enumeration</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Enumeration As Base</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 Enumeration As Base</em>' reference list.
+     * @see #isSetReferredByEnumerationAsBase()
+     * @see #unsetReferredByEnumerationAsBase()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getEnumeration_ReferredByEnumerationAsBase()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getRefersToBaseEnumeration
+     * @model opposite="refersToBaseEnumeration" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< Enumeration > getReferredByEnumerationAsBase();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByEnumerationAsBase <em>Referred By Enumeration As Base</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredByEnumerationAsBase()
+     * @see #getReferredByEnumerationAsBase()
+     * @generated
+     */
+    void unsetReferredByEnumerationAsBase();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByEnumerationAsBase <em>Referred By Enumeration As Base</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Enumeration As Base</em>' reference list is set.
+     * @see #unsetReferredByEnumerationAsBase()
+     * @see #getReferredByEnumerationAsBase()
+     * @generated
+     */
+    boolean isSetReferredByEnumerationAsBase();
+
 } // Enumeration
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 4fc7fcb0fc3a5b31e2fbe2c7c5bf0cae0534abee..1401cc8fc96e62a0c6a5482e40984083f1e0b067 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
@@ -635,4 +635,12 @@ public interface NS extends Copyrighted, AgNSIdentification, AgUML, AgNSdesc {
     FunctionalConstraint findFunctionalConstraint( String functionalConstraintAbbreviation,
             IRiseClipseConsole console );
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
+     * @generated
+     */
+    Enumeration findEnumeration( String enumerationName, IRiseClipseConsole console );
+
 } // NS
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 8d569898ab74f03f020c89339a64641d8be8d1a6..00e5de4609826bd4beaaeb5fc89be48a2cd0c4df 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
@@ -3361,6 +3361,24 @@ public interface NsdPackage extends EPackage {
      */
     int ENUMERATION__ENUMERATIONS = TITLED_CLASS_FEATURE_COUNT + 3;
 
+    /**
+     * The feature id for the '<em><b>Refers To Base Enumeration</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ENUMERATION__REFERS_TO_BASE_ENUMERATION = TITLED_CLASS_FEATURE_COUNT + 4;
+
+    /**
+     * The feature id for the '<em><b>Referred By Enumeration As Base</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE = TITLED_CLASS_FEATURE_COUNT + 5;
+
     /**
      * The number of structural features of the '<em>Enumeration</em>' class.
      * <!-- begin-user-doc -->
@@ -3368,7 +3386,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int ENUMERATION_FEATURE_COUNT = TITLED_CLASS_FEATURE_COUNT + 4;
+    int ENUMERATION_FEATURE_COUNT = TITLED_CLASS_FEATURE_COUNT + 6;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -4342,6 +4360,15 @@ public interface NsdPackage extends EPackage {
      */
     int NS___FIND_FUNCTIONAL_CONSTRAINT__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 2;
 
+    /**
+     * The operation id for the '<em>Find Enumeration</em>' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NS___FIND_ENUMERATION__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 3;
+
     /**
      * The number of operations of the '<em>NS</em>' class.
      * <!-- begin-user-doc -->
@@ -4349,7 +4376,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int NS_OPERATION_COUNT = COPYRIGHTED_OPERATION_COUNT + 3;
+    int NS_OPERATION_COUNT = COPYRIGHTED_OPERATION_COUNT + 4;
 
     /**
      * The feature id for the '<em><b>Line Number</b></em>' attribute.
@@ -4585,6 +4612,15 @@ public interface NsdPackage extends EPackage {
      */
     int PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE = NSD_OBJECT_FEATURE_COUNT + 8;
 
+    /**
+     * The feature id for the '<em><b>Referred By Sub Data Attribute</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE = NSD_OBJECT_FEATURE_COUNT + 9;
+
     /**
      * The number of structural features of the '<em>Presence Condition</em>' class.
      * <!-- begin-user-doc -->
@@ -4592,7 +4628,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int PRESENCE_CONDITION_FEATURE_COUNT = NSD_OBJECT_FEATURE_COUNT + 9;
+    int PRESENCE_CONDITION_FEATURE_COUNT = NSD_OBJECT_FEATURE_COUNT + 10;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -5854,6 +5890,15 @@ public interface NsdPackage extends EPackage {
      */
     int SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 13;
 
+    /**
+     * 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_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION = DOCUMENTED_CLASS_FEATURE_COUNT + 14;
+
     /**
      * The number of structural features of the '<em>Sub Data Attribute</em>' class.
      * <!-- begin-user-doc -->
@@ -5861,7 +5906,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int SUB_DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 14;
+    int SUB_DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 15;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -8053,6 +8098,28 @@ public interface NsdPackage extends EPackage {
      */
     EReference getEnumeration_Enumerations();
 
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getRefersToBaseEnumeration <em>Refers To Base Enumeration</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Base Enumeration</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getRefersToBaseEnumeration()
+     * @see #getEnumeration()
+     * @generated
+     */
+    EReference getEnumeration_RefersToBaseEnumeration();
+
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByEnumerationAsBase <em>Referred By Enumeration As Base</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Enumeration As Base</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration#getReferredByEnumerationAsBase()
+     * @see #getEnumeration()
+     * @generated
+     */
+    EReference getEnumeration_ReferredByEnumerationAsBase();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations <em>Enumerations</em>}'.
      * <!-- begin-user-doc -->
@@ -8591,6 +8658,16 @@ public interface NsdPackage extends EPackage {
      */
     EOperation getNS__FindFunctionalConstraint__String_IRiseClipseConsole();
 
+    /**
+     * Returns the meta object for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findEnumeration(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) <em>Find Enumeration</em>}' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the '<em>Find Enumeration</em>' operation.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findEnumeration(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole)
+     * @generated
+     */
+    EOperation getNS__FindEnumeration__String_IRiseClipseConsole();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc <em>NS Doc</em>}'.
      * <!-- begin-user-doc -->
@@ -8732,6 +8809,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getPresenceCondition_ReferredByDataAttribute();
 
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataAttribute <em>Referred By Sub Data Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Sub Data Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataAttribute()
+     * @see #getPresenceCondition()
+     * @generated
+     */
+    EReference getPresenceCondition_ReferredBySubDataAttribute();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions <em>Presence Conditions</em>}'.
      * <!-- begin-user-doc -->
@@ -9183,6 +9271,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getSubDataAttribute_ConstructedAttribute();
 
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#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.SubDataAttribute#getRefersToPresenceCondition()
+     * @see #getSubDataAttribute()
+     * @generated
+     */
+    EReference getSubDataAttribute_RefersToPresenceCondition();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject <em>Sub Data Object</em>}'.
      * <!-- begin-user-doc -->
@@ -10980,6 +11079,23 @@ public interface NsdPackage extends EPackage {
          */
         EReference ENUMERATION__ENUMERATIONS = eINSTANCE.getEnumeration_Enumerations();
 
+        /**
+         * The meta object literal for the '<em><b>Refers To Base Enumeration</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ENUMERATION__REFERS_TO_BASE_ENUMERATION = eINSTANCE.getEnumeration_RefersToBaseEnumeration();
+
+        /**
+         * The meta object literal for the '<em><b>Referred By Enumeration As Base</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE = eINSTANCE
+                .getEnumeration_ReferredByEnumerationAsBase();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationsImpl <em>Enumerations</em>}' class.
          * <!-- begin-user-doc -->
@@ -11403,6 +11519,15 @@ public interface NsdPackage extends EPackage {
         EOperation NS___FIND_FUNCTIONAL_CONSTRAINT__STRING_IRISECLIPSECONSOLE = eINSTANCE
                 .getNS__FindFunctionalConstraint__String_IRiseClipseConsole();
 
+        /**
+         * The meta object literal for the '<em><b>Find Enumeration</b></em>' operation.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EOperation NS___FIND_ENUMERATION__STRING_IRISECLIPSECONSOLE = eINSTANCE
+                .getNS__FindEnumeration__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 -->
@@ -11514,6 +11639,15 @@ public interface NsdPackage extends EPackage {
         EReference PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE = eINSTANCE
                 .getPresenceCondition_ReferredByDataAttribute();
 
+        /**
+         * The meta object literal for the '<em><b>Referred By Sub Data Attribute</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE = eINSTANCE
+                .getPresenceCondition_ReferredBySubDataAttribute();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionsImpl <em>Presence Conditions</em>}' class.
          * <!-- begin-user-doc -->
@@ -11876,6 +12010,15 @@ public interface NsdPackage extends EPackage {
          */
         EReference SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE = eINSTANCE.getSubDataAttribute_ConstructedAttribute();
 
+        /**
+         * 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_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION = eINSTANCE
+                .getSubDataAttribute_RefersToPresenceCondition();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataObjectImpl <em>Sub Data Object</em>}' class.
          * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/PresenceCondition.java
index 5f563c348531d899775a78c84cc960083478ef1a..cd38b29dec62d071256f605fa1f4c3f45b7fecef 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
@@ -39,6 +39,7 @@ import org.eclipse.emf.common.util.EList;
  *   <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>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataAttribute <em>Referred By Sub Data Attribute</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition()
@@ -438,4 +439,45 @@ public interface PresenceCondition extends NsdObject {
      */
     boolean isSetReferredByDataAttribute();
 
+    /**
+     * Returns the value of the '<em><b>Referred By Sub Data Attribute</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Sub Data 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 Attribute</em>' reference list.
+     * @see #isSetReferredBySubDataAttribute()
+     * @see #unsetReferredBySubDataAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition_ReferredBySubDataAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getRefersToPresenceCondition
+     * @model opposite="refersToPresenceCondition" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< SubDataAttribute > getReferredBySubDataAttribute();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataAttribute <em>Referred By Sub Data Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredBySubDataAttribute()
+     * @see #getReferredBySubDataAttribute()
+     * @generated
+     */
+    void unsetReferredBySubDataAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataAttribute <em>Referred By Sub Data Attribute</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Sub Data Attribute</em>' reference list is set.
+     * @see #unsetReferredBySubDataAttribute()
+     * @see #getReferredBySubDataAttribute()
+     * @generated
+     */
+    boolean isSetReferredBySubDataAttribute();
+
 } // PresenceCondition
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java
index b9e32081cd2a7ce766758bc1bbd297b2d1871bdc..d5790f8ddaaf31152e8b787df3c2583073ab09d9 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/SubDataAttribute.java
@@ -30,6 +30,7 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  * <ul>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getConstructedAttribute <em>Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getSubDataAttribute()
@@ -115,4 +116,59 @@ public interface SubDataAttribute extends DocumentedClass, AgPresenceCondition,
      */
     void setConstructedAttribute( ConstructedAttribute value );
 
+    /**
+     * 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#getReferredBySubDataAttribute <em>Referred By Sub Data Attribute</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#getSubDataAttribute_RefersToPresenceCondition()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataAttribute
+     * @model opposite="referredBySubDataAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    PresenceCondition getRefersToPresenceCondition();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute#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.SubDataAttribute#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.SubDataAttribute#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();
+
 } // SubDataAttribute
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 7925f276b3b29bded9d83f4429df6a4837728334..553906bd2dde6737e3fdc3738507cf68ffe9732a 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
@@ -2898,29 +2898,27 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         if( super.buildExplicitLinks( console ) ) return true;
 
         if( isSetFc() ) {
-            setRefersToFunctionalConstraint( getCDC().getCDCs().getNS().findFunctionalConstraint( getFc(), console ));
+            setRefersToFunctionalConstraint( getCDC().getCDCs().getNS().findFunctionalConstraint( getFc(), console ) );
             if( getRefersToFunctionalConstraint() == null ) {
-                console.error( "FunctionalConstraint (abbreviation: " + getFc() + ") refers by DataAttribute (name: " + getName()
-                        + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") is unknown" );
+                console.error( "FunctionalConstraint (abbreviation: " + getFc() + ") refers by DataAttribute (name: "
+                        + getName() + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") is unknown" );
             }
             else {
-                console.info( "FunctionalConstraint (abbreviation: " + getFc() + ") refers by DataAttribute (name: " + getName()
-                        + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") found in NS (id:"
+                console.info( "FunctionalConstraint (abbreviation: " + getFc() + ") refers by DataAttribute (name: "
+                        + getName() + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") found in NS (id:"
                         + getRefersToFunctionalConstraint().getFunctionalConstraints().getNS().getId() + ")" );
             }
         }
 
         if( isSetPresCond() ) {
-            setRefersToPresenceCondition(
-                    getCDC().getCDCs().getNS().findPresenceCondition( getPresCond(), console ) );
+            setRefersToPresenceCondition( getCDC().getCDCs().getNS().findPresenceCondition( getPresCond(), console ) );
             if( getRefersToPresenceCondition() == null ) {
-                console.error(
-                        "PresenceCondition (name: " + getPresCond() + ") refers by DataAttribute (name: " + getName()
-                                + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") is unknown" );
+                console.error( "PresenceCondition (name: " + getPresCond() + ") refers by DataAttribute (name: "
+                        + getName() + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") is unknown" );
             }
             else {
-                console.info( "PresenceCondition (name: " + getPresCond() + ") refers by DataAttribute (name: " + getName()
-                        + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") found in NS (id:"
+                console.info( "PresenceCondition (name: " + getPresCond() + ") refers by DataAttribute (name: "
+                        + getName() + ") in NS (id:" + getCDC().getCDCs().getNS().getId() + ") found in NS (id:"
                         + getRefersToPresenceCondition().getPresenceConditions().getNS().getId() + ")" );
             }
         }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java
index 4ba0bc48cd798b9de8ef60aad7c8f5ce4672b132..d4650b02debce0c1fd5b95f0731ad44590eb1bdf 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java
@@ -23,6 +23,7 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
+import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
 
 import java.util.Collection;
 
@@ -36,6 +37,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;
 
@@ -51,6 +53,8 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getInheritedFrom <em>Inherited From</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getEnumerations <em>Enumerations</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getRefersToBaseEnumeration <em>Refers To Base Enumeration</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.EnumerationImpl#getReferredByEnumerationAsBase <em>Referred By Enumeration As Base</em>}</li>
  * </ul>
  *
  * @generated
@@ -124,6 +128,35 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
      */
     protected boolean nameESet;
 
+    /**
+     * The cached value of the '{@link #getRefersToBaseEnumeration() <em>Refers To Base Enumeration</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToBaseEnumeration()
+     * @generated
+     * @ordered
+     */
+    protected Enumeration refersToBaseEnumeration;
+
+    /**
+     * This is true if the Refers To Base Enumeration reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToBaseEnumerationESet;
+
+    /**
+     * The cached value of the '{@link #getReferredByEnumerationAsBase() <em>Referred By Enumeration As Base</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredByEnumerationAsBase()
+     * @generated
+     * @ordered
+     */
+    protected EList< Enumeration > referredByEnumerationAsBase;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -321,6 +354,157 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
                 NsdPackage.ENUMERATION__ENUMERATIONS, newEnumerations, newEnumerations ) );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public Enumeration getRefersToBaseEnumeration() {
+        return refersToBaseEnumeration;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToBaseEnumeration( Enumeration newRefersToBaseEnumeration,
+            NotificationChain msgs ) {
+        Enumeration oldRefersToBaseEnumeration = refersToBaseEnumeration;
+        refersToBaseEnumeration = newRefersToBaseEnumeration;
+        boolean oldRefersToBaseEnumerationESet = refersToBaseEnumerationESet;
+        refersToBaseEnumerationESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION, oldRefersToBaseEnumeration,
+                    newRefersToBaseEnumeration, !oldRefersToBaseEnumerationESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToBaseEnumeration( Enumeration newRefersToBaseEnumeration ) {
+        if( newRefersToBaseEnumeration != refersToBaseEnumeration ) {
+            NotificationChain msgs = null;
+            if( refersToBaseEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToBaseEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE, Enumeration.class, msgs );
+            if( newRefersToBaseEnumeration != null )
+                msgs = ( ( InternalEObject ) newRefersToBaseEnumeration ).eInverseAdd( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE, Enumeration.class, msgs );
+            msgs = basicSetRefersToBaseEnumeration( newRefersToBaseEnumeration, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToBaseEnumerationESet = refersToBaseEnumerationESet;
+            refersToBaseEnumerationESet = true;
+            if( eNotificationRequired() ) eNotify(
+                    new ENotificationImpl( this, Notification.SET, NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION,
+                            newRefersToBaseEnumeration, newRefersToBaseEnumeration, !oldRefersToBaseEnumerationESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToBaseEnumeration( NotificationChain msgs ) {
+        Enumeration oldRefersToBaseEnumeration = refersToBaseEnumeration;
+        refersToBaseEnumeration = null;
+        boolean oldRefersToBaseEnumerationESet = refersToBaseEnumerationESet;
+        refersToBaseEnumerationESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION, oldRefersToBaseEnumeration, null,
+                    oldRefersToBaseEnumerationESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToBaseEnumeration() {
+        if( refersToBaseEnumeration != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToBaseEnumeration ).eInverseRemove( this,
+                    NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE, Enumeration.class, msgs );
+            msgs = basicUnsetRefersToBaseEnumeration( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToBaseEnumerationESet = refersToBaseEnumerationESet;
+            refersToBaseEnumerationESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION, null, null, oldRefersToBaseEnumerationESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToBaseEnumeration() {
+        return refersToBaseEnumerationESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EList< Enumeration > getReferredByEnumerationAsBase() {
+        if( referredByEnumerationAsBase == null ) {
+            referredByEnumerationAsBase = new EObjectWithInverseEList.Unsettable< Enumeration >( Enumeration.class,
+                    this, NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE,
+                    NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION );
+        }
+        return referredByEnumerationAsBase;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredByEnumerationAsBase() {
+        if( referredByEnumerationAsBase != null )
+            ( ( InternalEList.Unsettable< ? > ) referredByEnumerationAsBase ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredByEnumerationAsBase() {
+        return referredByEnumerationAsBase != null
+                && ( ( InternalEList.Unsettable< ? > ) referredByEnumerationAsBase ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -336,6 +520,14 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
         case NsdPackage.ENUMERATION__ENUMERATIONS:
             if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
             return basicSetEnumerations( ( Enumerations ) otherEnd, msgs );
+        case NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION:
+            if( refersToBaseEnumeration != null )
+                msgs = ( ( InternalEObject ) refersToBaseEnumeration ).eInverseRemove( this,
+                        NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE, Enumeration.class, msgs );
+            return basicSetRefersToBaseEnumeration( ( Enumeration ) otherEnd, msgs );
+        case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByEnumerationAsBase() )
+                    .basicAdd( otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -352,6 +544,10 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
             return ( ( InternalEList< ? > ) getLiteral() ).basicRemove( otherEnd, msgs );
         case NsdPackage.ENUMERATION__ENUMERATIONS:
             return basicSetEnumerations( null, msgs );
+        case NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION:
+            return basicUnsetRefersToBaseEnumeration( msgs );
+        case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
+            return ( ( InternalEList< ? > ) getReferredByEnumerationAsBase() ).basicRemove( otherEnd, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -387,6 +583,10 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
             return getName();
         case NsdPackage.ENUMERATION__ENUMERATIONS:
             return getEnumerations();
+        case NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION:
+            return getRefersToBaseEnumeration();
+        case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
+            return getReferredByEnumerationAsBase();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -413,6 +613,13 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
         case NsdPackage.ENUMERATION__ENUMERATIONS:
             setEnumerations( ( Enumerations ) newValue );
             return;
+        case NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION:
+            setRefersToBaseEnumeration( ( Enumeration ) newValue );
+            return;
+        case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
+            getReferredByEnumerationAsBase().clear();
+            getReferredByEnumerationAsBase().addAll( ( Collection< ? extends Enumeration > ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -437,6 +644,12 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
         case NsdPackage.ENUMERATION__ENUMERATIONS:
             setEnumerations( ( Enumerations ) null );
             return;
+        case NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION:
+            unsetRefersToBaseEnumeration();
+            return;
+        case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
+            unsetReferredByEnumerationAsBase();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -457,6 +670,10 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
             return isSetName();
         case NsdPackage.ENUMERATION__ENUMERATIONS:
             return getEnumerations() != null;
+        case NsdPackage.ENUMERATION__REFERS_TO_BASE_ENUMERATION:
+            return isSetRefersToBaseEnumeration();
+        case NsdPackage.ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE:
+            return isSetReferredByEnumerationAsBase();
         }
         return super.eIsSet( featureID );
     }
@@ -485,4 +702,27 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
         return result.toString();
     }
 
+    /* Implicit link
+     *   Enumeration.inheritedFrom          -> Enumeration.name
+     */
+    @Override
+    public boolean buildExplicitLinks( IRiseClipseConsole console ) {
+        if( super.buildExplicitLinks( console ) ) return true;
+
+        if( isSetInheritedFrom() ) {
+            setRefersToBaseEnumeration( getEnumerations().getNS().findEnumeration( getInheritedFrom(), console ) );
+            if( getRefersToBaseEnumeration() == null ) {
+                console.error( "Enumeration (name: " + getInheritedFrom() + ") refers by Enumeration (name: "
+                        + getName() + ") in NS (id:" + getEnumerations().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "Enumeration (name: " + getInheritedFrom() + ") refers by Enumeration (name: " + getName()
+                        + ") in NS (id:" + getEnumerations().getNS().getId() + ") found in NS (id:"
+                        + getRefersToBaseEnumeration().getEnumerations().getNS().getId() + ")" );
+            }
+        }
+
+        return false;
+    }
+
 } //EnumerationImpl
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 e8fa279425db7affa5bd8dd8f080de1d3d433325..04b559e714af4d6f9f2a4866af0e609662eab9ac 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
@@ -29,6 +29,7 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints;
@@ -1712,7 +1713,8 @@ public class NSImpl extends CopyrightedImpl implements NS {
             IRiseClipseConsole console ) {
         if( isSetFunctionalConstraints() ) {
             FunctionalConstraint found = getFunctionalConstraints().getFunctionalConstraint().stream()
-                    .filter( fc -> fc.getAbbreviation().equals( functionalConstraintAbbreviation ) ).findAny().orElse( null );
+                    .filter( fc -> fc.getAbbreviation().equals( functionalConstraintAbbreviation ) ).findAny()
+                    .orElse( null );
             if( found != null ) return found;
         }
 
@@ -1724,6 +1726,27 @@ public class NSImpl extends CopyrightedImpl implements NS {
         return null;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public Enumeration findEnumeration( String enumerationName, IRiseClipseConsole console ) {
+        if( isSetEnumerations() ) {
+            Enumeration found = getEnumerations().getEnumeration().stream()
+                    .filter( en -> en.getName().equals( enumerationName ) ).findAny().orElse( null );
+            if( found != null ) return found;
+        }
+
+        if( isSetDependsOn() ) {
+            getDependsOn().buildExplicitLinks( console );
+            return getDependsOn().getRefersToNS().findEnumeration( enumerationName, console );
+        }
+
+        return null;
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2557,6 +2580,8 @@ public class NSImpl extends CopyrightedImpl implements NS {
             return findPresenceCondition( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
         case NsdPackage.NS___FIND_FUNCTIONAL_CONSTRAINT__STRING_IRISECLIPSECONSOLE:
             return findFunctionalConstraint( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
+        case NsdPackage.NS___FIND_ENUMERATION__STRING_IRISECLIPSECONSOLE:
+            return findEnumeration( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
         }
         return super.eInvoke( operationID, arguments );
     }
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 196eac7a66cdc704f16383000220f9519004758b..402cf9cf9e8ce5ac3aaefc2541db7f28d0926e34 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
@@ -1953,6 +1953,26 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) enumerationEClass.getEStructuralFeatures().get( 3 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getEnumeration_RefersToBaseEnumeration() {
+        return ( EReference ) enumerationEClass.getEStructuralFeatures().get( 4 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getEnumeration_ReferredByEnumerationAsBase() {
+        return ( EReference ) enumerationEClass.getEStructuralFeatures().get( 5 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2453,6 +2473,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return nsEClass.getEOperations().get( 2 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EOperation getNS__FindEnumeration__String_IRiseClipseConsole() {
+        return nsEClass.getEOperations().get( 3 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2583,6 +2613,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) presenceConditionEClass.getEStructuralFeatures().get( 8 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getPresenceCondition_ReferredBySubDataAttribute() {
+        return ( EReference ) presenceConditionEClass.getEStructuralFeatures().get( 9 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -3003,6 +3043,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) subDataAttributeEClass.getEStructuralFeatures().get( 1 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getSubDataAttribute_RefersToPresenceCondition() {
+        return ( EReference ) subDataAttributeEClass.getEStructuralFeatures().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -3841,6 +3891,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( enumerationEClass, ENUMERATION__INHERITED_FROM );
         createEAttribute( enumerationEClass, ENUMERATION__NAME );
         createEReference( enumerationEClass, ENUMERATION__ENUMERATIONS );
+        createEReference( enumerationEClass, ENUMERATION__REFERS_TO_BASE_ENUMERATION );
+        createEReference( enumerationEClass, ENUMERATION__REFERRED_BY_ENUMERATION_AS_BASE );
 
         enumerationsEClass = createEClass( ENUMERATIONS );
         createEReference( enumerationsEClass, ENUMERATIONS__ENUMERATION );
@@ -3900,6 +3952,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEOperation( nsEClass, NS___FIND_CDC__STRING_IRISECLIPSECONSOLE );
         createEOperation( nsEClass, NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE );
         createEOperation( nsEClass, NS___FIND_FUNCTIONAL_CONSTRAINT__STRING_IRISECLIPSECONSOLE );
+        createEOperation( nsEClass, NS___FIND_ENUMERATION__STRING_IRISECLIPSECONSOLE );
 
         nsDocEClass = createEClass( NS_DOC );
         createEReference( nsDocEClass, NS_DOC__DOC );
@@ -3915,6 +3968,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS );
         createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT );
         createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE );
+        createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE );
 
         presenceConditionsEClass = createEClass( PRESENCE_CONDITIONS );
         createEReference( presenceConditionsEClass, PRESENCE_CONDITIONS__PRESENCE_CONDITION );
@@ -3970,6 +4024,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         subDataAttributeEClass = createEClass( SUB_DATA_ATTRIBUTE );
         createEAttribute( subDataAttributeEClass, SUB_DATA_ATTRIBUTE__NAME );
         createEReference( subDataAttributeEClass, SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE );
+        createEReference( subDataAttributeEClass, SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION );
 
         subDataObjectEClass = createEClass( SUB_DATA_OBJECT );
         createEAttribute( subDataObjectEClass, SUB_DATA_OBJECT__NAME );
@@ -4543,6 +4598,14 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         initEReference( getEnumeration_Enumerations(), this.getEnumerations(), this.getEnumerations_Enumeration(),
                 "enumerations", null, 0, 1, Enumeration.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
                 !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getEnumeration_RefersToBaseEnumeration(), this.getEnumeration(),
+                this.getEnumeration_ReferredByEnumerationAsBase(), "refersToBaseEnumeration", null, 0, 1,
+                Enumeration.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getEnumeration_ReferredByEnumerationAsBase(), this.getEnumeration(),
+                this.getEnumeration_RefersToBaseEnumeration(), "referredByEnumerationAsBase", null, 0, -1,
+                Enumeration.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( enumerationsEClass, Enumerations.class, "Enumerations", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
@@ -4700,6 +4763,11 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         addEParameter( op, ecorePackage.getEString(), "functionalConstraintAbbreviation", 0, 1, IS_UNIQUE, IS_ORDERED );
         addEParameter( op, this.getIRiseClipseConsole(), "console", 0, 1, IS_UNIQUE, IS_ORDERED );
 
+        op = initEOperation( getNS__FindEnumeration__String_IRiseClipseConsole(), this.getEnumeration(),
+                "findEnumeration", 0, 1, IS_UNIQUE, IS_ORDERED );
+        addEParameter( op, ecorePackage.getEString(), "enumerationName", 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,
@@ -4742,6 +4810,10 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 this.getDataAttribute_RefersToPresenceCondition(), "referredByDataAttribute", 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_ReferredBySubDataAttribute(), this.getSubDataAttribute(),
+                this.getSubDataAttribute_RefersToPresenceCondition(), "referredBySubDataAttribute", 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 );
@@ -4882,6 +4954,10 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 this.getConstructedAttribute_SubDataAttribute(), "constructedAttribute", null, 0, 1,
                 SubDataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
                 !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getSubDataAttribute_RefersToPresenceCondition(), this.getPresenceCondition(),
+                this.getPresenceCondition_ReferredBySubDataAttribute(), "refersToPresenceCondition", null, 0, 1,
+                SubDataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( subDataObjectEClass, SubDataObject.class, "SubDataObject", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
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 5e6d9ff63b06ccfc6419e27c72c942c7cc683722..c53468b03c6cba670f065fc07dbbb628476203b8 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
@@ -25,6 +25,7 @@ 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.SubDataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataObject;
 import java.util.Collection;
 import org.eclipse.emf.common.notify.Notification;
@@ -56,6 +57,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <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>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getReferredBySubDataAttribute <em>Referred By Sub Data Attribute</em>}</li>
  * </ul>
  *
  * @generated
@@ -217,6 +219,16 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
      */
     protected EList< DataAttribute > referredByDataAttribute;
 
+    /**
+     * The cached value of the '{@link #getReferredBySubDataAttribute() <em>Referred By Sub Data Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredBySubDataAttribute()
+     * @generated
+     * @ordered
+     */
+    protected EList< SubDataAttribute > referredBySubDataAttribute;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -625,6 +637,43 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
         return referredByDataAttribute != null && ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).isSet();
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EList< SubDataAttribute > getReferredBySubDataAttribute() {
+        if( referredBySubDataAttribute == null ) {
+            referredBySubDataAttribute = new EObjectWithInverseEList.Unsettable< SubDataAttribute >(
+                    SubDataAttribute.class, this, NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE,
+                    NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION );
+        }
+        return referredBySubDataAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredBySubDataAttribute() {
+        if( referredBySubDataAttribute != null )
+            ( ( InternalEList.Unsettable< ? > ) referredBySubDataAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredBySubDataAttribute() {
+        return referredBySubDataAttribute != null
+                && ( ( InternalEList.Unsettable< ? > ) referredBySubDataAttribute ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -649,6 +698,9 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
         case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
             return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataAttribute() )
                     .basicAdd( otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredBySubDataAttribute() )
+                    .basicAdd( otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -672,6 +724,8 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
             return ( ( InternalEList< ? > ) getReferredBySubDataObject() ).basicRemove( otherEnd, msgs );
         case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
             return ( ( InternalEList< ? > ) getReferredByDataAttribute() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE:
+            return ( ( InternalEList< ? > ) getReferredBySubDataAttribute() ).basicRemove( otherEnd, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -717,6 +771,8 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
             return getReferredBySubDataObject();
         case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
             return getReferredByDataAttribute();
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE:
+            return getReferredBySubDataAttribute();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -761,6 +817,10 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
             getReferredByDataAttribute().clear();
             getReferredByDataAttribute().addAll( ( Collection< ? extends DataAttribute > ) newValue );
             return;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE:
+            getReferredBySubDataAttribute().clear();
+            getReferredBySubDataAttribute().addAll( ( Collection< ? extends SubDataAttribute > ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -800,6 +860,9 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
         case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
             unsetReferredByDataAttribute();
             return;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE:
+            unsetReferredBySubDataAttribute();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -830,6 +893,8 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
             return isSetReferredBySubDataObject();
         case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
             return isSetReferredByDataAttribute();
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE:
+            return isSetReferredBySubDataAttribute();
         }
         return super.eIsSet( featureID );
     }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java
index 27271bc1785b3c0bcaa65c175809d7dc02a77328..30147ad755c4a04df3e853c6a03fcdd74125752a 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java
@@ -26,7 +26,9 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgPresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdFactory;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.SubDataAttribute;
+import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
 
 import java.math.BigDecimal;
 
@@ -63,6 +65,7 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getMinValue <em>Min Value</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getName <em>Name</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getConstructedAttribute <em>Constructed Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.SubDataAttributeImpl#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}</li>
  * </ul>
  *
  * @generated
@@ -446,6 +449,25 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
      */
     protected boolean nameESet;
 
+    /**
+     * 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;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1171,6 +1193,121 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
                         newConstructedAttribute, newConstructedAttribute ) );
     }
 
+    /**
+     * <!-- 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_ATTRIBUTE__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_ATTRIBUTE, PresenceCondition.class, msgs );
+            if( newRefersToPresenceCondition != null )
+                msgs = ( ( InternalEObject ) newRefersToPresenceCondition ).eInverseAdd( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE, 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_ATTRIBUTE__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_ATTRIBUTE__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_ATTRIBUTE, 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_ATTRIBUTE__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 -->
@@ -1182,6 +1319,11 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
             if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
             return basicSetConstructedAttribute( ( ConstructedAttribute ) otherEnd, msgs );
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            if( refersToPresenceCondition != null )
+                msgs = ( ( InternalEObject ) refersToPresenceCondition ).eInverseRemove( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_ATTRIBUTE, PresenceCondition.class, msgs );
+            return basicSetRefersToPresenceCondition( ( PresenceCondition ) otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -1196,6 +1338,8 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         switch( featureID ) {
         case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
             return basicSetConstructedAttribute( null, msgs );
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            return basicUnsetRefersToPresenceCondition( msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -1251,6 +1395,8 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
             return getName();
         case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
             return getConstructedAttribute();
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            return getRefersToPresenceCondition();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -1305,6 +1451,9 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
             setConstructedAttribute( ( ConstructedAttribute ) newValue );
             return;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            setRefersToPresenceCondition( ( PresenceCondition ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -1359,6 +1508,9 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
             setConstructedAttribute( ( ConstructedAttribute ) null );
             return;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            unsetRefersToPresenceCondition();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -1399,6 +1551,8 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
             return isSetName();
         case NsdPackage.SUB_DATA_ATTRIBUTE__CONSTRUCTED_ATTRIBUTE:
             return getConstructedAttribute() != null;
+        case NsdPackage.SUB_DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            return isSetRefersToPresenceCondition();
         }
         return super.eIsSet( featureID );
     }
@@ -1598,4 +1752,32 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         return result.toString();
     }
 
+    /* Implicit link
+     *   SubDataAttribute.presCond          -> PresenceCondition.name
+     *   SubDataAttribute.sizeAttribute     -> DataAttribute.name                   ? Which DataAttribute ?
+     *   SubDataAttribute.maxIndexAttribute -> DataAttribute.name                   ? Which DataAttribute ?
+     */
+    @Override
+    public boolean buildExplicitLinks( IRiseClipseConsole console ) {
+        if( super.buildExplicitLinks( console ) ) return true;
+
+        if( isSetPresCond() ) {
+            setRefersToPresenceCondition( getConstructedAttribute().getConstructedAttributes().getNS()
+                    .findPresenceCondition( getPresCond(), console ) );
+            if( getRefersToPresenceCondition() == null ) {
+                console.error( "PresenceCondition (name: " + getPresCond() + ") refers by SubDataAttribute (name: "
+                        + getName() + ") in NS (id:"
+                        + getConstructedAttribute().getConstructedAttributes().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "PresenceCondition (name: " + getPresCond() + ") refers by SubDataAttribute (name: "
+                        + getName() + ") in NS (id:"
+                        + getConstructedAttribute().getConstructedAttributes().getNS().getId() + ") found in NS (id:"
+                        + getRefersToPresenceCondition().getPresenceConditions().getNS().getId() + ")" );
+            }
+        }
+
+        return false;
+    }
+
 } //SubDataAttributeImpl
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 3e89911bd3e1a4fa5c6c5812dae89a6bc3c4cb16..70e3c423d6c15eab740038909340434e53d44673 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
@@ -154,21 +154,22 @@ public class NsdResourceSetImpl extends ResourceSetImpl {
      *   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
-     *   DataAttribute.maxIndexAttribute    -> DataAttribute.name
-     *   ServiceParameter.name              -> DataAttribute.name                   ?
-     *   SubDataAttribute.presCond          -> PresenceCondition.name
-     *   SubDataAttribute.sizeAttribute     -> DataAttribute.name
-     *   SubDataAttribute.maxIndexAttribute -> DataAttribute.name
-     *   Enumeration.inheritedFrom          -> Enumeration.name
-     *   ServiceCDC.cdc                     -> CDC.name                             ?
-     *   ServiceDataAttribute.fc            -> FunctionalConstraint.abbreviation
-     *   ServiceDataAttribute.presCond      -> PresenceCondition.name
-     *   AppliesTo.id                       -> NS.id
-     *   ServiceTypeRealization.fc          -> FunctionalConstraint.abbreviation    ? ServiceTypeRealization is not a name of a type but a name of a refence
-     *   ServiceTypeRealization.presCond    -> PresenceCondition.name               ? idem
+     *   DataAttribute.fc                   -> FunctionalConstraint.abbreviation    DONE
+     *   DataAttribute.presCond             -> PresenceCondition.name               DONE
+     *   DataAttribute.sizeAttribute        -> DataAttribute.name                   DONE
+     *   DataAttribute.maxIndexAttribute    -> DataAttribute.name                   DONE
+     *   ServiceParameter.name              -> DataAttribute.name                   ? Name of the data attribute but may be not name of a DataAttribute ?
+     *   SubDataAttribute.presCond          -> PresenceCondition.name               DONE
+     *   SubDataAttribute.sizeAttribute     -> DataAttribute.name                   ? Which DataAttribute ?
+     *   SubDataAttribute.maxIndexAttribute -> DataAttribute.name                   ? Which DataAttribute ?
+     *   Enumeration.inheritedFrom          -> Enumeration.name                     DONE
+     *   ServiceCDC.cdc                     -> CDC.name                             ? not sure and in ServiceNS file
+     *   ServiceCDC.ServiceDataAttribute    -> DataAttribute.name                   ? not sure and in ServiceNS file
+     *   ServiceDataAttribute.fc            -> FunctionalConstraint.abbreviation    ? in ServiceNS file
+     *   ServiceDataAttribute.presCond      -> PresenceCondition.name               ? in ServiceNS file
+     *   AppliesTo.id                       -> NS.id                                ? in ServiceNS file
+     *   ServiceTypeRealization.fc          -> FunctionalConstraint.abbreviation    ? ServiceTypeRealization is not a name of a type but a name of a reference
+     *   ServiceTypeRealization.presCond    -> PresenceCondition.name               ? ServiceTypeRealization is not a name of a type but a name of a reference
      */
     public void buildExplicitLinks( IRiseClipseConsole console ) {
         for( Resource resource : getResources() ) {