diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
index 9b7ca8619b305153a799dece53bc117a1d1735ad..f4846e7a3c18b87e44852ed238705af1223f2c30 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/plugin.properties
@@ -498,3 +498,11 @@ _UI_SubDataObject_refersToCDC_feature = Refers To CDC
 _UI_SubDataObject_refersToPresenceCondition_feature = Refers To Presence Condition
 _UI_SubDataObject_refersToSizeAttribute_feature = Refers To Size Attribute
 _UI_SubDataObject_refersToMaxIndexAttribute_feature = Refers To Max Index Attribute
+_UI_DataAttribute_refersToFunctionalConstraint_feature = Refers To Functional Constraint
+_UI_DataAttribute_refersToPresenceCondition_feature = Refers To Presence Condition
+_UI_DataAttribute_refersToSizeAttribute_feature = Refers To Size Attribute
+_UI_DataAttribute_refersToMaxIndexAttribute_feature = Refers To Max Index Attribute
+_UI_DataAttribute_referredByDataAttributeAsSizeAttribute_feature = Referred By Data Attribute As Size Attribute
+_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
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataAttributeItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataAttributeItemProvider.java
index f1cf3c8c1e9d5cab2596fe69b19e33441919128d..c9e1434b4025ad2fcd54244047a982f4ac4631ea 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataAttributeItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/DataAttributeItemProvider.java
@@ -80,6 +80,12 @@ public class DataAttributeItemProvider extends DocumentedClassItemProvider {
             addNamePropertyDescriptor( object );
             addReferredBySubDataObjectAsSizeAttributePropertyDescriptor( object );
             addReferredBySubDataObjectAsMaxIndexAttributePropertyDescriptor( object );
+            addRefersToFunctionalConstraintPropertyDescriptor( object );
+            addRefersToPresenceConditionPropertyDescriptor( object );
+            addRefersToSizeAttributePropertyDescriptor( object );
+            addRefersToMaxIndexAttributePropertyDescriptor( object );
+            addReferredByDataAttributeAsSizeAttributePropertyDescriptor( object );
+            addReferredByDataAttributeAsMaxIndexAttributePropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -277,6 +283,102 @@ public class DataAttributeItemProvider extends DocumentedClassItemProvider {
                 true, null, null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Refers To Functional Constraint feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToFunctionalConstraintPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(), getString( "_UI_DataAttribute_refersToFunctionalConstraint_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_DataAttribute_refersToFunctionalConstraint_feature", "_UI_DataAttribute_type" ),
+                        NsdPackage.Literals.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT, true, false, true, null,
+                        null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Presence Condition feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToPresenceConditionPropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_DataAttribute_refersToPresenceCondition_feature" ),
+                getString( "_UI_PropertyDescriptor_description", "_UI_DataAttribute_refersToPresenceCondition_feature",
+                        "_UI_DataAttribute_type" ),
+                NsdPackage.Literals.DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION, true, false, true, null, null,
+                null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Size Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToSizeAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_DataAttribute_refersToSizeAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description", "_UI_DataAttribute_refersToSizeAttribute_feature",
+                        "_UI_DataAttribute_type" ),
+                NsdPackage.Literals.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE, true, false, true, null, null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Refers To Max Index Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addRefersToMaxIndexAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_DataAttribute_refersToMaxIndexAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description", "_UI_DataAttribute_refersToMaxIndexAttribute_feature",
+                        "_UI_DataAttribute_type" ),
+                NsdPackage.Literals.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE, true, false, true, null, null,
+                null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Referred By Data Attribute As Size Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredByDataAttributeAsSizeAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_DataAttribute_referredByDataAttributeAsSizeAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_DataAttribute_referredByDataAttributeAsSizeAttribute_feature", "_UI_DataAttribute_type" ),
+                NsdPackage.Literals.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE, true, false, true,
+                null, null, null ) );
+    }
+
+    /**
+     * This adds a property descriptor for the Referred By Data Attribute As Max Index Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredByDataAttributeAsMaxIndexAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_DataAttribute_referredByDataAttributeAsMaxIndexAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_DataAttribute_referredByDataAttributeAsMaxIndexAttribute_feature",
+                        "_UI_DataAttribute_type" ),
+                NsdPackage.Literals.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE, true, false,
+                true, null, null, null ) );
+    }
+
     /**
      * This adds a property descriptor for the Pres Cond feature.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/FunctionalConstraintItemProvider.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/FunctionalConstraintItemProvider.java
index cfdddcb5f00a04fc65a04e5361f25454f1b939a8..3ac839604c7d37dd1877627ec82e9b927f8540c6 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/FunctionalConstraintItemProvider.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd.edit/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/provider/FunctionalConstraintItemProvider.java
@@ -66,6 +66,7 @@ public class FunctionalConstraintItemProvider extends NsdObjectItemProvider {
             addAbbreviationPropertyDescriptor( object );
             addDescIDPropertyDescriptor( object );
             addTitleIDPropertyDescriptor( object );
+            addReferredByDataAttributePropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -118,6 +119,22 @@ public class FunctionalConstraintItemProvider extends NsdObjectItemProvider {
                         ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Referred By Data Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredByDataAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add( createItemPropertyDescriptor(
+                ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(), getResourceLocator(),
+                getString( "_UI_FunctionalConstraint_referredByDataAttribute_feature" ),
+                getString( "_UI_PropertyDescriptor_description",
+                        "_UI_FunctionalConstraint_referredByDataAttribute_feature", "_UI_FunctionalConstraint_type" ),
+                NsdPackage.Literals.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE, 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 83eaa5803c8499df86b68fd4751fb774237f137a..b9cdd96c46b039510d961f7e8bff024eeb455752 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
@@ -67,6 +67,7 @@ public class PresenceConditionItemProvider extends NsdObjectItemProvider {
             addReferredByDataObjectPropertyDescriptor( object );
             addReferredByDataObjectForDerivedStatisticsPropertyDescriptor( object );
             addReferredBySubDataObjectPropertyDescriptor( object );
+            addReferredByDataAttributePropertyDescriptor( object );
         }
         return itemPropertyDescriptors;
     }
@@ -184,6 +185,22 @@ public class PresenceConditionItemProvider extends NsdObjectItemProvider {
                         null, null ) );
     }
 
+    /**
+     * This adds a property descriptor for the Referred By Data Attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    protected void addReferredByDataAttributePropertyDescriptor( Object object ) {
+        itemPropertyDescriptors.add(
+                createItemPropertyDescriptor( ( ( ComposeableAdapterFactory ) adapterFactory ).getRootAdapterFactory(),
+                        getResourceLocator(), getString( "_UI_PresenceCondition_referredByDataAttribute_feature" ),
+                        getString( "_UI_PropertyDescriptor_description",
+                                "_UI_PresenceCondition_referredByDataAttribute_feature", "_UI_PresenceCondition_type" ),
+                        NsdPackage.Literals.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE, true, false, true, null,
+                        null, null ) );
+    }
+
     /**
      * This returns PresenceCondition.gif.
      * <!-- begin-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
index 8709e24d592f6e377c45661aa4b108c9f7ce0695..31e45673f0a7df36e8450791fa6fe53a3093d0e8 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
@@ -635,6 +635,24 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="referredBySubDataObjectAsMaxIndexAttribute"
         ordered="false" upperBound="-1" eType="#//SubDataObject" transient="true"
         unsettable="true" resolveProxies="false" eOpposite="#//SubDataObject/refersToMaxIndexAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToFunctionalConstraint"
+        ordered="false" eType="#//FunctionalConstraint" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//FunctionalConstraint/referredByDataAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToPresenceCondition"
+        ordered="false" eType="#//PresenceCondition" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//PresenceCondition/referredByDataAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToSizeAttribute"
+        ordered="false" eType="#//DataAttribute" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//DataAttribute/referredByDataAttributeAsSizeAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="refersToMaxIndexAttribute"
+        ordered="false" eType="#//DataAttribute" transient="true" unsettable="true"
+        resolveProxies="false" eOpposite="#//DataAttribute/referredByDataAttributeAsMaxIndexAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataAttributeAsSizeAttribute"
+        ordered="false" upperBound="-1" eType="#//DataAttribute" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//DataAttribute/refersToSizeAttribute"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataAttributeAsMaxIndexAttribute"
+        ordered="false" upperBound="-1" eType="#//DataAttribute" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//DataAttribute/refersToMaxIndexAttribute"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DataObject" eSuperTypes="#//DocumentedClass #//AgPresenceCondition #//AgPresenceConditionDerivedStatistics #//AgUnderlyingType">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -871,6 +889,9 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="functionalConstraints"
         ordered="false" eType="#//FunctionalConstraints" transient="true" unsettable="true"
         resolveProxies="false" eOpposite="#//FunctionalConstraints/functionalConstraint"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataAttribute"
+        ordered="false" upperBound="-1" eType="#//DataAttribute" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//DataAttribute/refersToFunctionalConstraint"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="FunctionalConstraints" eSuperTypes="#//NsdObject">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -1047,6 +1068,10 @@
       <eParameters name="presenceConditionName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
       <eParameters name="console" eType="#//IRiseClipseConsole"/>
     </eOperations>
+    <eOperations name="findFunctionalConstraint" eType="#//FunctionalConstraint">
+      <eParameters name="functionalConstraintAbbreviation" 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">
@@ -1207,6 +1232,9 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="referredBySubDataObject"
         ordered="false" upperBound="-1" eType="#//SubDataObject" transient="true"
         unsettable="true" resolveProxies="false" eOpposite="#//SubDataObject/refersToPresenceCondition"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredByDataAttribute"
+        ordered="false" upperBound="-1" eType="#//DataAttribute" transient="true"
+        unsettable="true" resolveProxies="false" eOpposite="#//DataAttribute/refersToPresenceCondition"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="PresenceConditions" eSuperTypes="#//NsdObject">
     <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 0181ec07015d16fad7a1ebf1283e794dbbcdfc8b..7987efc48fb5a64a8b5f5598165d380cf2012382 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
@@ -219,6 +219,12 @@
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/cDC"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/referredBySubDataObjectAsSizeAttribute"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/referredBySubDataObjectAsMaxIndexAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/refersToFunctionalConstraint"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/refersToPresenceCondition"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/refersToSizeAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/refersToMaxIndexAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/referredByDataAttributeAsSizeAttribute"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//DataAttribute/referredByDataAttributeAsMaxIndexAttribute"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//DataObject">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//DataObject/name"/>
@@ -261,6 +267,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//FunctionalConstraint/descID"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute nsd.ecore#//FunctionalConstraint/titleID"/>
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference nsd.ecore#//FunctionalConstraint/functionalConstraints"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//FunctionalConstraint/referredByDataAttribute"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//FunctionalConstraints">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//FunctionalConstraints/functionalConstraint"/>
@@ -313,6 +320,10 @@
         <genParameters ecoreParameter="nsd.ecore#//NS/findPresenceCondition/presenceConditionName"/>
         <genParameters ecoreParameter="nsd.ecore#//NS/findPresenceCondition/console"/>
       </genOperations>
+      <genOperations ecoreOperation="nsd.ecore#//NS/findFunctionalConstraint">
+        <genParameters ecoreParameter="nsd.ecore#//NS/findFunctionalConstraint/functionalConstraintAbbreviation"/>
+        <genParameters ecoreParameter="nsd.ecore#//NS/findFunctionalConstraint/console"/>
+      </genOperations>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//NSDoc">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//NSDoc/doc"/>
@@ -327,6 +338,7 @@
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/referredByDataObject"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/referredByDataObjectForDerivedStatistics"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/referredBySubDataObject"/>
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceCondition/referredByDataAttribute"/>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//PresenceConditions">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//PresenceConditions/presenceCondition"/>
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java
index 6ac5ff1000b20e90f3602fc3eb8341c44880987a..811a3256217b2e719e3d2657e6c0a63385461642 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/DataAttribute.java
@@ -35,6 +35,12 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getCDC <em>CDC</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsSizeAttribute <em>Referred By Sub Data Object As Size Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredBySubDataObjectAsMaxIndexAttribute <em>Referred By Sub Data Object As Max Index Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToFunctionalConstraint <em>Refers To Functional Constraint</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsSizeAttribute <em>Referred By Data Attribute As Size Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsMaxIndexAttribute <em>Referred By Data Attribute As Max Index Attribute</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute()
@@ -253,4 +259,306 @@ public interface DataAttribute
      */
     boolean isSetReferredBySubDataObjectAsMaxIndexAttribute();
 
