diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerAddTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerAddTest.java
index 768c36f..ed2c76b 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerAddTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerAddTest.java
@@ -92,6 +92,9 @@
             workingDirectory = path.substring( 0, targetPos + 6 );
         }
 
+        // Make sure every test class has its own schema directory
+        workingDirectory = new File( workingDirectory, "SchemaManagerAddTest" ).getAbsolutePath();
+
         schemaRepository = new File( workingDirectory, "schema" );
 
         // Cleanup the target directory
@@ -106,7 +109,7 @@
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteDirectory( schemaRepository.getParentFile() );
     }
 
 
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerDelTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerDelTest.java
index 2b2e52b..9896264 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerDelTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerDelTest.java
@@ -83,6 +83,9 @@
             workingDirectory = path.substring( 0, targetPos + 6 );
         }
 
+        // Make sure every test class has its own schema directory
+        workingDirectory = new File( workingDirectory, "SchemaManagerDelTest" ).getAbsolutePath();
+
         schemaRepository = new File( workingDirectory, "schema" );
 
         // Cleanup the target directory
@@ -97,7 +100,7 @@
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteDirectory( schemaRepository.getParentFile() );
     }
 
 
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java
index 36951f0..a492970 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java
@@ -90,6 +90,9 @@
             workingDirectory = path.substring( 0, targetPos + 6 );
         }
 
+        // Make sure every test class has its own schema directory
+        workingDirectory = new File( workingDirectory, "SchemaManagerEnableDisableLoadTest" ).getAbsolutePath();
+
         schemaRepository = new File( workingDirectory, "schema" );
 
         // Cleanup the target directory
@@ -112,7 +115,7 @@
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteDirectory( schemaRepository.getParentFile() );
     }
 
 
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java
index 74991ae..b36f1d8 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java
@@ -31,9 +31,8 @@
 import java.io.IOException;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.directory.junit.tools.Concurrent;
-import org.apache.directory.junit.tools.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.exception.LdapUnwillingToPerformException;
+import org.apache.directory.shared.ldap.schema.AttributeType;
 import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.impl.DefaultSchemaLdifExtractor;
