diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceFactoryImpl.java b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceFactoryImpl.java
index e518baae2725780d5cfc9c01889dc24d1a0babd7..79b2fea0e7fe7eb808588456e2bc4b11d1599009 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceFactoryImpl.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.nsd/src/fr/centralesupelec/edf/riseclipse/iec61850/nsd/util/NsdResourceFactoryImpl.java
@@ -21,12 +21,12 @@ package fr.centralesupelec.edf.riseclipse.iec61850.nsd.util;
 
 import org.eclipse.emf.common.util.URI;
 
-import org.eclipse.emf.ecore.resource.Resource;
-
 import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl;
 
 import org.eclipse.emf.ecore.xmi.XMLResource;
 
+import fr.centralesupelec.edf.riseclipse.util.IRiseClipseResourceFactory;
+
 /**
  * <!-- begin-user-doc -->
  * The <b>Resource Factory</b> associated with the package.
@@ -34,7 +34,7 @@ import org.eclipse.emf.ecore.xmi.XMLResource;
  * @see fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsdResourceImpl
  * @generated
  */
-public class NsdResourceFactoryImpl extends ResourceFactoryImpl {
+public class NsdResourceFactoryImpl extends ResourceFactoryImpl implements IRiseClipseResourceFactory {
     /**
      * Creates an instance of the resource factory.
      * <!-- begin-user-doc -->
@@ -52,8 +52,8 @@ public class NsdResourceFactoryImpl extends ResourceFactoryImpl {
      * @generated
      */
     @Override
-    public Resource createResource( URI uri ) {
-        XMLResource result = new NsdResourceImpl( uri );
+    public NsdResourceImpl createResource( URI uri ) {
+        NsdResourceImpl result = new NsdResourceImpl( uri );
         result.getDefaultSaveOptions().put( XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE );
         result.getDefaultLoadOptions().put( XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE );
 
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 956b24f6db5072d78de059e852ef6249cccd3c43..db39d9c18a5ce42935615aafcbc9ae6b155c09b9 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
@@ -26,6 +26,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Stream;
 
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
 
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.Doc;
@@ -34,8 +35,10 @@ import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClass;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.LNClasses;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NS;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NSDoc;
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.NsdPackage;
 import fr.centralesupelec.edf.riseclipse.util.AbstractRiseClipseConsole;
 import fr.centralesupelec.edf.riseclipse.util.IRiseClipseConsole;
+import fr.centralesupelec.edf.riseclipse.util.RiseClipseMetamodel;
 import fr.centralesupelec.edf.riseclipse.util.AbstractRiseClipseResourceSet;
 
 
@@ -43,12 +46,23 @@ public class NsdResourceSetImpl extends AbstractRiseClipseResourceSet {
     
     private Map< String, NS > nsdResources;
     private Map< String, NSDoc > nsdocResources;
+    private NsdResourceFactoryImpl resourceFactory;
 
     public NsdResourceSetImpl( boolean strictContent, IRiseClipseConsole console ) {
         super( strictContent, console );
         
         nsdResources = new HashMap<>();
         nsdocResources = new HashMap<>();
+        resourceFactory = new NsdResourceFactoryImpl();
+    }
+
+    @Override
+    protected NsdResourceImpl createRiseClipseResource( URI uri, String contentType ) {
+        Optional< String > metamodel = RiseClipseMetamodel.findMetamodelFor( uri );
+        if( metamodel.isPresent() && NsdPackage.eNS_URI.equals( metamodel.get() )) {
+            return resourceFactory.createResource( uri );
+        }
+        return null;
     }
 
     @Override