+    /**
+     * Returns the value of the '<em><b>Refers To Functional Constraint</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getReferredByDataAttribute <em>Referred By Data Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To Functional Constraint</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 Functional Constraint</em>' reference.
+     * @see #isSetRefersToFunctionalConstraint()
+     * @see #unsetRefersToFunctionalConstraint()
+     * @see #setRefersToFunctionalConstraint(FunctionalConstraint)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_RefersToFunctionalConstraint()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getReferredByDataAttribute
+     * @model opposite="referredByDataAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    FunctionalConstraint getRefersToFunctionalConstraint();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToFunctionalConstraint <em>Refers To Functional Constraint</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Functional Constraint</em>' reference.
+     * @see #isSetRefersToFunctionalConstraint()
+     * @see #unsetRefersToFunctionalConstraint()
+     * @see #getRefersToFunctionalConstraint()
+     * @generated
+     */
+    void setRefersToFunctionalConstraint( FunctionalConstraint value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToFunctionalConstraint <em>Refers To Functional Constraint</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToFunctionalConstraint()
+     * @see #getRefersToFunctionalConstraint()
+     * @see #setRefersToFunctionalConstraint(FunctionalConstraint)
+     * @generated
+     */
+    void unsetRefersToFunctionalConstraint();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToFunctionalConstraint <em>Refers To Functional Constraint</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Functional Constraint</em>' reference is set.
+     * @see #unsetRefersToFunctionalConstraint()
+     * @see #getRefersToFunctionalConstraint()
+     * @see #setRefersToFunctionalConstraint(FunctionalConstraint)
+     * @generated
+     */
+    boolean isSetRefersToFunctionalConstraint();
+
+    /**
+     * 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#getReferredByDataAttribute <em>Referred By 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#getDataAttribute_RefersToPresenceCondition()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataAttribute
+     * @model opposite="referredByDataAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    PresenceCondition getRefersToPresenceCondition();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#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.DataAttribute#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.DataAttribute#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Presence Condition</em>' reference is set.
+     * @see #unsetRefersToPresenceCondition()
+     * @see #getRefersToPresenceCondition()
+     * @see #setRefersToPresenceCondition(PresenceCondition)
+     * @generated
+     */
+    boolean isSetRefersToPresenceCondition();
+
+    /**
+     * Returns the value of the '<em><b>Refers To Size Attribute</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsSizeAttribute <em>Referred By Data Attribute As Size Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To Size Attribute</em>' reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Refers To Size Attribute</em>' reference.
+     * @see #isSetRefersToSizeAttribute()
+     * @see #unsetRefersToSizeAttribute()
+     * @see #setRefersToSizeAttribute(DataAttribute)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_RefersToSizeAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsSizeAttribute
+     * @model opposite="referredByDataAttributeAsSizeAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    DataAttribute getRefersToSizeAttribute();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Size Attribute</em>' reference.
+     * @see #isSetRefersToSizeAttribute()
+     * @see #unsetRefersToSizeAttribute()
+     * @see #getRefersToSizeAttribute()
+     * @generated
+     */
+    void setRefersToSizeAttribute( DataAttribute value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToSizeAttribute()
+     * @see #getRefersToSizeAttribute()
+     * @see #setRefersToSizeAttribute(DataAttribute)
+     * @generated
+     */
+    void unsetRefersToSizeAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Size Attribute</em>' reference is set.
+     * @see #unsetRefersToSizeAttribute()
+     * @see #getRefersToSizeAttribute()
+     * @see #setRefersToSizeAttribute(DataAttribute)
+     * @generated
+     */
+    boolean isSetRefersToSizeAttribute();
+
+    /**
+     * Returns the value of the '<em><b>Refers To Max Index Attribute</b></em>' reference.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsMaxIndexAttribute <em>Referred By Data Attribute As Max Index Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Refers To Max Index Attribute</em>' reference isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Refers To Max Index Attribute</em>' reference.
+     * @see #isSetRefersToMaxIndexAttribute()
+     * @see #unsetRefersToMaxIndexAttribute()
+     * @see #setRefersToMaxIndexAttribute(DataAttribute)
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_RefersToMaxIndexAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsMaxIndexAttribute
+     * @model opposite="referredByDataAttributeAsMaxIndexAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    DataAttribute getRefersToMaxIndexAttribute();
+
+    /**
+     * Sets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @param value the new value of the '<em>Refers To Max Index Attribute</em>' reference.
+     * @see #isSetRefersToMaxIndexAttribute()
+     * @see #unsetRefersToMaxIndexAttribute()
+     * @see #getRefersToMaxIndexAttribute()
+     * @generated
+     */
+    void setRefersToMaxIndexAttribute( DataAttribute value );
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetRefersToMaxIndexAttribute()
+     * @see #getRefersToMaxIndexAttribute()
+     * @see #setRefersToMaxIndexAttribute(DataAttribute)
+     * @generated
+     */
+    void unsetRefersToMaxIndexAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}' reference is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Refers To Max Index Attribute</em>' reference is set.
+     * @see #unsetRefersToMaxIndexAttribute()
+     * @see #getRefersToMaxIndexAttribute()
+     * @see #setRefersToMaxIndexAttribute(DataAttribute)
+     * @generated
+     */
+    boolean isSetRefersToMaxIndexAttribute();
+
+    /**
+     * Returns the value of the '<em><b>Referred By Data Attribute As Size Attribute</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Data Attribute As Size Attribute</em>' reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Referred By Data Attribute As Size Attribute</em>' reference list.
+     * @see #isSetReferredByDataAttributeAsSizeAttribute()
+     * @see #unsetReferredByDataAttributeAsSizeAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_ReferredByDataAttributeAsSizeAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToSizeAttribute
+     * @model opposite="refersToSizeAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< DataAttribute > getReferredByDataAttributeAsSizeAttribute();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsSizeAttribute <em>Referred By Data Attribute As Size Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredByDataAttributeAsSizeAttribute()
+     * @see #getReferredByDataAttributeAsSizeAttribute()
+     * @generated
+     */
+    void unsetReferredByDataAttributeAsSizeAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsSizeAttribute <em>Referred By Data Attribute As Size Attribute</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Data Attribute As Size Attribute</em>' reference list is set.
+     * @see #unsetReferredByDataAttributeAsSizeAttribute()
+     * @see #getReferredByDataAttributeAsSizeAttribute()
+     * @generated
+     */
+    boolean isSetReferredByDataAttributeAsSizeAttribute();
+
+    /**
+     * Returns the value of the '<em><b>Referred By Data Attribute As Max Index Attribute</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By Data Attribute As Max Index Attribute</em>' reference list isn't clear,
+     * there really should be more of a description here...
+     * </p>
+     * <!-- end-user-doc -->
+     * @return the value of the '<em>Referred By Data Attribute As Max Index Attribute</em>' reference list.
+     * @see #isSetReferredByDataAttributeAsMaxIndexAttribute()
+     * @see #unsetReferredByDataAttributeAsMaxIndexAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getDataAttribute_ReferredByDataAttributeAsMaxIndexAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToMaxIndexAttribute
+     * @model opposite="refersToMaxIndexAttribute" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< DataAttribute > getReferredByDataAttributeAsMaxIndexAttribute();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsMaxIndexAttribute <em>Referred By Data Attribute As Max Index Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredByDataAttributeAsMaxIndexAttribute()
+     * @see #getReferredByDataAttributeAsMaxIndexAttribute()
+     * @generated
+     */
+    void unsetReferredByDataAttributeAsMaxIndexAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsMaxIndexAttribute <em>Referred By Data Attribute As Max Index Attribute</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Data Attribute As Max Index Attribute</em>' reference list is set.
+     * @see #unsetReferredByDataAttributeAsMaxIndexAttribute()
+     * @see #getReferredByDataAttributeAsMaxIndexAttribute()
+     * @generated
+     */
+    boolean isSetReferredByDataAttributeAsMaxIndexAttribute();
+
 } // DataAttribute
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java
index d1ed1291838472c72276e5eb7edde76a4fcc4c45..1f31a47a3279dccd7e071a0ab0ef1d09a75b87b4 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/FunctionalConstraint.java
@@ -19,6 +19,8 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
 