@@ -42,8 +41,8 @@
 import org.apache.directory.shared.ldap.schema.registries.Schema;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 
 
 /**
@@ -167,8 +166,8 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrent()
+//@RunWith(ConcurrentJunitRunner.class)
+//@Concurrent()
 public class SchemaManagerLoadTest
 {
     // A directory in which the ldif files will be stored
@@ -176,7 +175,7 @@
 
     // The schema repository
     private static File schemaRepository;
-
+    
 
     @BeforeClass
     public static void setup() throws Exception
@@ -190,6 +189,9 @@
             workingDirectory = path.substring( 0, targetPos + 6 );
         }
 
+        // Make sure every test class has its own schema directory
+        workingDirectory = new File( workingDirectory, "SchemaManagerLoadTest" ).getAbsolutePath();
+
         schemaRepository = new File( workingDirectory, "schema" );
 
         // Cleanup the target directory
@@ -204,7 +206,7 @@
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteDirectory( schemaRepository.getParentFile() );
     }
 
 
@@ -524,7 +526,11 @@
         assertTrue( schemaManager.load( "system" ) );
         assertTrue( schemaManager.load( "core" ) );
         assertTrue( schemaManager.load( "cosine" ) );
-        assertTrue( schemaManager.load( "nis" ) );
+        assertFalse( schemaManager.load( "nis" ) );
+        
+        AttributeType at = schemaManager.getAttributeType( "uidNumber" );
+        // if nis schema was loaded then the at will not be null
+        assertNull( at );
 
         assertTrue( schemaManager.getErrors().isEmpty() );
         assertEquals( 133, schemaManager.getAttributeTypeRegistry().size() );
@@ -676,6 +682,7 @@
 
         assertEquals( 1, schemaManager.getRegistries().getLoadedSchemas().size() );
         assertNotNull( schemaManager.getRegistries().getLoadedSchema( "system" ) );
+        assertNull( schemaManager.getRegistries().getLoadedSchema( "nis" ) );
         assertNull( schemaManager.getRegistries().getLoadedSchema( "core" ) );
         assertNull( schemaManager.getRegistries().getLoadedSchema( "cosine" ) );
         assertNull( schemaManager.getRegistries().getLoadedSchema( "InetOrgPerson" ) );
@@ -777,4 +784,21 @@
         assertEquals( 0, schemaManager.getRegistries().getLoadedSchemas().size() );
         assertNull( schemaManager.getRegistries().getLoadedSchema( "dummy" ) );
     }
+    
+
+    @Ignore( "loadDisabled() method need to be fixed" )
+    @Test
+    public void testLoadDisabled() throws Exception
+    {
+        LdifSchemaLoader loader = new LdifSchemaLoader( schemaRepository );
+        SchemaManager schemaManager = new DefaultSchemaManager( loader );
+
+        assertTrue( schemaManager.loadDisabled( "nis" ) );
+
+        assertFalse( schemaManager.getErrors().isEmpty() );
+        
+        AttributeType at = schemaManager.getAttributeType( "uidNumber" );
+        // if nis schema was loaded then the at will not be null
+        assertNotNull( at );
+    }
 }
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java
index 8c15294..172e6a3 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java
@@ -81,6 +81,9 @@
             workingDirectory = path.substring( 0, targetPos + 6 );
         }
 
+        // Make sure every test class has its own schema directory
+        workingDirectory = new File( workingDirectory, "SchemaManagerLoadWithDepsTest" ).getAbsolutePath();
+
         schemaRepository = new File( workingDirectory, "schema" );
 
         // Cleanup the target directory
@@ -95,7 +98,7 @@
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteDirectory( schemaRepository.getParentFile() );
     }
 
 
diff --git a/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java b/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java
index 6d73ffe..7ad0a34 100644
--- a/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java
+++ b/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java
@@ -543,7 +543,10 @@
         // Load the schemas
         for ( Schema schema : schemas )
         {
-            if ( !load( clonedRegistries, schema ) && ( !errors.isEmpty() ) )
+            boolean singleSchemaLoaded = load( clonedRegistries, schema );
+
+            // return false if the schema was not loaded in the first place
+            if ( !singleSchemaLoaded )
             {
                 return false;
             }
@@ -1043,24 +1046,16 @@
             if ( errors.isEmpty() )
             {
                 // We are golden : let's apply the schema in the real registries
-                registries.setRelaxed();
-
-                // Load the schemas
-                for ( Schema schema : schemas )
-                {
-                    loadDepsFirst( registries, schema );
-                }
-
-                // Build the cross references
-                errors = registries.buildReferences();
+                registries = clonedRegistries;
                 registries.setStrict();
-
                 loaded = true;
             }
         }
-
-        // clear the cloned registries
-        clonedRegistries.clear();
+        else
+        {
+            // clear the cloned registries
+            clonedRegistries.clear();
+        }
 
         return loaded;
     }
diff --git a/ldap-schema/src/main/resources/schema/ou=schema/cn=adsconfig/ou=objectclasses/m-oid=1.3.6.1.4.1.18060.0.4.1.3.260.ldif b/ldap-schema/src/main/resources/schema/ou=schema/cn=adsconfig/ou=objectclasses/m-oid=1.3.6.1.4.1.18060.0.4.1.3.260.ldif
index 15ac46c..108f4a8 100644
--- a/ldap-schema/src/main/resources/schema/ou=schema/cn=adsconfig/ou=objectclasses/m-oid=1.3.6.1.4.1.18060.0.4.1.3.260.ldif
+++ b/ldap-schema/src/main/resources/schema/ou=schema/cn=adsconfig/ou=objectclasses/m-oid=1.3.6.1.4.1.18060.0.4.1.3.260.ldif
@@ -2,7 +2,7 @@
 dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.260, ou=objectClasses, cn=adsconfig, ou=sche
  ma
 createtimestamp: 20100111145218Z
-m-must: ads-serverDS
+m-may: ads-serverDS
 m-oid: 1.3.6.1.4.1.18060.0.4.1.3.260
 entrycsn: 20100111202218.087000Z#000000#000#000000
 m-supobjectclass: ads-server
