diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
index 816c3a27236565a1729fb6d324253b00f2b93302..5c1937d0ac8e0ed4ef1776b5a549757c65f828e2 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.ecore
@@ -1271,30 +1271,6 @@
       <details key="name" value="tNS"/>
       <details key="kind" value="elementOnly"/>
     </eAnnotations>
-    <eOperations name="findCDC" eType="#//CDC">
-      <eParameters name="cDCName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="console" eType="#//IRiseClipseConsole"/>
-    </eOperations>
-    <eOperations name="findPresenceCondition" eType="#//PresenceCondition">
-      <eParameters name="presenceConditionName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="console" eType="#//IRiseClipseConsole"/>
-    </eOperations>
-    <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>
-    <eOperations name="findEnumeration" eType="#//Enumeration">
-      <eParameters name="enumerationName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="console" eType="#//IRiseClipseConsole"/>
-    </eOperations>
-    <eOperations name="findBasicType" eType="#//BasicType">
-      <eParameters name="basicTypeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="console" eType="#//IRiseClipseConsole"/>
-    </eOperations>
-    <eOperations name="findConstructedAttribute" eType="#//ConstructedAttribute">
-      <eParameters name="constructedAttributeName" 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/parentNS">
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
index 736e49b033b4adc5b9cca19be7d49ad962c69924..17cb7ee59dda4c65b823d32a87dc2abd33726015 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/model/nsd.genmodel
@@ -330,30 +330,6 @@
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//NS/cDCs"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//NS/lNClasses"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference nsd.ecore#//NS/referredByDependsOn"/>
-      <genOperations ecoreOperation="nsd.ecore#//NS/findCDC">
-        <genParameters ecoreParameter="nsd.ecore#//NS/findCDC/cDCName"/>
-        <genParameters ecoreParameter="nsd.ecore#//NS/findCDC/console"/>
-      </genOperations>
-      <genOperations ecoreOperation="nsd.ecore#//NS/findPresenceCondition">
-        <genParameters ecoreParameter="nsd.ecore#//NS/findPresenceCondition/presenceConditionName"/>
-        <genParameters ecoreParameter="nsd.ecore#//NS/findPresenceCondition/console"/>
-      </genOperations>
-      <genOperations ecoreOperation="nsd.ecore#//NS/findFunctionalConstraint">
-        <genParameters ecoreParameter="nsd.ecore#//NS/findFunctionalConstraint/functionalConstraintAbbreviation"/>
-        <genParameters ecoreParameter="nsd.ecore#//NS/findFunctionalConstraint/console"/>
-      </genOperations>
-      <genOperations ecoreOperation="nsd.ecore#//NS/findEnumeration">
-        <genParameters ecoreParameter="nsd.ecore#//NS/findEnumeration/enumerationName"/>
-        <genParameters ecoreParameter="nsd.ecore#//NS/findEnumeration/console"/>
-      </genOperations>
-      <genOperations ecoreOperation="nsd.ecore#//NS/findBasicType">
-        <genParameters ecoreParameter="nsd.ecore#//NS/findBasicType/basicTypeName"/>
-        <genParameters ecoreParameter="nsd.ecore#//NS/findBasicType/console"/>
-      </genOperations>
-      <genOperations ecoreOperation="nsd.ecore#//NS/findConstructedAttribute">
-        <genParameters ecoreParameter="nsd.ecore#//NS/findConstructedAttribute/constructedAttributeName"/>
-        <genParameters ecoreParameter="nsd.ecore#//NS/findConstructedAttribute/console"/>
-      </genOperations>
     </genClasses>
     <genClasses ecoreClass="nsd.ecore#//NSDoc">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference nsd.ecore#//NSDoc/doc"/>
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 57e278da2127af7f0c6a93a234fb67e05a78c9b3..36791dacbcc7c6852719caefa5183e6a4140f105 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NS.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/NS.java
@@ -19,7 +19,6 @@
  */
 package fr.centralesupelec.edf.riseclipse.iec61850.nsd;
 
