diff --git a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/RiseClipseValidatorSCL.java b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/RiseClipseValidatorSCL.java
index 1e5772434f38b910a4e35490bdaeecef29a1b2a0..0729d0adc59acf770f55d618e9c9513c9e6aca16 100644
--- a/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/RiseClipseValidatorSCL.java
+++ b/fr.centralesupelec.edf.riseclipse.iec61850.scl.tools/src/fr/centralesupelec/edf/riseclipse/iec61850/scl/validator/RiseClipseValidatorSCL.java
@@ -23,7 +23,9 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Stream;
 
+import fr.centralesupelec.edf.riseclipse.iec61850.nsd.PresenceCondition;
 import fr.centralesupelec.edf.riseclipse.iec61850.nsd.util.NsIdentification;
 import fr.centralesupelec.edf.riseclipse.iec61850.scl.SclPackage;
 import fr.centralesupelec.edf.riseclipse.iec61850.scl.provider.SclItemProviderAdapterFactory;
@@ -73,12 +75,16 @@ public class RiseClipseValidatorSCL {
 
     private static IRiseClipseConsole console;
 
+    private static boolean hiddenDoor = false;
+
     private static void usage() {
         console.setLevel( IRiseClipseConsole.INFO_LEVEL );
         console.info( "java -jar RiseClipseValidatorSCL.jar --help" );
         console.info( "java -jar RiseClipseValidatorSCL.jar [--verbose | --info | --warning | --error] [--make-explicit-links] (<oclFile> | <nsdFile> | <sclFile>)+" );
         console.info( "Files ending with \".ocl\" are considered OCL files, "
-                + "files ending with \".nsd\" are considered NSD files, "
+                + "files ending with \".nsd\" are considered NS files, "
+                + "files ending with \".snsd\" are considered ServiceNS files, "
+                + "files ending with \".AppNS\" are considered ApplicableServiceNS files, "
                 + "files ending with \".nsdoc\" are considered NSDoc files, "
                 + "all others are considered SCL files" );
         System.exit( -1 );
@@ -89,7 +95,9 @@ public class RiseClipseValidatorSCL {
         displayLegal();
         console.info( "java -jar RiseClipseValidatorSCL.jar option* file*" );
         console.info( "\tFiles ending with \".ocl\" are considered OCL files," );
-        console.info( "\tfiles ending with \".nsd\" are considered NSD files," );
+        console.info( "\tfiles ending with \".nsd\" are considered NS files," );
+        console.info( "\tfiles ending with \".snsd\" are considered ServiceNS files," );
+        console.info( "\tfiles ending with \".AppNS\" are considered ApplicableServiceNS files (at most one should be given)," );
         console.info( "\tfiles ending with \".nsdoc\" are considered NSDoc files," );
         console.info( "\tall others are considered SCL files." );
         console.info( "" );
@@ -159,6 +167,9 @@ public class RiseClipseValidatorSCL {
                 else if( "--display-nsd-messages".equals( args[i] ) ) {
                     displayNsdMessages = true;
                 }
+                else if( "--hidden-door".equals( args[i] ) ) {
+                    hiddenDoor  = true;
+                }
                 else {
                     console = new TextRiseClipseConsole( useColor );
                     console.error( "Unrecognized option " + args[i] );
@@ -190,6 +201,14 @@ public class RiseClipseValidatorSCL {
                 nsdFiles.add( args[i] );
                 nsdValidation = true;
             }
+            else if( args[i].endsWith( ".snsd" )) {
+                nsdFiles.add( args[i] );
+                nsdValidation = true;
+            }
+            else if( args[i].endsWith( ".AppNS" )) {
+                nsdFiles.add( args[i] );
+                nsdValidation = true;
+            }
             else if( args[i].endsWith( ".nsdoc" )) {
                 nsdFiles.add( args[i] );
                 nsdValidation = true;
@@ -198,6 +217,10 @@ public class RiseClipseValidatorSCL {
                 sclFiles.add( args[i] );
             }
         }
+        
+        if( hiddenDoor ) {
+            doHiddenDoor( oclFiles, nsdFiles, sclFiles );
+        }
 
         prepare( oclFiles, nsdFiles, displayNsdMessages );
         for( int i = 0; i < sclFiles.size(); ++i ) {
@@ -205,6 +228,16 @@ public class RiseClipseValidatorSCL {
         }
     }
 
+    private static void doHiddenDoor( ArrayList< @NonNull String > oclFiles, ArrayList< @NonNull String > nsdFiles, ArrayList<String> sclFiles ) {
+        prepare( oclFiles, nsdFiles, false );
+        
+        Stream< PresenceCondition > pc = nsdValidator.getNsdLoader().getResourceSet().getPresenceConditionStream( DEFAULT_NS_IDENTIFICATION );
+        console.setLevel( IRiseClipseConsole.INFO_LEVEL );
+        pc.forEach( c -> console.info(  "PresenceCondition " + c.getName() ));
+        
+        System.exit( 0 );
+    }
+
     private static void displayLegal() {
         console.info( "Copyright (c) 2019 CentraleSupélec & EDF." );
         console.info(