+import org.eclipse.emf.common.util.EList;
+
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Functional Constraint</b></em>'.
@@ -33,6 +35,7 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getDescID <em>Desc ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getTitleID <em>Title ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getFunctionalConstraints <em>Functional Constraints</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraint()
@@ -274,4 +277,45 @@ public interface FunctionalConstraint extends NsdObject {
      */
     void setFunctionalConstraints( FunctionalConstraints value );
 
+    /**
+     * Returns the value of the '<em><b>Referred By Data Attribute</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToFunctionalConstraint <em>Refers To Functional Constraint</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By 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 Data Attribute</em>' reference list.
+     * @see #isSetReferredByDataAttribute()
+     * @see #unsetReferredByDataAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getFunctionalConstraint_ReferredByDataAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToFunctionalConstraint
+     * @model opposite="refersToFunctionalConstraint" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< DataAttribute > getReferredByDataAttribute();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getReferredByDataAttribute <em>Referred By Data Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredByDataAttribute()
+     * @see #getReferredByDataAttribute()
+     * @generated
+     */
+    void unsetReferredByDataAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getReferredByDataAttribute <em>Referred By Data Attribute</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Data Attribute</em>' reference list is set.
+     * @see #unsetReferredByDataAttribute()
+     * @see #getReferredByDataAttribute()
+     * @generated
+     */
+    boolean isSetReferredByDataAttribute();
+
 } // FunctionalConstraint
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 42a3a410c92b97b1bd830a30f7a7babba50c098a..4fc7fcb0fc3a5b31e2fbe2c7c5bf0cae0534abee 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
@@ -626,4 +626,13 @@ public interface NS extends Copyrighted, AgNSIdentification, AgUML, AgNSdesc {
      */
     PresenceCondition findPresenceCondition( String presenceConditionName, IRiseClipseConsole console );
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
+     * @generated
+     */
+    FunctionalConstraint findFunctionalConstraint( String functionalConstraintAbbreviation,
+            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 b4e0f95057e4b40aad426a5ab97abb94eb84c516..8d569898ab74f03f020c89339a64641d8be8d1a6 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
@@ -2830,6 +2830,60 @@ public interface NsdPackage extends EPackage {
      */
     int DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 19;
 
+    /**
+     * The feature id for the '<em><b>Refers To Functional Constraint</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT = DOCUMENTED_CLASS_FEATURE_COUNT + 20;
+
+    /**
+     * The feature id for the '<em><b>Refers To Presence Condition</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION = DOCUMENTED_CLASS_FEATURE_COUNT + 21;
+
+    /**
+     * The feature id for the '<em><b>Refers To Size Attribute</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 22;
+
+    /**
+     * The feature id for the '<em><b>Refers To Max Index Attribute</b></em>' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 23;
+
+    /**
+     * The feature id for the '<em><b>Referred By Data Attribute As Size Attribute</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 24;
+
+    /**
+     * The feature id for the '<em><b>Referred By Data Attribute As Max Index Attribute</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE = DOCUMENTED_CLASS_FEATURE_COUNT + 25;
+
     /**
      * The number of structural features of the '<em>Data Attribute</em>' class.
      * <!-- begin-user-doc -->
@@ -2837,7 +2891,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 20;
+    int DATA_ATTRIBUTE_FEATURE_COUNT = DOCUMENTED_CLASS_FEATURE_COUNT + 26;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -3460,6 +3514,15 @@ public interface NsdPackage extends EPackage {
      */
     int FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS = NSD_OBJECT_FEATURE_COUNT + 4;
 
+    /**
+     * The feature id for the '<em><b>Referred By Data Attribute</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE = NSD_OBJECT_FEATURE_COUNT + 5;
+
     /**
      * The number of structural features of the '<em>Functional Constraint</em>' class.
      * <!-- begin-user-doc -->
@@ -3467,7 +3530,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int FUNCTIONAL_CONSTRAINT_FEATURE_COUNT = NSD_OBJECT_FEATURE_COUNT + 5;
+    int FUNCTIONAL_CONSTRAINT_FEATURE_COUNT = NSD_OBJECT_FEATURE_COUNT + 6;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -4270,6 +4333,15 @@ public interface NsdPackage extends EPackage {
      */
     int NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 1;
 
+    /**
+     * The operation id for the '<em>Find Functional Constraint</em>' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int NS___FIND_FUNCTIONAL_CONSTRAINT__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 2;
+
     /**
      * The number of operations of the '<em>NS</em>' class.
      * <!-- begin-user-doc -->
@@ -4277,7 +4349,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int NS_OPERATION_COUNT = COPYRIGHTED_OPERATION_COUNT + 2;
+    int NS_OPERATION_COUNT = COPYRIGHTED_OPERATION_COUNT + 3;
 
     /**
      * The feature id for the '<em><b>Line Number</b></em>' attribute.
@@ -4504,6 +4576,15 @@ public interface NsdPackage extends EPackage {
      */
     int PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT = NSD_OBJECT_FEATURE_COUNT + 7;
 
+    /**
+     * The feature id for the '<em><b>Referred By Data Attribute</b></em>' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    int PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE = NSD_OBJECT_FEATURE_COUNT + 8;
+
     /**
      * The number of structural features of the '<em>Presence Condition</em>' class.
      * <!-- begin-user-doc -->
@@ -4511,7 +4592,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int PRESENCE_CONDITION_FEATURE_COUNT = NSD_OBJECT_FEATURE_COUNT + 8;
+    int PRESENCE_CONDITION_FEATURE_COUNT = NSD_OBJECT_FEATURE_COUNT + 9;
 
     /**
      * The operation id for the '<em>Build Explicit Links</em>' operation.
@@ -7625,6 +7706,72 @@ public interface NsdPackage extends EPackage {
      */
     EReference getDataAttribute_ReferredBySubDataObjectAsMaxIndexAttribute();
 
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToFunctionalConstraint <em>Refers To Functional Constraint</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Functional Constraint</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToFunctionalConstraint()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    EReference getDataAttribute_RefersToFunctionalConstraint();
+
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#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.DataAttribute#getRefersToPresenceCondition()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    EReference getDataAttribute_RefersToPresenceCondition();
+
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Size Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToSizeAttribute()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    EReference getDataAttribute_RefersToSizeAttribute();
+
+    /**
+     * Returns the meta object for the reference '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference '<em>Refers To Max Index Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToMaxIndexAttribute()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    EReference getDataAttribute_RefersToMaxIndexAttribute();
+
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsSizeAttribute <em>Referred By Data Attribute As Size Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Data Attribute As Size Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsSizeAttribute()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    EReference getDataAttribute_ReferredByDataAttributeAsSizeAttribute();
+
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsMaxIndexAttribute <em>Referred By Data Attribute As Max Index Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Data Attribute As Max Index Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getReferredByDataAttributeAsMaxIndexAttribute()
+     * @see #getDataAttribute()
+     * @generated
+     */
+    EReference getDataAttribute_ReferredByDataAttributeAsMaxIndexAttribute();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject <em>Data Object</em>}'.
      * <!-- begin-user-doc -->
@@ -8003,6 +8150,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getFunctionalConstraint_FunctionalConstraints();
 
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getReferredByDataAttribute <em>Referred By Data Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Data Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint#getReferredByDataAttribute()
+     * @see #getFunctionalConstraint()
+     * @generated
+     */
+    EReference getFunctionalConstraint_ReferredByDataAttribute();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints <em>Functional Constraints</em>}'.
      * <!-- begin-user-doc -->
@@ -8423,6 +8581,16 @@ public interface NsdPackage extends EPackage {
      */
     EOperation getNS__FindPresenceCondition__String_IRiseClipseConsole();
 
+    /**
+     * Returns the meta object for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findFunctionalConstraint(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) <em>Find Functional Constraint</em>}' operation.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the '<em>Find Functional Constraint</em>' operation.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findFunctionalConstraint(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole)
+     * @generated
+     */
+    EOperation getNS__FindFunctionalConstraint__String_IRiseClipseConsole();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc <em>NS Doc</em>}'.
      * <!-- begin-user-doc -->
@@ -8553,6 +8721,17 @@ public interface NsdPackage extends EPackage {
      */
     EReference getPresenceCondition_ReferredBySubDataObject();
 
+    /**
+     * Returns the meta object for the reference list '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataAttribute <em>Referred By Data Attribute</em>}'.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return the meta object for the reference list '<em>Referred By Data Attribute</em>'.
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataAttribute()
+     * @see #getPresenceCondition()
+     * @generated
+     */
+    EReference getPresenceCondition_ReferredByDataAttribute();
+
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions <em>Presence Conditions</em>}'.
      * <!-- begin-user-doc -->
@@ -10529,6 +10708,59 @@ public interface NsdPackage extends EPackage {
         EReference DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE = eINSTANCE
                 .getDataAttribute_ReferredBySubDataObjectAsMaxIndexAttribute();
 
+        /**
+         * The meta object literal for the '<em><b>Refers To Functional Constraint</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT = eINSTANCE
+                .getDataAttribute_RefersToFunctionalConstraint();
+
+        /**
+         * The meta object literal for the '<em><b>Refers To Presence Condition</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION = eINSTANCE
+                .getDataAttribute_RefersToPresenceCondition();
+
+        /**
+         * The meta object literal for the '<em><b>Refers To Size Attribute</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE = eINSTANCE.getDataAttribute_RefersToSizeAttribute();
+
+        /**
+         * The meta object literal for the '<em><b>Refers To Max Index Attribute</b></em>' reference feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE = eINSTANCE
+                .getDataAttribute_RefersToMaxIndexAttribute();
+
+        /**
+         * The meta object literal for the '<em><b>Referred By Data Attribute As Size Attribute</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE = eINSTANCE
+                .getDataAttribute_ReferredByDataAttributeAsSizeAttribute();
+
+        /**
+         * The meta object literal for the '<em><b>Referred By Data Attribute As Max Index Attribute</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE = eINSTANCE
+                .getDataAttribute_ReferredByDataAttributeAsMaxIndexAttribute();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataObjectImpl <em>Data Object</em>}' class.
          * <!-- begin-user-doc -->
@@ -10825,6 +11057,15 @@ public interface NsdPackage extends EPackage {
         EReference FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS = eINSTANCE
                 .getFunctionalConstraint_FunctionalConstraints();
 
+        /**
+         * The meta object literal for the '<em><b>Referred By Data Attribute</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE = eINSTANCE
+                .getFunctionalConstraint_ReferredByDataAttribute();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintsImpl <em>Functional Constraints</em>}' class.
          * <!-- begin-user-doc -->
@@ -11153,6 +11394,15 @@ public interface NsdPackage extends EPackage {
         EOperation NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE = eINSTANCE
                 .getNS__FindPresenceCondition__String_IRiseClipseConsole();
 
+        /**
+         * The meta object literal for the '<em><b>Find Functional Constraint</b></em>' operation.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EOperation NS___FIND_FUNCTIONAL_CONSTRAINT__STRING_IRISECLIPSECONSOLE = eINSTANCE
+                .getNS__FindFunctionalConstraint__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 -->
@@ -11255,6 +11505,15 @@ public interface NsdPackage extends EPackage {
         EReference PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT = eINSTANCE
                 .getPresenceCondition_ReferredBySubDataObject();
 
+        /**
+         * The meta object literal for the '<em><b>Referred By Data Attribute</b></em>' reference list feature.
+         * <!-- begin-user-doc -->
+         * <!-- end-user-doc -->
+         * @generated
+         */
+        EReference PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE = eINSTANCE
+                .getPresenceCondition_ReferredByDataAttribute();
+
         /**
          * The meta object literal for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionsImpl <em>Presence Conditions</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 2cebb8d6dbffe39557e4a3b5e4b78ae7d836a883..5f563c348531d899775a78c84cc960083478ef1a 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
@@ -38,6 +38,7 @@ import org.eclipse.emf.common.util.EList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObject <em>Referred By Data Object</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataObjectForDerivedStatistics <em>Referred By Data Object For Derived Statistics</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
  * </ul>
  *
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition()
@@ -396,4 +397,45 @@ public interface PresenceCondition extends NsdObject {
      */
     boolean isSetReferredBySubDataObject();
 
+    /**
+     * Returns the value of the '<em><b>Referred By Data Attribute</b></em>' reference list.
+     * The list contents are of type {@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute}.
+     * It is bidirectional and its opposite is '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}'.
+     * <!-- begin-user-doc -->
+     * <p>
+     * If the meaning of the '<em>Referred By 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 Data Attribute</em>' reference list.
+     * @see #isSetReferredByDataAttribute()
+     * @see #unsetReferredByDataAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage#getPresenceCondition_ReferredByDataAttribute()
+     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute#getRefersToPresenceCondition
+     * @model opposite="refersToPresenceCondition" resolveProxies="false" unsettable="true" transient="true" ordered="false"
+     * @generated
+     */
+    EList< DataAttribute > getReferredByDataAttribute();
+
+    /**
+     * Unsets the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataAttribute <em>Referred By Data Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #isSetReferredByDataAttribute()
+     * @see #getReferredByDataAttribute()
+     * @generated
+     */
+    void unsetReferredByDataAttribute();
+
+    /**
+     * Returns whether the value of the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition#getReferredByDataAttribute <em>Referred By Data Attribute</em>}' reference list is set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @return whether the value of the '<em>Referred By Data Attribute</em>' reference list is set.
+     * @see #unsetReferredByDataAttribute()
+     * @see #getReferredByDataAttribute()
+     * @generated
+     */
+    boolean isSetReferredByDataAttribute();
+
 } // PresenceCondition
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 80f4c8fa8a494e8a66c58f4ebfddcff867bc1251..7925f276b3b29bded9d83f4429df6a4837728334 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
@@ -26,10 +26,14 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgPresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgTrgOp;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint;
 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.SubDataObject;
+import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
+
 import java.math.BigDecimal;
 
 import java.util.Collection;
@@ -75,6 +79,12 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getCDC <em>CDC</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getReferredBySubDataObjectAsSizeAttribute <em>Referred By Sub Data Object As Size Attribute</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getReferredBySubDataObjectAsMaxIndexAttribute <em>Referred By Sub Data Object As Max Index Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getRefersToFunctionalConstraint <em>Refers To Functional Constraint</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getRefersToPresenceCondition <em>Refers To Presence Condition</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getRefersToSizeAttribute <em>Refers To Size Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getRefersToMaxIndexAttribute <em>Refers To Max Index Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getReferredByDataAttributeAsSizeAttribute <em>Referred By Data Attribute As Size Attribute</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.DataAttributeImpl#getReferredByDataAttributeAsMaxIndexAttribute <em>Referred By Data Attribute As Max Index Attribute</em>}</li>
  * </ul>
  *
  * @generated
@@ -594,6 +604,102 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
      */
     protected EList< SubDataObject > referredBySubDataObjectAsMaxIndexAttribute;
 
+    /**
+     * The cached value of the '{@link #getRefersToFunctionalConstraint() <em>Refers To Functional Constraint</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToFunctionalConstraint()
+     * @generated
+     * @ordered
+     */
+    protected FunctionalConstraint refersToFunctionalConstraint;
+
+    /**
+     * This is true if the Refers To Functional Constraint reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToFunctionalConstraintESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToPresenceCondition() <em>Refers To Presence Condition</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToPresenceCondition()
+     * @generated
+     * @ordered
+     */
+    protected PresenceCondition refersToPresenceCondition;
+
+    /**
+     * This is true if the Refers To Presence Condition reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToPresenceConditionESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToSizeAttribute() <em>Refers To Size Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToSizeAttribute()
+     * @generated
+     * @ordered
+     */
+    protected DataAttribute refersToSizeAttribute;
+
+    /**
+     * This is true if the Refers To Size Attribute reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToSizeAttributeESet;
+
+    /**
+     * The cached value of the '{@link #getRefersToMaxIndexAttribute() <em>Refers To Max Index Attribute</em>}' reference.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getRefersToMaxIndexAttribute()
+     * @generated
+     * @ordered
+     */
+    protected DataAttribute refersToMaxIndexAttribute;
+
+    /**
+     * This is true if the Refers To Max Index Attribute reference has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean refersToMaxIndexAttributeESet;
+
+    /**
+     * The cached value of the '{@link #getReferredByDataAttributeAsSizeAttribute() <em>Referred By Data Attribute As Size Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredByDataAttributeAsSizeAttribute()
+     * @generated
+     * @ordered
+     */
+    protected EList< DataAttribute > referredByDataAttributeAsSizeAttribute;
+
+    /**
+     * The cached value of the '{@link #getReferredByDataAttributeAsMaxIndexAttribute() <em>Referred By Data Attribute As Max Index Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredByDataAttributeAsMaxIndexAttribute()
+     * @generated
+     * @ordered
+     */
+    protected EList< DataAttribute > referredByDataAttributeAsMaxIndexAttribute;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1588,6 +1694,548 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
                 && ( ( InternalEList.Unsettable< ? > ) referredBySubDataObjectAsMaxIndexAttribute ).isSet();
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public FunctionalConstraint getRefersToFunctionalConstraint() {
+        return refersToFunctionalConstraint;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToFunctionalConstraint( FunctionalConstraint newRefersToFunctionalConstraint,
+            NotificationChain msgs ) {
+        FunctionalConstraint oldRefersToFunctionalConstraint = refersToFunctionalConstraint;
+        refersToFunctionalConstraint = newRefersToFunctionalConstraint;
+        boolean oldRefersToFunctionalConstraintESet = refersToFunctionalConstraintESet;
+        refersToFunctionalConstraintESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT, oldRefersToFunctionalConstraint,
+                    newRefersToFunctionalConstraint, !oldRefersToFunctionalConstraintESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToFunctionalConstraint( FunctionalConstraint newRefersToFunctionalConstraint ) {
+        if( newRefersToFunctionalConstraint != refersToFunctionalConstraint ) {
+            NotificationChain msgs = null;
+            if( refersToFunctionalConstraint != null )
+                msgs = ( ( InternalEObject ) refersToFunctionalConstraint ).eInverseRemove( this,
+                        NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE, FunctionalConstraint.class,
+                        msgs );
+            if( newRefersToFunctionalConstraint != null )
+                msgs = ( ( InternalEObject ) newRefersToFunctionalConstraint ).eInverseAdd( this,
+                        NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE, FunctionalConstraint.class,
+                        msgs );
+            msgs = basicSetRefersToFunctionalConstraint( newRefersToFunctionalConstraint, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToFunctionalConstraintESet = refersToFunctionalConstraintESet;
+            refersToFunctionalConstraintESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT, newRefersToFunctionalConstraint,
+                    newRefersToFunctionalConstraint, !oldRefersToFunctionalConstraintESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToFunctionalConstraint( NotificationChain msgs ) {
+        FunctionalConstraint oldRefersToFunctionalConstraint = refersToFunctionalConstraint;
+        refersToFunctionalConstraint = null;
+        boolean oldRefersToFunctionalConstraintESet = refersToFunctionalConstraintESet;
+        refersToFunctionalConstraintESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT, oldRefersToFunctionalConstraint, null,
+                    oldRefersToFunctionalConstraintESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToFunctionalConstraint() {
+        if( refersToFunctionalConstraint != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToFunctionalConstraint ).eInverseRemove( this,
+                    NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE, FunctionalConstraint.class, msgs );
+            msgs = basicUnsetRefersToFunctionalConstraint( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToFunctionalConstraintESet = refersToFunctionalConstraintESet;
+            refersToFunctionalConstraintESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT, null, null,
+                    oldRefersToFunctionalConstraintESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToFunctionalConstraint() {
+        return refersToFunctionalConstraintESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public PresenceCondition getRefersToPresenceCondition() {
+        return refersToPresenceCondition;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToPresenceCondition( PresenceCondition newRefersToPresenceCondition,
+            NotificationChain msgs ) {
+        PresenceCondition oldRefersToPresenceCondition = refersToPresenceCondition;
+        refersToPresenceCondition = newRefersToPresenceCondition;
+        boolean oldRefersToPresenceConditionESet = refersToPresenceConditionESet;
+        refersToPresenceConditionESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_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_DATA_ATTRIBUTE, PresenceCondition.class, msgs );
+            if( newRefersToPresenceCondition != null )
+                msgs = ( ( InternalEObject ) newRefersToPresenceCondition ).eInverseAdd( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_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.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.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_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.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 -->
+     * @generated
+     */
+    @Override
+    public DataAttribute getRefersToSizeAttribute() {
+        return refersToSizeAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToSizeAttribute( DataAttribute newRefersToSizeAttribute,
+            NotificationChain msgs ) {
+        DataAttribute oldRefersToSizeAttribute = refersToSizeAttribute;
+        refersToSizeAttribute = newRefersToSizeAttribute;
+        boolean oldRefersToSizeAttributeESet = refersToSizeAttributeESet;
+        refersToSizeAttributeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE, oldRefersToSizeAttribute,
+                    newRefersToSizeAttribute, !oldRefersToSizeAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToSizeAttribute( DataAttribute newRefersToSizeAttribute ) {
+        if( newRefersToSizeAttribute != refersToSizeAttribute ) {
+            NotificationChain msgs = null;
+            if( refersToSizeAttribute != null )
+                msgs = ( ( InternalEObject ) refersToSizeAttribute ).eInverseRemove( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE, DataAttribute.class,
+                        msgs );
+            if( newRefersToSizeAttribute != null )
+                msgs = ( ( InternalEObject ) newRefersToSizeAttribute ).eInverseAdd( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE, DataAttribute.class,
+                        msgs );
+            msgs = basicSetRefersToSizeAttribute( newRefersToSizeAttribute, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToSizeAttributeESet = refersToSizeAttributeESet;
+            refersToSizeAttributeESet = true;
+            if( eNotificationRequired() ) eNotify(
+                    new ENotificationImpl( this, Notification.SET, NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE,
+                            newRefersToSizeAttribute, newRefersToSizeAttribute, !oldRefersToSizeAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToSizeAttribute( NotificationChain msgs ) {
+        DataAttribute oldRefersToSizeAttribute = refersToSizeAttribute;
+        refersToSizeAttribute = null;
+        boolean oldRefersToSizeAttributeESet = refersToSizeAttributeESet;
+        refersToSizeAttributeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE, oldRefersToSizeAttribute, null,
+                    oldRefersToSizeAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToSizeAttribute() {
+        if( refersToSizeAttribute != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToSizeAttribute ).eInverseRemove( this,
+                    NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE, DataAttribute.class,
+                    msgs );
+            msgs = basicUnsetRefersToSizeAttribute( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToSizeAttributeESet = refersToSizeAttributeESet;
+            refersToSizeAttributeESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE, null, null, oldRefersToSizeAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToSizeAttribute() {
+        return refersToSizeAttributeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public DataAttribute getRefersToMaxIndexAttribute() {
+        return refersToMaxIndexAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicSetRefersToMaxIndexAttribute( DataAttribute newRefersToMaxIndexAttribute,
+            NotificationChain msgs ) {
+        DataAttribute oldRefersToMaxIndexAttribute = refersToMaxIndexAttribute;
+        refersToMaxIndexAttribute = newRefersToMaxIndexAttribute;
+        boolean oldRefersToMaxIndexAttributeESet = refersToMaxIndexAttributeESet;
+        refersToMaxIndexAttributeESet = true;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE, oldRefersToMaxIndexAttribute,
+                    newRefersToMaxIndexAttribute, !oldRefersToMaxIndexAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void setRefersToMaxIndexAttribute( DataAttribute newRefersToMaxIndexAttribute ) {
+        if( newRefersToMaxIndexAttribute != refersToMaxIndexAttribute ) {
+            NotificationChain msgs = null;
+            if( refersToMaxIndexAttribute != null )
+                msgs = ( ( InternalEObject ) refersToMaxIndexAttribute ).eInverseRemove( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE,
+                        DataAttribute.class, msgs );
+            if( newRefersToMaxIndexAttribute != null )
+                msgs = ( ( InternalEObject ) newRefersToMaxIndexAttribute ).eInverseAdd( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE,
+                        DataAttribute.class, msgs );
+            msgs = basicSetRefersToMaxIndexAttribute( newRefersToMaxIndexAttribute, msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToMaxIndexAttributeESet = refersToMaxIndexAttributeESet;
+            refersToMaxIndexAttributeESet = true;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.SET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE, newRefersToMaxIndexAttribute,
+                    newRefersToMaxIndexAttribute, !oldRefersToMaxIndexAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public NotificationChain basicUnsetRefersToMaxIndexAttribute( NotificationChain msgs ) {
+        DataAttribute oldRefersToMaxIndexAttribute = refersToMaxIndexAttribute;
+        refersToMaxIndexAttribute = null;
+        boolean oldRefersToMaxIndexAttributeESet = refersToMaxIndexAttributeESet;
+        refersToMaxIndexAttributeESet = false;
+        if( eNotificationRequired() ) {
+            ENotificationImpl notification = new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE, oldRefersToMaxIndexAttribute, null,
+                    oldRefersToMaxIndexAttributeESet );
+            if( msgs == null )
+                msgs = notification;
+            else
+                msgs.add( notification );
+        }
+        return msgs;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetRefersToMaxIndexAttribute() {
+        if( refersToMaxIndexAttribute != null ) {
+            NotificationChain msgs = null;
+            msgs = ( ( InternalEObject ) refersToMaxIndexAttribute ).eInverseRemove( this,
+                    NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE, DataAttribute.class,
+                    msgs );
+            msgs = basicUnsetRefersToMaxIndexAttribute( msgs );
+            if( msgs != null ) msgs.dispatch();
+        }
+        else {
+            boolean oldRefersToMaxIndexAttributeESet = refersToMaxIndexAttributeESet;
+            refersToMaxIndexAttributeESet = false;
+            if( eNotificationRequired() ) eNotify( new ENotificationImpl( this, Notification.UNSET,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE, null, null,
+                    oldRefersToMaxIndexAttributeESet ) );
+        }
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetRefersToMaxIndexAttribute() {
+        return refersToMaxIndexAttributeESet;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EList< DataAttribute > getReferredByDataAttributeAsSizeAttribute() {
+        if( referredByDataAttributeAsSizeAttribute == null ) {
+            referredByDataAttributeAsSizeAttribute = new EObjectWithInverseEList.Unsettable< DataAttribute >(
+                    DataAttribute.class, this, NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE );
+        }
+        return referredByDataAttributeAsSizeAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredByDataAttributeAsSizeAttribute() {
+        if( referredByDataAttributeAsSizeAttribute != null )
+            ( ( InternalEList.Unsettable< ? > ) referredByDataAttributeAsSizeAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredByDataAttributeAsSizeAttribute() {
+        return referredByDataAttributeAsSizeAttribute != null
+                && ( ( InternalEList.Unsettable< ? > ) referredByDataAttributeAsSizeAttribute ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EList< DataAttribute > getReferredByDataAttributeAsMaxIndexAttribute() {
+        if( referredByDataAttributeAsMaxIndexAttribute == null ) {
+            referredByDataAttributeAsMaxIndexAttribute = new EObjectWithInverseEList.Unsettable< DataAttribute >(
+                    DataAttribute.class, this,
+                    NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE );
+        }
+        return referredByDataAttributeAsMaxIndexAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredByDataAttributeAsMaxIndexAttribute() {
+        if( referredByDataAttributeAsMaxIndexAttribute != null )
+            ( ( InternalEList.Unsettable< ? > ) referredByDataAttributeAsMaxIndexAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredByDataAttributeAsMaxIndexAttribute() {
+        return referredByDataAttributeAsMaxIndexAttribute != null
+                && ( ( InternalEList.Unsettable< ? > ) referredByDataAttributeAsMaxIndexAttribute ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1606,6 +2254,35 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
             return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredBySubDataObjectAsMaxIndexAttribute() )
                     .basicAdd( otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT:
+            if( refersToFunctionalConstraint != null )
+                msgs = ( ( InternalEObject ) refersToFunctionalConstraint ).eInverseRemove( this,
+                        NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE, FunctionalConstraint.class,
+                        msgs );
+            return basicSetRefersToFunctionalConstraint( ( FunctionalConstraint ) otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            if( refersToPresenceCondition != null )
+                msgs = ( ( InternalEObject ) refersToPresenceCondition ).eInverseRemove( this,
+                        NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE, PresenceCondition.class, msgs );
+            return basicSetRefersToPresenceCondition( ( PresenceCondition ) otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE:
+            if( refersToSizeAttribute != null )
+                msgs = ( ( InternalEObject ) refersToSizeAttribute ).eInverseRemove( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE, DataAttribute.class,
+                        msgs );
+            return basicSetRefersToSizeAttribute( ( DataAttribute ) otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            if( refersToMaxIndexAttribute != null )
+                msgs = ( ( InternalEObject ) refersToMaxIndexAttribute ).eInverseRemove( this,
+                        NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE,
+                        DataAttribute.class, msgs );
+            return basicSetRefersToMaxIndexAttribute( ( DataAttribute ) otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataAttributeAsSizeAttribute() )
+                    .basicAdd( otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataAttributeAsMaxIndexAttribute() )
+                    .basicAdd( otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -1625,6 +2302,19 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
             return ( ( InternalEList< ? > ) getReferredBySubDataObjectAsMaxIndexAttribute() ).basicRemove( otherEnd,
                     msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT:
+            return basicUnsetRefersToFunctionalConstraint( msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            return basicUnsetRefersToPresenceCondition( msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE:
+            return basicUnsetRefersToSizeAttribute( msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            return basicUnsetRefersToMaxIndexAttribute( msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE:
+            return ( ( InternalEList< ? > ) getReferredByDataAttributeAsSizeAttribute() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
+            return ( ( InternalEList< ? > ) getReferredByDataAttributeAsMaxIndexAttribute() ).basicRemove( otherEnd,
+                    msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -1691,6 +2381,18 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             return getReferredBySubDataObjectAsSizeAttribute();
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
             return getReferredBySubDataObjectAsMaxIndexAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT:
+            return getRefersToFunctionalConstraint();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            return getRefersToPresenceCondition();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE:
+            return getRefersToSizeAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            return getRefersToMaxIndexAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE:
+            return getReferredByDataAttributeAsSizeAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
+            return getReferredByDataAttributeAsMaxIndexAttribute();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -1767,6 +2469,27 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             getReferredBySubDataObjectAsMaxIndexAttribute()
                     .addAll( ( Collection< ? extends SubDataObject > ) newValue );
             return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT:
+            setRefersToFunctionalConstraint( ( FunctionalConstraint ) newValue );
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            setRefersToPresenceCondition( ( PresenceCondition ) newValue );
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE:
+            setRefersToSizeAttribute( ( DataAttribute ) newValue );
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            setRefersToMaxIndexAttribute( ( DataAttribute ) newValue );
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE:
+            getReferredByDataAttributeAsSizeAttribute().clear();
+            getReferredByDataAttributeAsSizeAttribute().addAll( ( Collection< ? extends DataAttribute > ) newValue );
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
+            getReferredByDataAttributeAsMaxIndexAttribute().clear();
+            getReferredByDataAttributeAsMaxIndexAttribute()
+                    .addAll( ( Collection< ? extends DataAttribute > ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -1839,6 +2562,24 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
             unsetReferredBySubDataObjectAsMaxIndexAttribute();
             return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT:
+            unsetRefersToFunctionalConstraint();
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            unsetRefersToPresenceCondition();
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE:
+            unsetRefersToSizeAttribute();
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            unsetRefersToMaxIndexAttribute();
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE:
+            unsetReferredByDataAttributeAsSizeAttribute();
+            return;
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
+            unsetReferredByDataAttributeAsMaxIndexAttribute();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -1891,6 +2632,18 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             return isSetReferredBySubDataObjectAsSizeAttribute();
         case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE:
             return isSetReferredBySubDataObjectAsMaxIndexAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT:
+            return isSetRefersToFunctionalConstraint();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION:
+            return isSetRefersToPresenceCondition();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE:
+            return isSetRefersToSizeAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE:
+            return isSetRefersToMaxIndexAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE:
+            return isSetReferredByDataAttributeAsSizeAttribute();
+        case NsdPackage.DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE:
+            return isSetReferredByDataAttributeAsMaxIndexAttribute();
         }
         return super.eIsSet( featureID );
     }
@@ -2134,4 +2887,74 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         return result.toString();
     }
 
+    /* Implicit link
+     *   DataAttribute.fc                   -> FunctionalConstraint.abbreviation
+     *   DataAttribute.presCond             -> PresenceCondition.name
+     *   DataAttribute.sizeAttribute        -> DataAttribute.name
+     *   DataAttribute.maxIndexAttribute    -> DataAttribute.name
+     */
+    @Override
+    public boolean buildExplicitLinks( IRiseClipseConsole console ) {
+        if( super.buildExplicitLinks( console ) ) return true;
+
+        if( isSetFc() ) {
+            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" );
+            }
+            else {
+                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 ) );
+            if( getRefersToPresenceCondition() == null ) {
+                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:"
+                        + getRefersToPresenceCondition().getPresenceConditions().getNS().getId() + ")" );
+            }
+        }
+
+        if( isSetSizeAttribute() ) {
+            setRefersToSizeAttribute( getCDC().getDataAttribute().stream()
+                    .filter( att -> att.getName().equals( getSizeAttribute() ) ).findAny().orElse( null ) );
+            if( getRefersToSizeAttribute() == null ) {
+                console.error( "DataAttribute (name: " + getSizeAttribute()
+                        + ") refers as sizeAttribute by DataAttribute (name: " + getName() + ") in NS (id:"
+                        + getCDC().getCDCs().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "DataAttribute (name: " + getSizeAttribute()
+                        + ") refers as sizeAttribute by DataAttribute (name: " + getName() + ") in NS (id:"
+                        + getCDC().getCDCs().getNS().getId() + ") found" );
+            }
+        }
+
+        if( isSetMaxIndexAttribute() ) {
+            setRefersToMaxIndexAttribute( getCDC().getDataAttribute().stream()
+                    .filter( att -> att.getName().equals( getMaxIndexAttribute() ) ).findAny().orElse( null ) );
+            if( getRefersToMaxIndexAttribute() == null ) {
+                console.error( "DataAttribute (name: " + getMaxIndexAttribute()
+                        + ") refers as maxIndexAttribute by DataAttribute (name: " + getName() + ") in NS (id:"
+                        + getCDC().getCDCs().getNS().getId() + ") is unknown" );
+            }
+            else {
+                console.info( "DataAttribute (name: " + getMaxIndexAttribute()
+                        + ") refers as maxIndexAttribute by DataAttribute (name: " + getName() + ") in NS (id:"
+                        + getCDC().getCDCs().getNS().getId() + ") found" );
+            }
+        }
+
+        return false;
+    }
 } //DataAttributeImpl
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintImpl.java
index 4eb8e285444de930c1b5e6e8d038343d62b9042a..0b42ad52bd244e5cb8fb3383c810e6f9236505a5 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/FunctionalConstraintImpl.java
@@ -20,18 +20,23 @@
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ApplicableServices;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 
+import java.util.Collection;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectWithInverseEList;
 import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
 
 /**
  * <!-- begin-user-doc -->
@@ -46,6 +51,7 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintImpl#getDescID <em>Desc ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintImpl#getTitleID <em>Title ID</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintImpl#getFunctionalConstraints <em>Functional Constraints</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.FunctionalConstraintImpl#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
  * </ul>
  *
  * @generated
@@ -157,6 +163,16 @@ public class FunctionalConstraintImpl extends NsdObjectImpl implements Functiona
      */
     protected boolean titleIDESet;
 
+    /**
+     * The cached value of the '{@link #getReferredByDataAttribute() <em>Referred By Data Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredByDataAttribute()
+     * @generated
+     * @ordered
+     */
+    protected EList< DataAttribute > referredByDataAttribute;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -493,6 +509,42 @@ public class FunctionalConstraintImpl extends NsdObjectImpl implements Functiona
      * @generated
      */
     @Override
+    public EList< DataAttribute > getReferredByDataAttribute() {
+        if( referredByDataAttribute == null ) {
+            referredByDataAttribute = new EObjectWithInverseEList.Unsettable< DataAttribute >( DataAttribute.class,
+                    this, NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT );
+        }
+        return referredByDataAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredByDataAttribute() {
+        if( referredByDataAttribute != null ) ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredByDataAttribute() {
+        return referredByDataAttribute != null && ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).isSet();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings( "unchecked" )
+    @Override
     public NotificationChain eInverseAdd( InternalEObject otherEnd, int featureID, NotificationChain msgs ) {
         switch( featureID ) {
         case NsdPackage.FUNCTIONAL_CONSTRAINT__APPLICABLE_SERVICES:
@@ -502,6 +554,9 @@ public class FunctionalConstraintImpl extends NsdObjectImpl implements Functiona
         case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
             if( eInternalContainer() != null ) msgs = eBasicRemoveFromContainer( msgs );
             return basicSetFunctionalConstraints( ( FunctionalConstraints ) otherEnd, msgs );
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataAttribute() )
+                    .basicAdd( otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -518,6 +573,8 @@ public class FunctionalConstraintImpl extends NsdObjectImpl implements Functiona
             return basicUnsetApplicableServices( msgs );
         case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
             return basicSetFunctionalConstraints( null, msgs );
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE:
+            return ( ( InternalEList< ? > ) getReferredByDataAttribute() ).basicRemove( otherEnd, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -555,6 +612,8 @@ public class FunctionalConstraintImpl extends NsdObjectImpl implements Functiona
             return getTitleID();
         case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
             return getFunctionalConstraints();
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE:
+            return getReferredByDataAttribute();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -564,6 +623,7 @@ public class FunctionalConstraintImpl extends NsdObjectImpl implements Functiona
      * <!-- end-user-doc -->
      * @generated
      */
+    @SuppressWarnings( "unchecked" )
     @Override
     public void eSet( int featureID, Object newValue ) {
         switch( featureID ) {
@@ -582,6 +642,10 @@ public class FunctionalConstraintImpl extends NsdObjectImpl implements Functiona
         case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
             setFunctionalConstraints( ( FunctionalConstraints ) newValue );
             return;
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE:
+            getReferredByDataAttribute().clear();
+            getReferredByDataAttribute().addAll( ( Collection< ? extends DataAttribute > ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -609,6 +673,9 @@ public class FunctionalConstraintImpl extends NsdObjectImpl implements Functiona
         case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
             setFunctionalConstraints( ( FunctionalConstraints ) null );
             return;
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE:
+            unsetReferredByDataAttribute();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -631,6 +698,8 @@ public class FunctionalConstraintImpl extends NsdObjectImpl implements Functiona
             return isSetTitleID();
         case NsdPackage.FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS:
             return getFunctionalConstraints() != null;
+        case NsdPackage.FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE:
+            return isSetReferredByDataAttribute();
         }
         return super.eIsSet( featureID );
     }
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 5e376c20a00d1ffd1ba9173d2226c4a044ffcd10..e8fa279425db7affa5bd8dd8f080de1d3d433325 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
@@ -30,6 +30,7 @@ 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.Enumerations;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
@@ -1666,13 +1667,13 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     @Override
     public CDC findCDC( String cDCName, IRiseClipseConsole console ) {
-        if( cDCsESet ) {
+        if( isSetCDCs() ) {
             CDC found = getCDCs().getCDC().stream().filter( cdc -> cdc.getName().equals( cDCName ) ).findAny()
                     .orElse( null );
             if( found != null ) return found;
         }
 
-        if( dependsOnESet ) {
+        if( isSetDependsOn() ) {
             getDependsOn().buildExplicitLinks( console );
             return getDependsOn().getRefersToNS().findCDC( cDCName, console );
         }
@@ -1687,13 +1688,13 @@ public class NSImpl extends CopyrightedImpl implements NS {
      */
     @Override
     public PresenceCondition findPresenceCondition( String presenceConditionName, IRiseClipseConsole console ) {
-        if( presenceConditionsESet ) {
+        if( isSetPresenceConditions() ) {
             PresenceCondition found = getPresenceConditions().getPresenceCondition().stream()
                     .filter( cond -> cond.getName().equals( presenceConditionName ) ).findAny().orElse( null );
             if( found != null ) return found;
         }
 
-        if( dependsOnESet ) {
+        if( isSetDependsOn() ) {
             getDependsOn().buildExplicitLinks( console );
             return getDependsOn().getRefersToNS().findPresenceCondition( presenceConditionName, console );
         }
@@ -1701,6 +1702,28 @@ public class NSImpl extends CopyrightedImpl implements NS {
         return null;
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated NOT
+     */
+    @Override
+    public FunctionalConstraint findFunctionalConstraint( String functionalConstraintAbbreviation,
+            IRiseClipseConsole console ) {
+        if( isSetFunctionalConstraints() ) {
+            FunctionalConstraint found = getFunctionalConstraints().getFunctionalConstraint().stream()
+                    .filter( fc -> fc.getAbbreviation().equals( functionalConstraintAbbreviation ) ).findAny().orElse( null );
+            if( found != null ) return found;
+        }
+
+        if( isSetDependsOn() ) {
+            getDependsOn().buildExplicitLinks( console );
+            return getDependsOn().getRefersToNS().findFunctionalConstraint( functionalConstraintAbbreviation, console );
+        }
+
+        return null;
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2532,6 +2555,8 @@ public class NSImpl extends CopyrightedImpl implements NS {
             return findCDC( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
         case NsdPackage.NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE:
             return findPresenceCondition( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
+        case NsdPackage.NS___FIND_FUNCTIONAL_CONSTRAINT__STRING_IRISECLIPSECONSOLE:
+            return findFunctionalConstraint( ( 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 ccb6af2bec69199283a35bfaf7a6f6436bc4786c..196eac7a66cdc704f16383000220f9519004758b 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
@@ -1633,6 +1633,66 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 4 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataAttribute_RefersToFunctionalConstraint() {
+        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 5 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataAttribute_RefersToPresenceCondition() {
+        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 6 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataAttribute_RefersToSizeAttribute() {
+        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 7 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataAttribute_RefersToMaxIndexAttribute() {
+        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 8 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataAttribute_ReferredByDataAttributeAsSizeAttribute() {
+        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 9 );
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getDataAttribute_ReferredByDataAttributeAsMaxIndexAttribute() {
+        return ( EReference ) dataAttributeEClass.getEStructuralFeatures().get( 10 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -1983,6 +2043,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) functionalConstraintEClass.getEStructuralFeatures().get( 4 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getFunctionalConstraint_ReferredByDataAttribute() {
+        return ( EReference ) functionalConstraintEClass.getEStructuralFeatures().get( 5 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2373,6 +2443,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return nsEClass.getEOperations().get( 1 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EOperation getNS__FindFunctionalConstraint__String_IRiseClipseConsole() {
+        return nsEClass.getEOperations().get( 2 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2493,6 +2573,16 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) presenceConditionEClass.getEStructuralFeatures().get( 7 );
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EReference getPresenceCondition_ReferredByDataAttribute() {
+        return ( EReference ) presenceConditionEClass.getEStructuralFeatures().get( 8 );
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -3714,6 +3804,12 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEReference( dataAttributeEClass, DATA_ATTRIBUTE__CDC );
         createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_SIZE_ATTRIBUTE );
         createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERRED_BY_SUB_DATA_OBJECT_AS_MAX_INDEX_ATTRIBUTE );
+        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERS_TO_FUNCTIONAL_CONSTRAINT );
+        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION );
+        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERS_TO_SIZE_ATTRIBUTE );
+        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERS_TO_MAX_INDEX_ATTRIBUTE );
+        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_SIZE_ATTRIBUTE );
+        createEReference( dataAttributeEClass, DATA_ATTRIBUTE__REFERRED_BY_DATA_ATTRIBUTE_AS_MAX_INDEX_ATTRIBUTE );
 
         dataObjectEClass = createEClass( DATA_OBJECT );
         createEAttribute( dataObjectEClass, DATA_OBJECT__NAME );
@@ -3756,6 +3852,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEAttribute( functionalConstraintEClass, FUNCTIONAL_CONSTRAINT__DESC_ID );
         createEAttribute( functionalConstraintEClass, FUNCTIONAL_CONSTRAINT__TITLE_ID );
         createEReference( functionalConstraintEClass, FUNCTIONAL_CONSTRAINT__FUNCTIONAL_CONSTRAINTS );
+        createEReference( functionalConstraintEClass, FUNCTIONAL_CONSTRAINT__REFERRED_BY_DATA_ATTRIBUTE );
 
         functionalConstraintsEClass = createEClass( FUNCTIONAL_CONSTRAINTS );
         createEReference( functionalConstraintsEClass, FUNCTIONAL_CONSTRAINTS__FUNCTIONAL_CONSTRAINT );
@@ -3802,6 +3899,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEReference( nsEClass, NS__REFERRED_BY_DEPENDS_ON );
         createEOperation( nsEClass, NS___FIND_CDC__STRING_IRISECLIPSECONSOLE );
         createEOperation( nsEClass, NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE );
+        createEOperation( nsEClass, NS___FIND_FUNCTIONAL_CONSTRAINT__STRING_IRISECLIPSECONSOLE );
 
         nsDocEClass = createEClass( NS_DOC );
         createEReference( nsDocEClass, NS_DOC__DOC );
@@ -3816,6 +3914,7 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT );
         createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_DATA_OBJECT_FOR_DERIVED_STATISTICS );
         createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT );
+        createEReference( presenceConditionEClass, PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE );
 
         presenceConditionsEClass = createEClass( PRESENCE_CONDITIONS );
         createEReference( presenceConditionsEClass, PRESENCE_CONDITIONS__PRESENCE_CONDITION );
@@ -4347,6 +4446,30 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 this.getSubDataObject_RefersToMaxIndexAttribute(), "referredBySubDataObjectAsMaxIndexAttribute", null,
                 0, -1, DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
                 !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getDataAttribute_RefersToFunctionalConstraint(), this.getFunctionalConstraint(),
+                this.getFunctionalConstraint_ReferredByDataAttribute(), "refersToFunctionalConstraint", null, 0, 1,
+                DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getDataAttribute_RefersToPresenceCondition(), this.getPresenceCondition(),
+                this.getPresenceCondition_ReferredByDataAttribute(), "refersToPresenceCondition", null, 0, 1,
+                DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getDataAttribute_RefersToSizeAttribute(), this.getDataAttribute(),
+                this.getDataAttribute_ReferredByDataAttributeAsSizeAttribute(), "refersToSizeAttribute", null, 0, 1,
+                DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getDataAttribute_RefersToMaxIndexAttribute(), this.getDataAttribute(),
+                this.getDataAttribute_ReferredByDataAttributeAsMaxIndexAttribute(), "refersToMaxIndexAttribute", null,
+                0, 1, DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getDataAttribute_ReferredByDataAttributeAsSizeAttribute(), this.getDataAttribute(),
+                this.getDataAttribute_RefersToSizeAttribute(), "referredByDataAttributeAsSizeAttribute", null, 0, -1,
+                DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
+                IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getDataAttribute_ReferredByDataAttributeAsMaxIndexAttribute(), this.getDataAttribute(),
+                this.getDataAttribute_RefersToMaxIndexAttribute(), "referredByDataAttributeAsMaxIndexAttribute", null,
+                0, -1, DataAttribute.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( dataObjectEClass, DataObject.class, "DataObject", !IS_ABSTRACT, !IS_INTERFACE,
                 IS_GENERATED_INSTANCE_CLASS );
@@ -4449,6 +4572,10 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 this.getFunctionalConstraints_FunctionalConstraint(), "functionalConstraints", null, 0, 1,
                 FunctionalConstraint.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
                 !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getFunctionalConstraint_ReferredByDataAttribute(), this.getDataAttribute(),
+                this.getDataAttribute_RefersToFunctionalConstraint(), "referredByDataAttribute", null, 0, -1,
+                FunctionalConstraint.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE,
+                !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
 
         initEClass( functionalConstraintsEClass, FunctionalConstraints.class, "FunctionalConstraints", !IS_ABSTRACT,
                 !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS );
@@ -4568,6 +4695,11 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         addEParameter( op, ecorePackage.getEString(), "presenceConditionName", 0, 1, IS_UNIQUE, IS_ORDERED );
         addEParameter( op, this.getIRiseClipseConsole(), "console", 0, 1, IS_UNIQUE, IS_ORDERED );
 
+        op = initEOperation( getNS__FindFunctionalConstraint__String_IRiseClipseConsole(),
+                this.getFunctionalConstraint(), "findFunctionalConstraint", 0, 1, IS_UNIQUE, IS_ORDERED );
+        addEParameter( op, ecorePackage.getEString(), "functionalConstraintAbbreviation", 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,
@@ -4606,6 +4738,10 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 this.getSubDataObject_RefersToPresenceCondition(), "referredBySubDataObject", null, 0, -1,
                 PresenceCondition.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES,
                 IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED );
+        initEReference( getPresenceCondition_ReferredByDataAttribute(), this.getDataAttribute(),
+                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 );
 
         initEClass( presenceConditionsEClass, PresenceConditions.class, "PresenceConditions", !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 4bafb3a2f77aa1d559a40c466376c60c25960df4..5e6d9ff63b06ccfc6419e27c72c942c7cc683722 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/PresenceConditionImpl.java
@@ -19,6 +19,7 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DataObject;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition;
@@ -54,6 +55,7 @@ import org.eclipse.emf.ecore.util.InternalEList;
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getReferredByDataObject <em>Referred By Data Object</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getReferredByDataObjectForDerivedStatistics <em>Referred By Data Object For Derived Statistics</em>}</li>
  *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getReferredBySubDataObject <em>Referred By Sub Data Object</em>}</li>
+ *   <li>{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl.PresenceConditionImpl#getReferredByDataAttribute <em>Referred By Data Attribute</em>}</li>
  * </ul>
  *
  * @generated
@@ -205,6 +207,16 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
      */
     protected EList< SubDataObject > referredBySubDataObject;
 
+    /**
+     * The cached value of the '{@link #getReferredByDataAttribute() <em>Referred By Data Attribute</em>}' reference list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getReferredByDataAttribute()
+     * @generated
+     * @ordered
+     */
+    protected EList< DataAttribute > referredByDataAttribute;
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -578,6 +590,41 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
         return referredBySubDataObject != null && ( ( InternalEList.Unsettable< ? > ) referredBySubDataObject ).isSet();
     }
 
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public EList< DataAttribute > getReferredByDataAttribute() {
+        if( referredByDataAttribute == null ) {
+            referredByDataAttribute = new EObjectWithInverseEList.Unsettable< DataAttribute >( DataAttribute.class,
+                    this, NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE,
+                    NsdPackage.DATA_ATTRIBUTE__REFERS_TO_PRESENCE_CONDITION );
+        }
+        return referredByDataAttribute;
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public void unsetReferredByDataAttribute() {
+        if( referredByDataAttribute != null ) ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).unset();
+    }
+
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @Override
+    public boolean isSetReferredByDataAttribute() {
+        return referredByDataAttribute != null && ( ( InternalEList.Unsettable< ? > ) referredByDataAttribute ).isSet();
+    }
+
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -599,6 +646,9 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
         case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
             return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredBySubDataObject() )
                     .basicAdd( otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
+            return ( ( InternalEList< InternalEObject > ) ( InternalEList< ? > ) getReferredByDataAttribute() )
+                    .basicAdd( otherEnd, msgs );
         }
         return super.eInverseAdd( otherEnd, featureID, msgs );
     }
@@ -620,6 +670,8 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
                     msgs );
         case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
             return ( ( InternalEList< ? > ) getReferredBySubDataObject() ).basicRemove( otherEnd, msgs );
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
+            return ( ( InternalEList< ? > ) getReferredByDataAttribute() ).basicRemove( otherEnd, msgs );
         }
         return super.eInverseRemove( otherEnd, featureID, msgs );
     }
@@ -663,6 +715,8 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
             return getReferredByDataObjectForDerivedStatistics();
         case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
             return getReferredBySubDataObject();
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
+            return getReferredByDataAttribute();
         }
         return super.eGet( featureID, resolve, coreType );
     }
@@ -703,6 +757,10 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
             getReferredBySubDataObject().clear();
             getReferredBySubDataObject().addAll( ( Collection< ? extends SubDataObject > ) newValue );
             return;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
+            getReferredByDataAttribute().clear();
+            getReferredByDataAttribute().addAll( ( Collection< ? extends DataAttribute > ) newValue );
+            return;
         }
         super.eSet( featureID, newValue );
     }
@@ -739,6 +797,9 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
         case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
             unsetReferredBySubDataObject();
             return;
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
+            unsetReferredByDataAttribute();
+            return;
         }
         super.eUnset( featureID );
     }
@@ -767,6 +828,8 @@ public class PresenceConditionImpl extends NsdObjectImpl implements PresenceCond
             return isSetReferredByDataObjectForDerivedStatistics();
         case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_SUB_DATA_OBJECT:
             return isSetReferredBySubDataObject();
+        case NsdPackage.PRESENCE_CONDITION__REFERRED_BY_DATA_ATTRIBUTE:
+            return isSetReferredByDataAttribute();
         }
         return super.eIsSet( featureID );
     }