-import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
 import org.eclipse.emf.common.util.EList;
 
 /**
@@ -610,53 +609,4 @@ public interface NS extends Copyrighted, AgNSIdentification, AgUML, AgNSdesc {
      */
     boolean isSetReferredByDependsOn();
 
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
-     * @generated
-     */
-    CDC findCDC( String cDCName, IRiseClipseConsole console );
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
-     * @generated
-     */
-    PresenceCondition findPresenceCondition( String presenceConditionName, IRiseClipseConsole console );
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
-     * @generated
-     */
-    FunctionalConstraint findFunctionalConstraint( String functionalConstraintAbbreviation,
-            IRiseClipseConsole console );
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
-     * @generated
-     */
-    Enumeration findEnumeration( String enumerationName, IRiseClipseConsole console );
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
-     * @generated
-     */
-    BasicType findBasicType( String basicTypeName, IRiseClipseConsole console );
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @model consoleType="fr.centralesupelec.edf.riseclipse.iec61850.nsd.IRiseClipseConsole"
-     * @generated
-     */
-    ConstructedAttribute findConstructedAttribute( String constructedAttributeName, 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 18a8b85d584e6a4a0cc3daf6eae9544b44158696..53b5bb757b73e81c96aecde14a7de79a6c1a1c9b 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
@@ -4695,60 +4695,6 @@ public interface NsdPackage extends EPackage {
      */
     int NS___BUILD_EXPLICIT_LINKS__IRISECLIPSECONSOLE_BOOLEAN = COPYRIGHTED___BUILD_EXPLICIT_LINKS__IRISECLIPSECONSOLE_BOOLEAN;
 
-    /**
-     * The operation id for the '<em>Find CDC</em>' operation.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int NS___FIND_CDC__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 0;
-
-    /**
-     * The operation id for the '<em>Find Presence Condition</em>' operation.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 1;
-
-    /**
-     * The 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 operation id for the '<em>Find Enumeration</em>' operation.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int NS___FIND_ENUMERATION__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 3;
-
-    /**
-     * The operation id for the '<em>Find Basic Type</em>' operation.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int NS___FIND_BASIC_TYPE__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 4;
-
-    /**
-     * The operation id for the '<em>Find Constructed Attribute</em>' operation.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int NS___FIND_CONSTRUCTED_ATTRIBUTE__STRING_IRISECLIPSECONSOLE = COPYRIGHTED_OPERATION_COUNT + 5;
-
     /**
      * The number of operations of the '<em>NS</em>' class.
      * <!-- begin-user-doc -->
@@ -4756,7 +4702,7 @@ public interface NsdPackage extends EPackage {
      * @generated
      * @ordered
      */
-    int NS_OPERATION_COUNT = COPYRIGHTED_OPERATION_COUNT + 6;
+    int NS_OPERATION_COUNT = COPYRIGHTED_OPERATION_COUNT + 0;
 
     /**
      * The feature id for the '<em><b>Line Number</b></em>' attribute.
@@ -9454,66 +9400,6 @@ public interface NsdPackage extends EPackage {
      */
     EReference getNS_ReferredByDependsOn();
 
-    /**
-     * Returns the meta object for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findCDC(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) <em>Find CDC</em>}' operation.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the '<em>Find CDC</em>' operation.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findCDC(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole)
-     * @generated
-     */
-    EOperation getNS__FindCDC__String_IRiseClipseConsole();
-
-    /**
-     * Returns the meta object for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findPresenceCondition(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) <em>Find Presence Condition</em>}' operation.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the '<em>Find Presence Condition</em>' operation.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findPresenceCondition(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole)
-     * @generated
-     */
-    EOperation getNS__FindPresenceCondition__String_IRiseClipseConsole();
-
-    /**
-     * Returns the meta object for 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 the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findEnumeration(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) <em>Find Enumeration</em>}' operation.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the '<em>Find Enumeration</em>' operation.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findEnumeration(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole)
-     * @generated
-     */
-    EOperation getNS__FindEnumeration__String_IRiseClipseConsole();
-
-    /**
-     * Returns the meta object for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findBasicType(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) <em>Find Basic Type</em>}' operation.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the '<em>Find Basic Type</em>' operation.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findBasicType(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole)
-     * @generated
-     */
-    EOperation getNS__FindBasicType__String_IRiseClipseConsole();
-
-    /**
-     * Returns the meta object for the '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findConstructedAttribute(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole) <em>Find Constructed Attribute</em>}' operation.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the '<em>Find Constructed Attribute</em>' operation.
-     * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS#findConstructedAttribute(java.lang.String, fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole)
-     * @generated
-     */
-    EOperation getNS__FindConstructedAttribute__String_IRiseClipseConsole();
-
     /**
      * Returns the meta object for class '{@link fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc <em>NS Doc</em>}'.
      * <!-- begin-user-doc -->
@@ -12559,59 +12445,6 @@ public interface NsdPackage extends EPackage {
          */
         EReference NS__REFERRED_BY_DEPENDS_ON = eINSTANCE.getNS_ReferredByDependsOn();
 
-        /**
-         * The meta object literal for the '<em><b>Find CDC</b></em>' operation.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EOperation NS___FIND_CDC__STRING_IRISECLIPSECONSOLE = eINSTANCE.getNS__FindCDC__String_IRiseClipseConsole();
-
-        /**
-         * The meta object literal for the '<em><b>Find Presence Condition</b></em>' operation.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EOperation NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE = eINSTANCE
-                .getNS__FindPresenceCondition__String_IRiseClipseConsole();
-
-        /**
-         * The meta object literal for the '<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 '<em><b>Find Enumeration</b></em>' operation.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EOperation NS___FIND_ENUMERATION__STRING_IRISECLIPSECONSOLE = eINSTANCE
-                .getNS__FindEnumeration__String_IRiseClipseConsole();
-
-        /**
-         * The meta object literal for the '<em><b>Find Basic Type</b></em>' operation.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EOperation NS___FIND_BASIC_TYPE__STRING_IRISECLIPSECONSOLE = eINSTANCE
-                .getNS__FindBasicType__String_IRiseClipseConsole();
-
-        /**
-         * The meta object literal for the '<em><b>Find Constructed Attribute</b></em>' operation.
-         * <!-- begin-user-doc -->
-         * <!-- end-user-doc -->
-         * @generated
-         */
-        EOperation NS___FIND_CONSTRUCTED_ATTRIBUTE__STRING_IRISECLIPSECONSOLE = eINSTANCE
-                .getNS__FindConstructedAttribute__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 -->
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 d45981ac5867cf9fbde2590589fd2ead26aa1f84..4120efe8a71acf022a72d9778fb2c2b6d94fd2a6 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
@@ -3575,12 +3575,14 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         if( super.buildExplicitLinks( console, forceUpdate ) ) return true;
 
         NS ns = getParentCDC().getParentCDCs().getParentNS();
+        NsdResourceSetImpl rs = getResourceSet();
+        if( rs == null ) return false;
 
         String messagePrefix = "[NSD links] while resolving link from DataAttribute (name: " + getName()
                 + ", NS id: " + ns.getId() + ", line: " + getLineNumber() + "): ";
 
         if( isSetFc() ) {
-            FunctionalConstraint foundFC = ns.findFunctionalConstraint( getFc(), console );
+            FunctionalConstraint foundFC = rs.findFunctionalConstraint( getFc(), getNsIdentification(), console );
 
             if( foundFC == null ) {
                 console.warning( messagePrefix + "FunctionalConstraint (abbreviation: " + getFc() + ") not found" );
@@ -3596,7 +3598,7 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
         }
 
         if( isSetPresCond() ) {
-            PresenceCondition foundPC = ns.findPresenceCondition( getPresCond(), console );
+            PresenceCondition foundPC = rs.findPresenceCondition( getPresCond(), getNsIdentification(), console );
 
             if( foundPC == null ) {
                 console.warning( messagePrefix + "PresenceCondition (name: " + getPresCond() + ") not found" );
@@ -3650,7 +3652,7 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
             if( isSetType() ) {
                 switch( getTypeKind().getValue() ) {
                 case DefinedAttributeTypeKind.BASIC_VALUE:
-                    BasicType foundBT = ns.findBasicType( getType(), console );
+                    BasicType foundBT = rs.findBasicType( getType(), getNsIdentification(), console );
 
                     if( foundBT == null ) {
                         console.warning( messagePrefix + "BasicType (name: " + getType() + ") not found" );
@@ -3664,7 +3666,7 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
                     }
                     break;
                 case DefinedAttributeTypeKind.CONSTRUCTED_VALUE:
-                    ConstructedAttribute foundCA = ns.findConstructedAttribute( getType(), console );
+                    ConstructedAttribute foundCA = rs.findConstructedAttribute( getType(), getNsIdentification(), console );
 
                     if( foundCA == null ) {
                         console.warning( messagePrefix + "ConstructedAttribute (name: " + getType() + ") not found" );
@@ -3680,7 +3682,7 @@ public class DataAttributeImpl extends DocumentedClassImpl implements DataAttrib
                     }
                     break;
                 case DefinedAttributeTypeKind.ENUMERATED_VALUE:
-                    Enumeration foundEn = ns.findEnumeration( getType(), console );
+                    Enumeration foundEn = rs.findEnumeration( getType(), getNsIdentification(), console );
 
                     if( foundEn == null ) {
                         console.warning( messagePrefix + "Enumeration (name: " + getType() + ") not found" );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java
index cc7dcccebac7975751ecd768d20d71428fcc7732..5521ece70f101efd401b7670fa59fa2db0521508 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/DataObjectImpl.java
@@ -2188,12 +2188,14 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         if( super.buildExplicitLinks( console, forceUpdate ) ) return true;
 
         NS ns = getParentAnyLNClass().getParentLNClasses().getParentNS();
+        NsdResourceSetImpl rs = getResourceSet();
+        if( rs == null ) return false;
 
         String messagePrefix = "[NSD links] while resolving link from DataObject (name: " + getName()
                 + ", NS id: " + ns.getId() + ", line: " + getLineNumber() + "): ";
 
         if( isSetType() ) {
-            CDC foundCDC = ns.findCDC( getType(), console );
+            CDC foundCDC = rs.findCDC( getType(), getNsIdentification(), console );
 
             if( foundCDC == null ) {
                 console.warning( messagePrefix + "CDC (name: " + getType() + ") not found" );
@@ -2207,7 +2209,7 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         }
 
         if( isSetPresCond() ) {
-            PresenceCondition foundPC = ns.findPresenceCondition( getPresCond(), console );
+            PresenceCondition foundPC = rs.findPresenceCondition( getPresCond(), getNsIdentification(), console );
 
             if( foundPC == null ) {
                 console.warning( messagePrefix + "PresenceCondition (name: " + getPresCond() + ") not found" );
@@ -2221,7 +2223,7 @@ public class DataObjectImpl extends DocumentedClassImpl implements DataObject {
         }
 
         if( isSetDsPresCond() ) {
-            PresenceCondition foundPC = ns.findPresenceCondition( getDsPresCond(), console );
+            PresenceCondition foundPC = rs.findPresenceCondition( getDsPresCond(), getNsIdentification(), console );
             if( foundPC == null ) {
                 console.warning( messagePrefix + "PresenceCondition (name: " + getDsPresCond() + ") not found" );
             }
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java
index 575a6feafada045294c04fa245dece564ebb75e3..b53cf874a3deee3b8e4ed1e3a26f4034f401597a 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/EnumerationImpl.java
@@ -26,6 +26,7 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Literal;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsIdentification;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceSetImpl;
 import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
 
 import java.util.Collection;
@@ -787,12 +788,14 @@ public class EnumerationImpl extends TitledClassImpl implements Enumeration {
         if( super.buildExplicitLinks( console, forceUpdate ) ) return true;
 
         NS ns = getParentEnumerations().getParentNS();
+        NsdResourceSetImpl rs = getResourceSet();
+        if( rs == null ) return false;
 
         String messagePrefix = "[NSD links] while resolving link from Enumeration (name: " + getName()
                 + ", NS id: " + ns.getId() + ", line: " + getLineNumber() + "): ";
 
         if( isSetInheritedFrom() ) {
-            Enumeration foundBase = ns.findEnumeration( getInheritedFrom(), console );
+            Enumeration foundBase = rs.findEnumeration( getInheritedFrom(), getNsIdentification(), console );
             if( foundBase == null ) {
                 console.warning( messagePrefix + "Enumeration (name: " + getInheritedFrom() + ") not found" );
             }
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 db6ada47010d74defd59447f067fe12fae01df18..15eb4e55991cfb7693118b6460b70460f575eb83 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
@@ -23,29 +23,22 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Abbreviations;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgNSIdentification;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgNSdesc;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.AgUML;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicType;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.BasicTypes;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDC;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.CDCs;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Changes;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttribute;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.ConstructedAttributes;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.DependsOn;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumeration;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Enumerations;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraint;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.FunctionalConstraints;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
-import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceConditions;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PubStage;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsIdentification;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceSetImpl;
 import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
-import java.lang.reflect.InvocationTargetException;
 import java.util.Collection;
 import javax.xml.datatype.XMLGregorianCalendar;
 
@@ -1724,147 +1717,6 @@ public class NSImpl extends CopyrightedImpl implements NS {
         return referredByDependsOn != null && ( ( InternalEList.Unsettable< ? > ) referredByDependsOn ).isSet();
     }
 
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated NOT
-     */
-    @Override
-    public CDC findCDC( String cDCName, IRiseClipseConsole console ) {
-        if( isSetCDCs() ) {
-            CDC found = getCDCs().getCDC().stream().filter( cdc -> cdc.getName().equals( cDCName ) ).findAny()
-                    .orElse( null );
-            if( found != null ) return found;
-        }
-
-        // Look for in NS referred by DependsOn
-        // Warning: NS referred by DependsOn may not be loaded
-        if( isSetDependsOn() && ( getDependsOn().isSetRefersToNS() ) ) {
-            getDependsOn().buildExplicitLinks( console, false );
-            return getDependsOn().getRefersToNS().findCDC( cDCName, console );
-        }
-
-        return null;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated NOT
-     */
-    @Override
-    public PresenceCondition findPresenceCondition( String presenceConditionName, IRiseClipseConsole console ) {
-        if( isSetPresenceConditions() ) {
-            PresenceCondition found = getPresenceConditions().getPresenceCondition().stream()
-                    .filter( cond -> cond.getName().equals( presenceConditionName ) ).findAny().orElse( null );
-            if( found != null ) return found;
-        }
-
-        // Look for in NS referred by DependsOn
-        // Warning: NS referred by DependsOn may not be loaded
-        if( isSetDependsOn() && ( getDependsOn().isSetRefersToNS() ) ) {
-            getDependsOn().buildExplicitLinks( console, false );
-            return getDependsOn().getRefersToNS().findPresenceCondition( presenceConditionName, console );
-        }
-
-        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;
-        }
-
-        // Look for in NS referred by DependsOn
-        // Warning: NS referred by DependsOn may not be loaded
-        if( isSetDependsOn() && ( getDependsOn().isSetRefersToNS() ) ) {
-            getDependsOn().buildExplicitLinks( console, false );
-            return getDependsOn().getRefersToNS().findFunctionalConstraint( functionalConstraintAbbreviation, console );
-        }
-
-        return null;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated NOT
-     */
-    @Override
-    public Enumeration findEnumeration( String enumerationName, IRiseClipseConsole console ) {
-        if( isSetEnumerations() ) {
-            Enumeration found = getEnumerations().getEnumeration().stream()
-                    .filter( en -> en.getName().equals( enumerationName ) ).findAny().orElse( null );
-            if( found != null ) return found;
-        }
-
-        // Look for in NS referred by DependsOn
-        // Warning: NS referred by DependsOn may not be loaded
-        if( isSetDependsOn() && ( getDependsOn().isSetRefersToNS() ) ) {
-            getDependsOn().buildExplicitLinks( console, false );
-            return getDependsOn().getRefersToNS().findEnumeration( enumerationName, console );
-        }
-
-        return null;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated NOT
-     */
-    @Override
-    public BasicType findBasicType( String basicTypeName, IRiseClipseConsole console ) {
-        if( isSetBasicTypes() ) {
-            BasicType found = getBasicTypes().getBasicType().stream()
-                    .filter( bt -> bt.getName().equals( basicTypeName ) ).findAny().orElse( null );
-            if( found != null ) return found;
-        }
-
-        // Look for in NS referred by DependsOn
-        // Warning: NS referred by DependsOn may not be loaded
-        if( isSetDependsOn() && ( getDependsOn().isSetRefersToNS() ) ) {
-            getDependsOn().buildExplicitLinks( console, false );
-            return getDependsOn().getRefersToNS().findBasicType( basicTypeName, console );
-        }
-
-        return null;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated NOT
-     */
-    @Override
-    public ConstructedAttribute findConstructedAttribute( String constructedAttributeName,
-            IRiseClipseConsole console ) {
-        if( isSetConstructedAttributes() ) {
-            ConstructedAttribute found = getConstructedAttributes().getConstructedAttribute().stream()
-                    .filter( ca -> ca.getName().equals( constructedAttributeName ) ).findAny().orElse( null );
-            if( found != null ) return found;
-        }
-
-        // Look for in NS referred by DependsOn
-        // Warning: NS referred by DependsOn may not be loaded
-        if( isSetDependsOn() && ( getDependsOn().isSetRefersToNS() ) ) {
-            getDependsOn().buildExplicitLinks( console, false );
-            return getDependsOn().getRefersToNS().findConstructedAttribute( constructedAttributeName, console );
-        }
-
-        return null;
-    }
-
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2841,30 +2693,6 @@ public class NSImpl extends CopyrightedImpl implements NS {
         return super.eDerivedStructuralFeatureID( baseFeatureID, baseClass );
     }
 
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public Object eInvoke( int operationID, EList< ? > arguments ) throws InvocationTargetException {
-        switch( operationID ) {
-        case NsdPackage.NS___FIND_CDC__STRING_IRISECLIPSECONSOLE:
-            return findCDC( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
-        case NsdPackage.NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE:
-            return findPresenceCondition( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
-        case NsdPackage.NS___FIND_FUNCTIONAL_CONSTRAINT__STRING_IRISECLIPSECONSOLE:
-            return findFunctionalConstraint( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
-        case NsdPackage.NS___FIND_ENUMERATION__STRING_IRISECLIPSECONSOLE:
-            return findEnumeration( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
-        case NsdPackage.NS___FIND_BASIC_TYPE__STRING_IRISECLIPSECONSOLE:
-            return findBasicType( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
-        case NsdPackage.NS___FIND_CONSTRUCTED_ATTRIBUTE__STRING_IRISECLIPSECONSOLE:
-            return findConstructedAttribute( ( String ) arguments.get( 0 ), ( IRiseClipseConsole ) arguments.get( 1 ) );
-        }
-        return super.eInvoke( operationID, arguments );
-    }
-
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdObjectImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdObjectImpl.java
index dcb0c33e39a8816752d6001c8aac10fa424d34c1..3a3871a4fe092a8f4252f26f14b45f9e6f4f9562 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdObjectImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/NsdObjectImpl.java
@@ -21,7 +21,7 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.impl;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdObject;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
-
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceSetImpl;
 import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
 import java.lang.reflect.InvocationTargetException;
 import org.eclipse.emf.common.notify.Notification;
@@ -31,6 +31,7 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.emf.ecore.resource.ResourceSet;
 
 /**
  * <!-- begin-user-doc -->
@@ -273,4 +274,10 @@ public abstract class NsdObjectImpl extends MinimalEObjectImpl.Container impleme
         return result.toString();
     }
 
+    public NsdResourceSetImpl getResourceSet() {
+        ResourceSet rs = eResource().getResourceSet();
+        if( rs instanceof NsdResourceSetImpl ) return ( NsdResourceSetImpl ) rs;
+        return null;
+    }
+
 } //NsdObjectImpl
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 8fed7feb6cf767350ff973184241e527eb5efb26..711115b5c75fb3f9e5906f0269fbabcc60cf362b 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
@@ -2604,66 +2604,6 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         return ( EReference ) nsEClass.getEStructuralFeatures().get( 10 );
     }
 
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EOperation getNS__FindCDC__String_IRiseClipseConsole() {
-        return nsEClass.getEOperations().get( 0 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EOperation getNS__FindPresenceCondition__String_IRiseClipseConsole() {
-        return nsEClass.getEOperations().get( 1 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EOperation getNS__FindFunctionalConstraint__String_IRiseClipseConsole() {
-        return nsEClass.getEOperations().get( 2 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EOperation getNS__FindEnumeration__String_IRiseClipseConsole() {
-        return nsEClass.getEOperations().get( 3 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EOperation getNS__FindBasicType__String_IRiseClipseConsole() {
-        return nsEClass.getEOperations().get( 4 );
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    @Override
-    public EOperation getNS__FindConstructedAttribute__String_IRiseClipseConsole() {
-        return nsEClass.getEOperations().get( 5 );
-    }
-
     /**
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -4226,12 +4166,6 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
         createEReference( nsEClass, NS__CD_CS );
         createEReference( nsEClass, NS__LN_CLASSES );
         createEReference( nsEClass, NS__REFERRED_BY_DEPENDS_ON );
-        createEOperation( nsEClass, NS___FIND_CDC__STRING_IRISECLIPSECONSOLE );
-        createEOperation( nsEClass, NS___FIND_PRESENCE_CONDITION__STRING_IRISECLIPSECONSOLE );
-        createEOperation( nsEClass, NS___FIND_FUNCTIONAL_CONSTRAINT__STRING_IRISECLIPSECONSOLE );
-        createEOperation( nsEClass, NS___FIND_ENUMERATION__STRING_IRISECLIPSECONSOLE );
-        createEOperation( nsEClass, NS___FIND_BASIC_TYPE__STRING_IRISECLIPSECONSOLE );
-        createEOperation( nsEClass, NS___FIND_CONSTRUCTED_ATTRIBUTE__STRING_IRISECLIPSECONSOLE );
 
         nsDocEClass = createEClass( NS_DOC );
         createEReference( nsDocEClass, NS_DOC__DOC );
@@ -5103,36 +5037,6 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
                 !IS_DERIVED, !IS_ORDERED );
 
-        EOperation op = initEOperation( getNS__FindCDC__String_IRiseClipseConsole(), this.getCDC(), "findCDC", 0, 1,
-                IS_UNIQUE, IS_ORDERED );
-        addEParameter( op, ecorePackage.getEString(), "cDCName", 0, 1, IS_UNIQUE, IS_ORDERED );
-        addEParameter( op, this.getIRiseClipseConsole(), "console", 0, 1, IS_UNIQUE, IS_ORDERED );
-
-        op = initEOperation( getNS__FindPresenceCondition__String_IRiseClipseConsole(), this.getPresenceCondition(),
-                "findPresenceCondition", 0, 1, IS_UNIQUE, IS_ORDERED );
-        addEParameter( op, ecorePackage.getEString(), "presenceConditionName", 0, 1, IS_UNIQUE, IS_ORDERED );
-        addEParameter( op, this.getIRiseClipseConsole(), "console", 0, 1, IS_UNIQUE, IS_ORDERED );
-
-        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 );
-
-        op = initEOperation( getNS__FindEnumeration__String_IRiseClipseConsole(), this.getEnumeration(),
-                "findEnumeration", 0, 1, IS_UNIQUE, IS_ORDERED );
-        addEParameter( op, ecorePackage.getEString(), "enumerationName", 0, 1, IS_UNIQUE, IS_ORDERED );
-        addEParameter( op, this.getIRiseClipseConsole(), "console", 0, 1, IS_UNIQUE, IS_ORDERED );
-
-        op = initEOperation( getNS__FindBasicType__String_IRiseClipseConsole(), this.getBasicType(), "findBasicType", 0,
-                1, IS_UNIQUE, IS_ORDERED );
-        addEParameter( op, ecorePackage.getEString(), "basicTypeName", 0, 1, IS_UNIQUE, IS_ORDERED );
-        addEParameter( op, this.getIRiseClipseConsole(), "console", 0, 1, IS_UNIQUE, IS_ORDERED );
-
-        op = initEOperation( getNS__FindConstructedAttribute__String_IRiseClipseConsole(),
-                this.getConstructedAttribute(), "findConstructedAttribute", 0, 1, IS_UNIQUE, IS_ORDERED );
-        addEParameter( op, ecorePackage.getEString(), "constructedAttributeName", 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_ParentNSDoc(), "doc", null, 0, -1, NSDoc.class,
                 !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, IS_UNSETTABLE, IS_UNIQUE,
@@ -5371,8 +5275,8 @@ public class NsdPackageImpl extends EPackageImpl implements NsdPackage {
                 1, NsdObject.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE,
                 !IS_DERIVED, IS_ORDERED );
 
-        op = initEOperation( getNsdObject__BuildExplicitLinks__IRiseClipseConsole_boolean(), ecorePackage.getEBoolean(),
-                "buildExplicitLinks", 0, 1, IS_UNIQUE, IS_ORDERED );
+        EOperation op = initEOperation( getNsdObject__BuildExplicitLinks__IRiseClipseConsole_boolean(),
+                ecorePackage.getEBoolean(), "buildExplicitLinks", 0, 1, IS_UNIQUE, IS_ORDERED );
         addEParameter( op, this.getIRiseClipseConsole(), "console", 0, 1, IS_UNIQUE, IS_ORDERED );
         addEParameter( op, ecorePackage.getEBoolean(), "forceUpdate", 0, 1, IS_UNIQUE, IS_ORDERED );
 
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java
index 2e5a9df4cd2bbe64e6f90d3cb36284be23a6686d..58326e1d4f107f90ff0cd1c7080b0407a44dc782 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataAttributeImpl.java
@@ -2425,12 +2425,14 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
         if( super.buildExplicitLinks( console, forceUpdate ) ) return true;
 
         NS ns = getParentConstructedAttribute().getParentConstructedAttributes().getParentNS();
+        NsdResourceSetImpl rs = getResourceSet();
+        if( rs == null ) return false;
 
         String messagePrefix = "[NSD links] while resolving link from SubDataAttribute (name: " + getName()
                 + ", NS id: " + ns.getId() + ", line: " + getLineNumber() + "): ";
 
         if( isSetPresCond() ) {
-            PresenceCondition foundPC = ns.findPresenceCondition( getPresCond(), console );
+            PresenceCondition foundPC = rs.findPresenceCondition( getPresCond(), getNsIdentification(), console );
             if( foundPC == null ) {
                 console.warning( messagePrefix + "PresenceCondition (name: " + getPresCond() + ") not found" );
             }
@@ -2447,7 +2449,7 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
             if( isSetType() ) {
                 switch( getTypeKind().getValue() ) {
                 case DefinedAttributeTypeKind.BASIC_VALUE:
-                    BasicType foundBT = ns.findBasicType( getType(), console );
+                    BasicType foundBT = rs.findBasicType( getType(), getNsIdentification(), console );
 
                     if( foundBT == null ) {
                         console.warning( messagePrefix + "BasicType (name: " + getType() + ") not found" );
@@ -2461,7 +2463,7 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
                     }
                     break;
                 case DefinedAttributeTypeKind.CONSTRUCTED_VALUE:
-                    ConstructedAttribute foundCA = ns.findConstructedAttribute( getType(), console );
+                    ConstructedAttribute foundCA = rs.findConstructedAttribute( getType(), getNsIdentification(), console );
 
                     if( foundCA == null ) {
                         console.warning( messagePrefix + "ConstructedAttribute (name: " + getType() + ") not found" );
@@ -2477,7 +2479,7 @@ public class SubDataAttributeImpl extends DocumentedClassImpl implements SubData
                     }
                     break;
                 case DefinedAttributeTypeKind.ENUMERATED_VALUE:
-                    Enumeration foundEn = ns.findEnumeration( getType(), console );
+                    Enumeration foundEn = rs.findEnumeration( getType(), getNsIdentification(), console );
 
                     if( foundEn == null ) {
                         console.warning( messagePrefix + "Enumeration (name: " + getType() + ") not found" );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java
index 2d7b79fc50307568209a1fe6e127afac17c7a3ca..400dbd430fa3598c14b332ee0eb088151c863d09 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/impl/SubDataObjectImpl.java
@@ -2184,12 +2184,14 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         if( super.buildExplicitLinks( console, forceUpdate ) ) return true;
 
         NS ns = getParentCDC().getParentCDCs().getParentNS();
+        NsdResourceSetImpl rs = getResourceSet();
+        if( rs == null ) return false;
 
         String messagePrefix = "[NSD links] while resolving link from SubDataObject (name: " + getName()
                 + ", NS id: " + ns.getId() + ", line: " + getLineNumber() + "): ";
 
         if( isSetType() ) {
-            CDC foundCDC = ns.findCDC( getType(), console );
+            CDC foundCDC = rs.findCDC( getType(), getNsIdentification(), console );
 
             if( foundCDC == null ) {
                 console.warning( messagePrefix + "CDC (name: " + getType() + ") not found" );
@@ -2203,7 +2205,7 @@ public class SubDataObjectImpl extends DocumentedClassImpl implements SubDataObj
         }
 
         if( isSetPresCond() ) {
-            PresenceCondition foundPC = ns.findPresenceCondition( getPresCond(), console );
+            PresenceCondition foundPC = rs.findPresenceCondition( getPresCond(), getNsIdentification(), console );
 
             if( foundPC == null ) {
                 console.warning( messagePrefix + "PresenceCondition (name: " + getPresCond() + ") not found" );
diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java
index e273a7ac0a78857c17e7ef021265c728f830684e..63c24390db51bb3ad44fa1aafd8faec62a4c2e70 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceSetImpl.java
@@ -312,6 +312,13 @@ public class NsdResourceSetImpl extends AbstractRiseClipseResourceSet {
         return lnClassStream;
     }
 
+    public LNClass findLNClass( String lnClass, NsIdentification nsIdentification, IRiseClipseConsole console ) {
+        return getLNClassStream( nsIdentification )
+                .filter( c -> c.getName().equals( lnClass ) )
+                .findAny()
+                .orElse( null );
+    }
+    
     public Stream< Abbreviation > getAllAbbreviationStream() {
         Stream< Abbreviation > abbreviationStream = Stream.empty();
         Iterator< NS > it = nsdResources.values().iterator();
@@ -342,6 +349,13 @@ public class NsdResourceSetImpl extends AbstractRiseClipseResourceSet {
         return abbreviationStream;
     }
 
+    public Abbreviation findAbbreviation( String abb, NsIdentification nsIdentification, IRiseClipseConsole console ) {
+        return getAbbreviationStream( nsIdentification )
+                .filter( a -> a.getName().equals( abb ) )
+                .findAny()
+                .orElse( null );
+    }
+    
     public Stream< Enumeration > getAllEnumerationStream() {
         Stream< Enumeration > enumerationStream = Stream.empty();
         Iterator< NS > it = nsdResources.values().iterator();
@@ -372,6 +386,13 @@ public class NsdResourceSetImpl extends AbstractRiseClipseResourceSet {
         return enumerationStream;
     }
 
+    public Enumeration findEnumeration( String en, NsIdentification nsIdentification, IRiseClipseConsole console ) {
+        return getEnumerationStream( nsIdentification )
+                .filter( e -> e.getName().equals( en ) )
+                .findAny()
+                .orElse( null );
+    }
+    
     public Stream< CDC > getAllCDCStream() {
         Stream< CDC > cdcStream = Stream.empty();
         Iterator< NS > it = nsdResources.values().iterator();
@@ -402,6 +423,13 @@ public class NsdResourceSetImpl extends AbstractRiseClipseResourceSet {
         return cdcStream;
     }
 
+    public CDC findCDC( String cdc, NsIdentification nsIdentification, IRiseClipseConsole console ) {
+        return getCDCStream( nsIdentification )
+                .filter( c -> c.getName().equals( cdc ) )
+                .findAny()
+                .orElse( null );
+    }
+    
     public Stream< ConstructedAttribute > getAllConstructedAttributeStream() {
         Stream< ConstructedAttribute > constructedAttributeStream = Stream.empty();
         Iterator< NS > it = nsdResources.values().iterator();
@@ -432,6 +460,13 @@ public class NsdResourceSetImpl extends AbstractRiseClipseResourceSet {
         return constructedAttributeStream;
     }
 
+    public ConstructedAttribute findConstructedAttribute( String att, NsIdentification nsIdentification, IRiseClipseConsole console ) {
+        return getConstructedAttributeStream( nsIdentification )
+                .filter( c -> c.getName().equals( att ) )
+                .findAny()
+                .orElse( null );
+    }
+    
     public Stream< BasicType > getAllBasicTypeStream() {
         Stream< BasicType > basicTypeStream = Stream.empty();
         Iterator< NS > it = nsdResources.values().iterator();
@@ -462,6 +497,13 @@ public class NsdResourceSetImpl extends AbstractRiseClipseResourceSet {
         return basicTypeStream;
     }
 
+    public BasicType findBasicType( String basic, NsIdentification nsIdentification, IRiseClipseConsole console ) {
+        return getBasicTypeStream( nsIdentification )
+                .filter( b -> b.getName().equals( basic ) )
+                .findAny()
+                .orElse( null );
+    }
+    
     public Stream< FunctionalConstraint > getAllFunctionalConstraintStream() {
         Stream< FunctionalConstraint > functionalConstraintStream = Stream.empty();
         Iterator< NS > it = nsdResources.values().iterator();
@@ -492,6 +534,13 @@ public class NsdResourceSetImpl extends AbstractRiseClipseResourceSet {
         return functionalConstraintStream;
     }
 
+    public FunctionalConstraint findFunctionalConstraint( String fc, NsIdentification nsIdentification, IRiseClipseConsole console ) {
+        return getFunctionalConstraintStream( nsIdentification )
+                .filter( f -> f.getAbbreviation().equals( fc ) )
+                .findAny()
+                .orElse( null );
+    }
+    
     public Stream< PresenceCondition > getAllPresenceConditionStream() {
         Stream< PresenceCondition > presenceConditionStream = Stream.empty();
         Iterator< NS > it = nsdResources.values().iterator();
@@ -522,6 +571,13 @@ public class NsdResourceSetImpl extends AbstractRiseClipseResourceSet {
         return presenceConditionStream;
     }
 
+    public PresenceCondition findPresenceCondition( String presence, NsIdentification nsIdentification, IRiseClipseConsole console ) {
+        return getPresenceConditionStream( nsIdentification )
+                .filter( p -> p.getName().equals( presence ) )
+                .findAny()
+                .orElse( null );
+    }
+    
     public Doc findDoc( NsIdentification identification, String id ) {
         for( NSDoc nsdoc : nsdocResources.values() ) {
             Optional< Doc > doc = nsdoc