renaming attributeTyep

git-svn-id: https://svn.apache.org/repos/asf/directory/shared/branches/akarasulu@1083574 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/integ/src/test/java/org/apache/directory/shared/ldap/entry/SchemaAwareEntryAttributeSerializerTest.java b/integ/src/test/java/org/apache/directory/shared/ldap/entry/SchemaAwareEntryAttributeSerializerTest.java
index 9b884c6..e5202e0 100644
--- a/integ/src/test/java/org/apache/directory/shared/ldap/entry/SchemaAwareEntryAttributeSerializerTest.java
+++ b/integ/src/test/java/org/apache/directory/shared/ldap/entry/SchemaAwareEntryAttributeSerializerTest.java
@@ -30,7 +30,7 @@
 import org.apache.directory.shared.ldap.model.entry.DefaultEntryAttribute;
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.entry.EntryAttributeSerializer;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schemamanager.impl.DefaultSchemaManager;
 import org.junit.BeforeClass;
@@ -53,8 +53,8 @@
     private static byte[] data2 = new byte[] {0x05, 0x06, 0x07, 0x08};
     private static byte[] data3 = new byte[] {0x09, 0x0A, 0x0B, 0x0C};
     
-    private static AttributeType cn = null;
-    private static AttributeType userCertificate = null;
+    private static MutableAttributeTypeImpl cn = null;
+    private static MutableAttributeTypeImpl userCertificate = null;
 
     private static SchemaManager schemaManager;
 
diff --git a/integ/src/test/java/org/apache/directory/shared/ldap/entry/SchemaAwareValueSerializerTest.java b/integ/src/test/java/org/apache/directory/shared/ldap/entry/SchemaAwareValueSerializerTest.java
index 62b694a..49da0a8 100644
--- a/integ/src/test/java/org/apache/directory/shared/ldap/entry/SchemaAwareValueSerializerTest.java
+++ b/integ/src/test/java/org/apache/directory/shared/ldap/entry/SchemaAwareValueSerializerTest.java
@@ -30,7 +30,7 @@
 import org.apache.directory.shared.ldap.model.entry.BinaryValue;
 import org.apache.directory.shared.ldap.model.entry.StringValue;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schemamanager.impl.DefaultSchemaManager;
 import org.apache.directory.shared.util.StringConstants;
@@ -74,8 +74,8 @@
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
-        AttributeType cn = schemaManager.getAttributeType( "cn" );
-        AttributeType userCertificate = schemaManager.getAttributeType( "userCertificate" );
+        MutableAttributeTypeImpl cn = schemaManager.getAttributeType( "cn" );
+        MutableAttributeTypeImpl userCertificate = schemaManager.getAttributeType( "userCertificate" );
         
         bv1 = new BinaryValue( userCertificate, data );
         bv2 = new BinaryValue( userCertificate, StringConstants.EMPTY_BYTES );
diff --git a/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java b/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
index 8ecdf08..f1585e5 100644
--- a/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
+++ b/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java
@@ -126,7 +126,7 @@
 import org.apache.directory.shared.ldap.model.message.extended.SearchNoDResponse;
 import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.ldap.model.name.Rdn;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.ObjectClass;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.parsers.OpenLdapSchemaParser;
@@ -3286,9 +3286,9 @@
             olsp.setQuirksMode( true );
             olsp.parse( schemaFile );
 
-            List<AttributeType> atList = olsp.getAttributeTypes();
+            List<MutableAttributeTypeImpl> atList = olsp.getAttributeTypes();
             AttributeTypeRegistry atRegistry = schemaManager.getRegistries().getAttributeTypeRegistry();
-            for ( AttributeType atType : atList )
+            for ( MutableAttributeTypeImpl atType : atList )
             {
                 atRegistry.addMappingFor( atType );
             }
@@ -3470,7 +3470,7 @@
                 {
                     try
                     {
-                        AttributeType type = schemaManager.lookupAttributeTypeRegistry( id );
+                        MutableAttributeTypeImpl type = schemaManager.lookupAttributeTypeRegistry( id );
                         return !type.getSyntax().isHumanReadable();
                     }
                     catch ( Exception e )
diff --git a/ldap/extras/aci/src/main/antlr/ACIItem.g b/ldap/extras/aci/src/main/antlr/ACIItem.g
index e997953..853e812 100644
--- a/ldap/extras/aci/src/main/antlr/ACIItem.g
+++ b/ldap/extras/aci/src/main/antlr/ACIItem.g
@@ -50,7 +50,7 @@
 import org.apache.directory.shared.util.OptionalComponentsMonitor;
 import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.ldap.model.name.Rdn;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.model.constants.AuthenticationLevel;
@@ -450,7 +450,7 @@
 attributeType
 {
     log.debug( "entered attributeType()" );
-    Set<AttributeType> attributeTypeSet = null;
+    Set<MutableAttributeTypeImpl> attributeTypeSet = null;
 }
     :
     ID_attributeType ( SP )+ attributeTypeSet=attributeTypeSet
@@ -462,7 +462,7 @@
 allAttributeValues
 {
     log.debug( "entered allAttributeValues()" );
-    Set<AttributeType> attributeTypeSet = null;
+    Set<MutableAttributeTypeImpl> attributeTypeSet = null;
 }
     :
     ID_allAttributeValues ( SP )+ attributeTypeSet=attributeTypeSet
@@ -524,7 +524,7 @@
 selfValue
 {
     log.debug( "entered selfValue()" );
-    Set<AttributeType> attributeTypeSet = null;
+    Set<MutableAttributeTypeImpl> attributeTypeSet = null;
 }
     :
     ID_selfValue ( SP )+ attributeTypeSet=attributeTypeSet
@@ -582,7 +582,7 @@
     maxValueCount = null;
     String oid = null;
     Token token = null;
-    AttributeType attributeType = null;
+    MutableAttributeTypeImpl attributeType = null;
 }
     :
     OPEN_CURLY ( SP )*
@@ -654,8 +654,8 @@
     String typeOid = null;
     String valuesInOid = null;
     restrictedValue = null;
-    AttributeType attributeType = null;
-    AttributeType valueInAttributeType = null;
+    MutableAttributeTypeImpl attributeType = null;
+    MutableAttributeTypeImpl valueInAttributeType = null;
 }
     :
     OPEN_CURLY ( SP )*
@@ -682,12 +682,12 @@
     }
     ;
 
-attributeTypeSet returns [ Set<AttributeType> attributeTypeSet ]
+attributeTypeSet returns [ Set<MutableAttributeTypeImpl> attributeTypeSet ]
 {
     log.debug( "entered attributeTypeSet()" );
     String oid = null;
-    attributeTypeSet = new HashSet<AttributeType>();
-    AttributeType attributeType = null;
+    attributeTypeSet = new HashSet<MutableAttributeTypeImpl>();
+    MutableAttributeTypeImpl attributeType = null;
 }
     :
     OPEN_CURLY ( SP )*
diff --git a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AbstractAttributeTypeProtectedItem.java b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AbstractAttributeTypeProtectedItem.java
index 5a93238..54a167f 100644
--- a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AbstractAttributeTypeProtectedItem.java
+++ b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AbstractAttributeTypeProtectedItem.java
@@ -25,7 +25,7 @@
 import java.util.Set;
 
 import org.apache.directory.shared.ldap.aci.ProtectedItem;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -34,7 +34,7 @@
 public abstract class AbstractAttributeTypeProtectedItem extends ProtectedItem
 {
     /** The attribute types. */
-    protected final Set<AttributeType> attributeTypes;
+    protected final Set<MutableAttributeTypeImpl> attributeTypes;
 
 
     /**
@@ -42,7 +42,7 @@
      * 
      * @param attributeTypes the collection of attribute IDs
      */
-    protected AbstractAttributeTypeProtectedItem( Set<AttributeType> attributeTypes )
+    protected AbstractAttributeTypeProtectedItem( Set<MutableAttributeTypeImpl> attributeTypes )
     {
         this.attributeTypes = Collections.unmodifiableSet( attributeTypes );
     }
@@ -53,7 +53,7 @@
      *
      * @return the iterator of all attribute types
      */
-    public Iterator<AttributeType> iterator()
+    public Iterator<MutableAttributeTypeImpl> iterator()
     {
         return attributeTypes.iterator();
     }
@@ -108,7 +108,7 @@
         buf.append( "{ " );
         boolean isFirst = true;
 
-        for ( AttributeType attributeType : attributeTypes )
+        for ( MutableAttributeTypeImpl attributeType : attributeTypes )
         {
             if ( isFirst )
             {
diff --git a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AllAttributeValuesItem.java b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AllAttributeValuesItem.java
index e4fd79b..5bc3ea8 100644
--- a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AllAttributeValuesItem.java
+++ b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AllAttributeValuesItem.java
@@ -22,7 +22,7 @@
 
 import java.util.Set;
 
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -35,7 +35,7 @@
      * 
      * @param attributeTypes the collection of attribute IDs.
      */
-    public AllAttributeValuesItem( Set<AttributeType> attributeTypes )
+    public AllAttributeValuesItem( Set<MutableAttributeTypeImpl> attributeTypes )
     {
         super( attributeTypes );
     }
diff --git a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AttributeTypeItem.java b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AttributeTypeItem.java
index c032511..db87416 100644
--- a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AttributeTypeItem.java
+++ b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/AttributeTypeItem.java
@@ -22,7 +22,7 @@
 
 import java.util.Set;
 
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -36,7 +36,7 @@
      * 
      * @param attributeTypes the collection of attribute IDs.
      */
-    public AttributeTypeItem( Set<AttributeType> attributeTypes )
+    public AttributeTypeItem( Set<MutableAttributeTypeImpl> attributeTypes )
     {
         super( attributeTypes );
     }
diff --git a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/MaxValueCountElem.java b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/MaxValueCountElem.java
index f8d9119..2ab1473 100644
--- a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/MaxValueCountElem.java
+++ b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/MaxValueCountElem.java
@@ -20,7 +20,7 @@
 package org.apache.directory.shared.ldap.aci.protectedItem;
 
 
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -29,7 +29,7 @@
 public class MaxValueCountElem
 {
     /** The targeted AttributeType */
-    private AttributeType attributeType;
+    private MutableAttributeTypeImpl attributeType;
 
     /** The maximum number of accepted values for this attributeType */
     private int maxCount;
@@ -42,7 +42,7 @@
      * @param maxCount the maximum count of the attribute allowed
      */
 
-    public MaxValueCountElem( AttributeType attributeType, int maxCount )
+    public MaxValueCountElem( MutableAttributeTypeImpl attributeType, int maxCount )
     {
         this.attributeType = attributeType;
         this.maxCount = maxCount;
@@ -54,7 +54,7 @@
      *
      * @return the attribute type
      */
-    public AttributeType getAttributeType()
+    public MutableAttributeTypeImpl getAttributeType()
     {
         return attributeType;
     }
diff --git a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/RestrictedByElem.java b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/RestrictedByElem.java
index 0c79a4a..ed0d9c6 100644
--- a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/RestrictedByElem.java
+++ b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/RestrictedByElem.java
@@ -20,7 +20,7 @@
 package org.apache.directory.shared.ldap.aci.protectedItem;
 
 
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -29,10 +29,10 @@
 public class RestrictedByElem
 {
     /** The AttributeType on which the restriction is applied */
-    private AttributeType attributeType;
+    private MutableAttributeTypeImpl attributeType;
 
     /** The list of allowed AttributeType values */
-    private AttributeType valuesIn;
+    private MutableAttributeTypeImpl valuesIn;
 
 
     /**
@@ -41,7 +41,7 @@
      * @param attributeType the attribute type to restrict
      * @param valuesIn the attribute type only whose values are allowed in <tt>attributeType</tt>.
      */
-    public RestrictedByElem( AttributeType attributeType, AttributeType valuesIn )
+    public RestrictedByElem( MutableAttributeTypeImpl attributeType, MutableAttributeTypeImpl valuesIn )
     {
         this.attributeType = attributeType;
         this.valuesIn = valuesIn;
@@ -53,7 +53,7 @@
      *
      * @return the attribute type
      */
-    public AttributeType getAttributeType()
+    public MutableAttributeTypeImpl getAttributeType()
     {
         return attributeType;
     }
@@ -65,7 +65,7 @@
      *
      * @return the list of allowed AttributeType values
      */
-    public AttributeType getValuesIn()
+    public MutableAttributeTypeImpl getValuesIn()
     {
         return valuesIn;
     }
diff --git a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/SelfValueItem.java b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/SelfValueItem.java
index 46ed164..87450e6 100644
--- a/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/SelfValueItem.java
+++ b/ldap/extras/aci/src/main/java/org/apache/directory/shared/ldap/aci/protectedItem/SelfValueItem.java
@@ -22,7 +22,7 @@
 
 import java.util.Set;
 
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -40,7 +40,7 @@
      * 
      * @param attributeTypes the collection of attribute IDs.
      */
-    public SelfValueItem( Set<AttributeType> attributeTypes )
+    public SelfValueItem( Set<MutableAttributeTypeImpl> attributeTypes )
     {
         super( attributeTypes );
     }
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_AllAttributeValuesTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_AllAttributeValuesTest.java
index 06bebb5..2477e04 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_AllAttributeValuesTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_AllAttributeValuesTest.java
@@ -29,7 +29,7 @@
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.aci.protectedItem.AllAttributeValuesItem;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -56,18 +56,18 @@
     @Before
     public void initNames() throws Exception
     {
-        Set<AttributeType> colA = new HashSet<AttributeType>();
-        colA.add( new AttributeType( "aa" ) );
-        colA.add( new AttributeType( "bb" ) );
-        colA.add( new AttributeType( "cc" ) );
-        Set<AttributeType> colB = new HashSet<AttributeType>();
-        colB.add( new AttributeType( "aa" ) );
-        colB.add( new AttributeType( "bb" ) );
-        colB.add( new AttributeType( "cc" ) );
-        Set<AttributeType> colC = new HashSet<AttributeType>();
-        colC.add( new AttributeType( "bb" ) );
-        colC.add( new AttributeType( "cc" ) );
-        colC.add( new AttributeType( "dd" ) );
+        Set<MutableAttributeTypeImpl> colA = new HashSet<MutableAttributeTypeImpl>();
+        colA.add( new MutableAttributeTypeImpl( "aa" ) );
+        colA.add( new MutableAttributeTypeImpl( "bb" ) );
+        colA.add( new MutableAttributeTypeImpl( "cc" ) );
+        Set<MutableAttributeTypeImpl> colB = new HashSet<MutableAttributeTypeImpl>();
+        colB.add( new MutableAttributeTypeImpl( "aa" ) );
+        colB.add( new MutableAttributeTypeImpl( "bb" ) );
+        colB.add( new MutableAttributeTypeImpl( "cc" ) );
+        Set<MutableAttributeTypeImpl> colC = new HashSet<MutableAttributeTypeImpl>();
+        colC.add( new MutableAttributeTypeImpl( "bb" ) );
+        colC.add( new MutableAttributeTypeImpl( "cc" ) );
+        colC.add( new MutableAttributeTypeImpl( "dd" ) );
 
         allAttributeValuesA = new AllAttributeValuesItem( colA );
         allAttributeValuesACopy = new AllAttributeValuesItem( colA );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_AttributeTypeTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_AttributeTypeTest.java
index ff682f3..270d262 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_AttributeTypeTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_AttributeTypeTest.java
@@ -29,7 +29,7 @@
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.aci.protectedItem.AttributeTypeItem;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -56,18 +56,18 @@
     @Before
     public void initNames() throws Exception
     {
-        Set<AttributeType> colA = new HashSet<AttributeType>();
-        colA.add( new AttributeType( "aa" ) );
-        colA.add( new AttributeType( "bb" ) );
-        colA.add( new AttributeType( "cc" ) );
-        Set<AttributeType> colB = new HashSet<AttributeType>();
-        colB.add( new AttributeType( "aa" ) );
-        colB.add( new AttributeType( "bb" ) );
-        colB.add( new AttributeType( "cc" ) );
-        Set<AttributeType> colC = new HashSet<AttributeType>();
-        colC.add( new AttributeType( "bb" ) );
-        colC.add( new AttributeType( "cc" ) );
-        colC.add( new AttributeType( "dd" ) );
+        Set<MutableAttributeTypeImpl> colA = new HashSet<MutableAttributeTypeImpl>();
+        colA.add( new MutableAttributeTypeImpl( "aa" ) );
+        colA.add( new MutableAttributeTypeImpl( "bb" ) );
+        colA.add( new MutableAttributeTypeImpl( "cc" ) );
+        Set<MutableAttributeTypeImpl> colB = new HashSet<MutableAttributeTypeImpl>();
+        colB.add( new MutableAttributeTypeImpl( "aa" ) );
+        colB.add( new MutableAttributeTypeImpl( "bb" ) );
+        colB.add( new MutableAttributeTypeImpl( "cc" ) );
+        Set<MutableAttributeTypeImpl> colC = new HashSet<MutableAttributeTypeImpl>();
+        colC.add( new MutableAttributeTypeImpl( "bb" ) );
+        colC.add( new MutableAttributeTypeImpl( "cc" ) );
+        colC.add( new MutableAttributeTypeImpl( "dd" ) );
 
         attributeTypeA = new AttributeTypeItem( colA );
         attributeTypeACopy = new AttributeTypeItem( colA );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_MaxValueCountTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_MaxValueCountTest.java
index db2250e..5b36010 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_MaxValueCountTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_MaxValueCountTest.java
@@ -30,7 +30,7 @@
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.aci.protectedItem.MaxValueCountElem;
 import org.apache.directory.shared.ldap.aci.protectedItem.MaxValueCountItem;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -58,10 +58,10 @@
     public void initNames() throws Exception
     {
 
-        MaxValueCountElem mvciA = new MaxValueCountElem( new AttributeType( "aa" ), 1 );
-        MaxValueCountElem mvciB = new MaxValueCountElem( new AttributeType( "bb" ), 2 );
-        MaxValueCountElem mvciC = new MaxValueCountElem( new AttributeType( "cc" ), 3 );
-        MaxValueCountElem mvciD = new MaxValueCountElem( new AttributeType( "dd" ), 4 );
+        MaxValueCountElem mvciA = new MaxValueCountElem( new MutableAttributeTypeImpl( "aa" ), 1 );
+        MaxValueCountElem mvciB = new MaxValueCountElem( new MutableAttributeTypeImpl( "bb" ), 2 );
+        MaxValueCountElem mvciC = new MaxValueCountElem( new MutableAttributeTypeImpl( "cc" ), 3 );
+        MaxValueCountElem mvciD = new MaxValueCountElem( new MutableAttributeTypeImpl( "dd" ), 4 );
 
         Set<MaxValueCountElem> colA = new HashSet<MaxValueCountElem>();
         colA.add( mvciA );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_RestrictedByTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_RestrictedByTest.java
index 3ae5a02..e420310 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_RestrictedByTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_RestrictedByTest.java
@@ -30,7 +30,7 @@
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.aci.protectedItem.RestrictedByElem;
 import org.apache.directory.shared.ldap.aci.protectedItem.RestrictedByItem;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -57,10 +57,10 @@
     @Before
     public void initNames() throws Exception
     {
-        RestrictedByElem rbiA = new RestrictedByElem( new AttributeType( "aa" ), new AttributeType( "aa" ) );
-        RestrictedByElem rbiB = new RestrictedByElem( new AttributeType( "bb" ), new AttributeType( "bb" ) );
-        RestrictedByElem rbiC = new RestrictedByElem( new AttributeType( "cc" ), new AttributeType( "cc" ) );
-        RestrictedByElem rbiD = new RestrictedByElem( new AttributeType( "dd" ), new AttributeType( "dd" ) );
+        RestrictedByElem rbiA = new RestrictedByElem( new MutableAttributeTypeImpl( "aa" ), new MutableAttributeTypeImpl( "aa" ) );
+        RestrictedByElem rbiB = new RestrictedByElem( new MutableAttributeTypeImpl( "bb" ), new MutableAttributeTypeImpl( "bb" ) );
+        RestrictedByElem rbiC = new RestrictedByElem( new MutableAttributeTypeImpl( "cc" ), new MutableAttributeTypeImpl( "cc" ) );
+        RestrictedByElem rbiD = new RestrictedByElem( new MutableAttributeTypeImpl( "dd" ), new MutableAttributeTypeImpl( "dd" ) );
 
         Set<RestrictedByElem> colA = new HashSet<RestrictedByElem>();
         colA.add( rbiA );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_SelfValueTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_SelfValueTest.java
index 6e91caa..f8d58db 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_SelfValueTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/ProtectedItem_SelfValueTest.java
@@ -29,7 +29,7 @@
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.aci.protectedItem.SelfValueItem;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -56,18 +56,18 @@
     @Before
     public void initNames() throws Exception
     {
-        Set<AttributeType> colA = new HashSet<AttributeType>();
-        colA.add( new AttributeType( "aa" ) );
-        colA.add( new AttributeType( "bb" ) );
-        colA.add( new AttributeType( "cc" ) );
-        Set<AttributeType> colB = new HashSet<AttributeType>();
-        colB.add( new AttributeType( "aa" ) );
-        colB.add( new AttributeType( "bb" ) );
-        colB.add( new AttributeType( "cc" ) );
-        Set<AttributeType> colC = new HashSet<AttributeType>();
-        colC.add( new AttributeType( "bb" ) );
-        colC.add( new AttributeType( "cc" ) );
-        colC.add( new AttributeType( "dd" ) );
+        Set<MutableAttributeTypeImpl> colA = new HashSet<MutableAttributeTypeImpl>();
+        colA.add( new MutableAttributeTypeImpl( "aa" ) );
+        colA.add( new MutableAttributeTypeImpl( "bb" ) );
+        colA.add( new MutableAttributeTypeImpl( "cc" ) );
+        Set<MutableAttributeTypeImpl> colB = new HashSet<MutableAttributeTypeImpl>();
+        colB.add( new MutableAttributeTypeImpl( "aa" ) );
+        colB.add( new MutableAttributeTypeImpl( "bb" ) );
+        colB.add( new MutableAttributeTypeImpl( "cc" ) );
+        Set<MutableAttributeTypeImpl> colC = new HashSet<MutableAttributeTypeImpl>();
+        colC.add( new MutableAttributeTypeImpl( "bb" ) );
+        colC.add( new MutableAttributeTypeImpl( "cc" ) );
+        colC.add( new MutableAttributeTypeImpl( "dd" ) );
 
         selfValueA = new SelfValueItem( colA );
         selfValueACopy = new SelfValueItem( colA );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/protectedItem/MaxValueCountItemTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/protectedItem/MaxValueCountItemTest.java
index 881c976..af96f2e 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/protectedItem/MaxValueCountItemTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/protectedItem/MaxValueCountItemTest.java
@@ -29,7 +29,7 @@
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.model.filter.UndefinedNode;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -62,22 +62,22 @@
     public void initNames() throws Exception
     {
         itemsA = new HashSet<MaxValueCountElem>();
-        itemsA.add( new MaxValueCountElem( new AttributeType("aa"), 1 ) );
-        itemsA.add( new MaxValueCountElem( new AttributeType("aa"), 2 ) );
-        itemsA.add( new MaxValueCountElem( new AttributeType("aa"), 3 ) );
+        itemsA.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 1 ) );
+        itemsA.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 2 ) );
+        itemsA.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 3 ) );
         // Sets aren't ordered, so adding order must not matter
         itemsB = new HashSet<MaxValueCountElem>();
-        itemsB.add( new MaxValueCountElem( new AttributeType("aa"), 2 ) );
-        itemsB.add( new MaxValueCountElem( new AttributeType("aa"), 3 ) );
-        itemsB.add( new MaxValueCountElem( new AttributeType("aa"), 1 ) );
+        itemsB.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 2 ) );
+        itemsB.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 3 ) );
+        itemsB.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 1 ) );
         itemsC = new HashSet<MaxValueCountElem>();
-        itemsC.add( new MaxValueCountElem( new AttributeType("aa"), 1 ) );
-        itemsC.add( new MaxValueCountElem( new AttributeType("bb"), 2 ) );
-        itemsC.add( new MaxValueCountElem( new AttributeType("aa"), 3 ) );
+        itemsC.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 1 ) );
+        itemsC.add( new MaxValueCountElem( new MutableAttributeTypeImpl("bb"), 2 ) );
+        itemsC.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 3 ) );
         itemsD = new HashSet<MaxValueCountElem>();
-        itemsD.add( new MaxValueCountElem( new AttributeType("aa"), 1 ) );
-        itemsD.add( new MaxValueCountElem( new AttributeType("aa"), 2 ) );
-        itemsD.add( new MaxValueCountElem( new AttributeType("aa"), 4 ) );
+        itemsD.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 1 ) );
+        itemsD.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 2 ) );
+        itemsD.add( new MaxValueCountElem( new MutableAttributeTypeImpl("aa"), 4 ) );
         maxValueCountItemA = new MaxValueCountItem( itemsA );
         maxValueCountItemACopy = new MaxValueCountItem( itemsA );
         maxValueCountItemB = new MaxValueCountItem( itemsB );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/protectedItem/RestrictedByItemTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/protectedItem/RestrictedByItemTest.java
index 86e3154..1a59324 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/protectedItem/RestrictedByItemTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/shared/ldap/aci/protectedItem/RestrictedByItemTest.java
@@ -29,7 +29,7 @@
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.model.filter.UndefinedNode;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -62,22 +62,22 @@
     public void initNames() throws Exception
     {
         elemsA = new HashSet<RestrictedByElem>();
-        elemsA.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("aa") ) );
-        elemsA.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("bb") ) );
-        elemsA.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("cc") ) );
+        elemsA.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("aa") ) );
+        elemsA.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("bb") ) );
+        elemsA.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("cc") ) );
         // Sets aren't ordered, so adding order must not matter
         elemsB = new HashSet<RestrictedByElem>();
-        elemsB.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("bb") ) );
-        elemsB.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("cc") ) );
-        elemsB.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("aa") ) );
+        elemsB.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("bb") ) );
+        elemsB.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("cc") ) );
+        elemsB.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("aa") ) );
         elemsC = new HashSet<RestrictedByElem>();
-        elemsC.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("aa") ) );
-        elemsC.add( new RestrictedByElem( new AttributeType("bb"), new AttributeType("bb") ) );
-        elemsC.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("cc") ) );
+        elemsC.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("aa") ) );
+        elemsC.add( new RestrictedByElem( new MutableAttributeTypeImpl("bb"), new MutableAttributeTypeImpl("bb") ) );
+        elemsC.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("cc") ) );
         elemsD = new HashSet<RestrictedByElem>();
-        elemsD.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("aa") ) );
-        elemsD.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("bb") ) );
-        elemsD.add( new RestrictedByElem( new AttributeType("aa"), new AttributeType("dd") ) );
+        elemsD.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("aa") ) );
+        elemsD.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("bb") ) );
+        elemsD.add( new RestrictedByElem( new MutableAttributeTypeImpl("aa"), new MutableAttributeTypeImpl("dd") ) );
         restrictedByItemA = new RestrictedByItem( elemsA );
         restrictedByItemACopy = new RestrictedByItem( elemsA );
         restrictedByItemB = new RestrictedByItem( elemsB );
diff --git a/ldap/model/src/main/antlr/schema.g b/ldap/model/src/main/antlr/schema.g
index ec712bc..0c180b4 100644
--- a/ldap/model/src/main/antlr/schema.g
+++ b/ldap/model/src/main/antlr/schema.g
@@ -37,7 +37,7 @@
 import org.apache.directory.shared.ldap.model.schema.NameForm;
 import org.apache.directory.shared.ldap.model.schema.parsers.NormalizerDescription;
 import org.apache.directory.shared.ldap.model.schema.parsers.ParserMonitor;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.ObjectClass;
 import org.apache.directory.shared.ldap.model.schema.parsers.SyntaxCheckerDescription;
 import org.apache.directory.shared.ldap.model.schema.syntaxCheckers.OpenLdapObjectIdentifierMacro;
@@ -245,7 +245,7 @@
 
 openLdapSchema returns [List<Object> list = new ArrayList<Object>()]
     {
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
         ObjectClass objectClass = null;
         OpenLdapObjectIdentifierMacro oloid = null;
     }
@@ -288,7 +288,7 @@
     ;
     
     
-openLdapAttributeType returns [AttributeType attributeType]
+openLdapAttributeType returns [MutableAttributeTypeImpl attributeType]
     {
         matchedProduction( "openLdapAttributeType()" );
     }
@@ -389,13 +389,13 @@
      * xstring = "X" HYPHEN 1*( ALPHA / HYPHEN / USCORE ) 
      * </pre>
     */
-attributeTypeDescription returns [AttributeType attributeType]
+attributeTypeDescription returns [MutableAttributeTypeImpl attributeType]
     {
         matchedProduction( "attributeTypeDescription()" );
         ElementTracker et = new ElementTracker();
     }
     :
-    ( oid:STARTNUMERICOID { attributeType = new AttributeType(numericoid(oid.getText())); } )
+    ( oid:STARTNUMERICOID { attributeType = new MutableAttributeTypeImpl(numericoid(oid.getText())); } )
     (
         ( name:NAME { et.track("NAME", name); attributeType.setNames(qdescrs(name.getText())); } )
         |
diff --git a/ldap/model/src/main/antlr/subtree-specification.g b/ldap/model/src/main/antlr/subtree-specification.g
index f658198..3681f45 100644
--- a/ldap/model/src/main/antlr/subtree-specification.g
+++ b/ldap/model/src/main/antlr/subtree-specification.g
@@ -49,7 +49,7 @@
 import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.model.entry.StringValue;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -98,7 +98,7 @@
     private SchemaManager schemaManager;
     
     /** The ObjectClass AT */
-    AttributeType OBJECT_CLASS_AT;
+    MutableAttributeTypeImpl OBJECT_CLASS_AT;
     
     private ComponentsMonitor subtreeSpecificationComponentsMonitor = null;
     
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/AbstractValue.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/AbstractValue.java
index f2e4807..5a68bfb 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/AbstractValue.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/AbstractValue.java
@@ -25,7 +25,7 @@
 
 import org.apache.directory.shared.i18n.I18n;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
 import org.apache.directory.shared.ldap.model.schema.MatchingRule;
 import org.apache.directory.shared.ldap.model.schema.Normalizer;
@@ -47,7 +47,7 @@
     private static final Logger LOG = LoggerFactory.getLogger( AbstractValue.class );
 
     /** reference to the attributeType zssociated with the value */
-    protected transient AttributeType attributeType;
+    protected transient MutableAttributeTypeImpl attributeType;
 
     /** the wrapped binary value */
     protected T wrappedValue;
@@ -97,7 +97,7 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType getAttributeType()
+    public MutableAttributeTypeImpl getAttributeType()
     {
         return attributeType;
     }
@@ -106,7 +106,7 @@
     /**
      * {@inheritDoc}
      */
-    public void apply( AttributeType attributeType )
+    public void apply( MutableAttributeTypeImpl attributeType )
     {
         if ( this.attributeType != null ) 
         {
@@ -249,7 +249,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean instanceOf( AttributeType attributeType ) throws LdapException
+    public boolean instanceOf( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         if ( ( attributeType != null ) && this.attributeType.equals( attributeType ) )
         {
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/AttributeUtils.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/AttributeUtils.java
index d3b842a..905022b 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/AttributeUtils.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/AttributeUtils.java
@@ -37,7 +37,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.exception.LdapInvalidAttributeTypeException;
 import org.apache.directory.shared.ldap.model.name.Dn;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.MatchingRule;
 import org.apache.directory.shared.ldap.model.schema.Normalizer;
 import org.apache.directory.shared.ldap.model.schema.normalizers.NoOpNormalizer;
@@ -70,7 +70,7 @@
      * @param entry the entry to remove the attribute from 
      * @return the Attribute that is removed
      */
-    public static Attribute removeAttribute( AttributeType type, Attributes entry )
+    public static Attribute removeAttribute( MutableAttributeTypeImpl type, Attributes entry )
     {
         Attribute attr = entry.get( type.getOid() );
 
@@ -208,7 +208,7 @@
      * @param type the attribute type specification
      * @return an Attribute with matching the attributeType spec or null
      */
-    public static Attribute getAttribute( Attributes attrs, AttributeType type )
+    public static Attribute getAttribute( Attributes attrs, MutableAttributeTypeImpl type )
     {
         // check if the attribute's OID is used
         Attribute attr = attrs.get( type.getOid() );
@@ -253,7 +253,7 @@
      * @return <code>true</code> if the value exists in the attribute
      * @throws LdapException If something went wrong while accessing the data
      */
-    public static boolean containsValue( Attribute attr, Value<?> compared, AttributeType type ) throws LdapException
+    public static boolean containsValue( Attribute attr, Value<?> compared, MutableAttributeTypeImpl type ) throws LdapException
     {
         // quick bypass test
         if ( attr.contains( compared ) )
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/BinaryValue.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/BinaryValue.java
index 87df27b..1bfc3a6 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/BinaryValue.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/BinaryValue.java
@@ -27,7 +27,7 @@
 
 import org.apache.directory.shared.i18n.I18n;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
 import org.apache.directory.shared.ldap.model.schema.Normalizer;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
@@ -73,7 +73,7 @@
      *
      * @param attributeType the schema type associated with this BinaryValue
      */
-    public BinaryValue( AttributeType attributeType )
+    public BinaryValue( MutableAttributeTypeImpl attributeType )
     {
         if ( attributeType == null )
         {
@@ -125,7 +125,7 @@
      * @param attributeType the schema type associated with this BinaryValue
      * @param value the binary value to wrap which may be null, or a zero length byte array
      */
-    public BinaryValue( AttributeType attributeType, byte[] value )
+    public BinaryValue( MutableAttributeTypeImpl attributeType, byte[] value )
     {
         this( attributeType );
         SyntaxChecker syntaxChecker = attributeType.getSyntax().getSyntaxChecker();
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultEntry.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultEntry.java
index f98ccb2..a3ffee5 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultEntry.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultEntry.java
@@ -39,7 +39,7 @@
 import org.apache.directory.shared.ldap.model.name.DnSerializer;
 import org.apache.directory.shared.ldap.model.name.Rdn;
 import org.apache.directory.shared.ldap.model.name.RdnSerializer;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.util.Strings;
 import org.apache.directory.shared.util.Unicode;
@@ -71,7 +71,7 @@
     private Map<String, EntryAttribute> attributes = new HashMap<String, EntryAttribute>();
 
     /** A speedup to get the ObjectClass attribute */
-    private static AttributeType objectClassAttributeType;
+    private static MutableAttributeTypeImpl objectClassAttributeType;
 
     /** The SchemaManager */
     private SchemaManager schemaManager;
@@ -218,7 +218,7 @@
             try
             {
                 // First get the AttributeType
-                AttributeType attributeType = attribute.getAttributeType();
+                MutableAttributeTypeImpl attributeType = attribute.getAttributeType();
 
                 if ( attributeType == null )
                 {
@@ -382,7 +382,7 @@
      * @param dn The Dn for this serverEntry. Can be null.
      * @param attributeTypes The list of attributes to create, without value.
      */
-    public DefaultEntry( SchemaManager schemaManager, Dn dn, AttributeType... attributeTypes )
+    public DefaultEntry( SchemaManager schemaManager, Dn dn, MutableAttributeTypeImpl... attributeTypes )
     {
         this.schemaManager = schemaManager;
 
@@ -425,7 +425,7 @@
      * @param attributeType The attribute to create, without value.
      * @param upId The User Provided ID fro this AttributeType
      */
-    public DefaultEntry( SchemaManager schemaManager, Dn dn, AttributeType attributeType, String upId )
+    public DefaultEntry( SchemaManager schemaManager, Dn dn, MutableAttributeTypeImpl attributeType, String upId )
     {
         this.schemaManager = schemaManager;
 
@@ -508,7 +508,7 @@
      * 
      * @param upId The ID
      */
-    private static String getUpId( String upId, AttributeType attributeType )
+    private static String getUpId( String upId, MutableAttributeTypeImpl attributeType )
     {
         String normUpId = Strings.trim(upId);
 
@@ -541,7 +541,7 @@
      *
      * Updates the AttributeMap.
      */
-    protected void createAttribute( String upId, AttributeType attributeType, byte[]... values )
+    protected void createAttribute( String upId, MutableAttributeTypeImpl attributeType, byte[]... values )
     {
         EntryAttribute attribute = new DefaultEntryAttribute( attributeType, values );
         attribute.setUpId( upId, attributeType );
@@ -555,7 +555,7 @@
      *
      * Updates the AttributeMap.
      */
-    protected void createAttribute( String upId, AttributeType attributeType, String... values )
+    protected void createAttribute( String upId, MutableAttributeTypeImpl attributeType, String... values )
     {
         EntryAttribute attribute = new DefaultEntryAttribute( attributeType, values );
         attribute.setUpId( upId, attributeType );
@@ -569,7 +569,7 @@
      *
      * Updates the AttributeMap.
      */
-    protected void createAttribute( String upId, AttributeType attributeType, Value<?>... values )
+    protected void createAttribute( String upId, MutableAttributeTypeImpl attributeType, Value<?>... values )
     {
         EntryAttribute attribute = new DefaultEntryAttribute( attributeType, values );
         attribute.setUpId( upId, attributeType );
@@ -580,7 +580,7 @@
     /**
      * Returns the attributeType from an Attribute ID.
      */
-    protected AttributeType getAttributeType( String upId ) throws LdapException
+    protected MutableAttributeTypeImpl getAttributeType( String upId ) throws LdapException
     {
         if ( Strings.isEmpty(Strings.trim(upId)) )
         {
@@ -599,7 +599,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( AttributeType attributeType, byte[]... values ) throws LdapException
+    public void add( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -644,7 +644,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( AttributeType attributeType, String... values ) throws LdapException
+    public void add( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -674,7 +674,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( AttributeType attributeType, Value<?>... values ) throws LdapException
+    public void add( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -704,7 +704,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( String upId, AttributeType attributeType, byte[]... values ) throws LdapException
+    public void add( String upId, MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         // ObjectClass with binary values are not allowed
         if ( attributeType.equals( objectClassAttributeType ) )
@@ -737,7 +737,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( String upId, AttributeType attributeType, Value<?>... values ) throws LdapException
+    public void add( String upId, MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -767,7 +767,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( String upId, AttributeType attributeType, String... values ) throws LdapException
+    public void add( String upId, MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -804,7 +804,7 @@
         // Loop on all the added attributes
         for ( EntryAttribute attribute : attributes )
         {
-            AttributeType attributeType = attribute.getAttributeType();
+            MutableAttributeTypeImpl attributeType = attribute.getAttributeType();
 
             if ( attributeType != null )
             {
@@ -1064,7 +1064,7 @@
                     return this.attributes.size() == 0;
                 }
 
-                AttributeType attributeType = entryAttribute.getAttributeType();
+                MutableAttributeTypeImpl attributeType = entryAttribute.getAttributeType();
 
                 if ( ( entryAttribute == null ) || !this.attributes.containsKey( attributeType.getOid() ) )
                 {
@@ -1149,7 +1149,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean containsAttribute( AttributeType attributeType )
+    public boolean containsAttribute( MutableAttributeTypeImpl attributeType )
     {
         if ( attributeType == null )
         {
@@ -1163,7 +1163,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean contains( AttributeType attributeType, byte[]... values )
+    public boolean contains( MutableAttributeTypeImpl attributeType, byte[]... values )
     {
         if ( attributeType == null )
         {
@@ -1186,7 +1186,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean contains( AttributeType attributeType, String... values )
+    public boolean contains( MutableAttributeTypeImpl attributeType, String... values )
     {
         if ( attributeType == null )
         {
@@ -1209,7 +1209,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean contains( AttributeType attributeType, Value<?>... values )
+    public boolean contains( MutableAttributeTypeImpl attributeType, Value<?>... values )
     {
         if ( attributeType == null )
         {
@@ -1347,7 +1347,7 @@
             {
                 try
                 {
-                    AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( id );
+                    MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( id );
 
                     return attributes.get( attributeType.getOid() );
                 }
@@ -1374,7 +1374,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute get( AttributeType attributeType )
+    public EntryAttribute get( MutableAttributeTypeImpl attributeType )
     {
         if ( attributeType != null )
         {
@@ -1390,9 +1390,9 @@
     /**
      * {@inheritDoc}
      */
-    public Set<AttributeType> getAttributeTypes()
+    public Set<MutableAttributeTypeImpl> getAttributeTypes()
     {
-        Set<AttributeType> attributeTypes = new HashSet<AttributeType>();
+        Set<MutableAttributeTypeImpl> attributeTypes = new HashSet<MutableAttributeTypeImpl>();
 
         for ( EntryAttribute attribute : attributes.values() )
         {
@@ -1575,7 +1575,7 @@
                 }
 
                 // Search for the corresponding AttributeType, based on the upID
-                AttributeType attributeType = null;
+                MutableAttributeTypeImpl attributeType = null;
 
                 try
                 {
@@ -1616,12 +1616,12 @@
     /**
      * {@inheritDoc}
      **/
-    public List<EntryAttribute> set( AttributeType... attributeTypes )
+    public List<EntryAttribute> set( MutableAttributeTypeImpl... attributeTypes )
     {
         List<EntryAttribute> removed = new ArrayList<EntryAttribute>();
 
         // Now, loop on all the attributeType to add
-        for ( AttributeType attributeType : attributeTypes )
+        for ( MutableAttributeTypeImpl attributeType : attributeTypes )
         {
             if ( attributeType == null )
             {
@@ -1688,7 +1688,7 @@
 
                 if ( attribute.getAttributeType() == null )
                 {
-                    AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( attribute.getId() );
+                    MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( attribute.getId() );
                     attribute.setAttributeType( attributeType );
                 }
 
@@ -1709,7 +1709,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( AttributeType attributeType, byte[]... values ) throws LdapException
+    public EntryAttribute put( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         return put( null, attributeType, values );
     }
@@ -1718,7 +1718,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( AttributeType attributeType, String... values ) throws LdapException
+    public EntryAttribute put( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         return put( null, attributeType, values );
     }
@@ -1727,7 +1727,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( AttributeType attributeType, Value<?>... values ) throws LdapException
+    public EntryAttribute put( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         return put( null, attributeType, values );
     }
@@ -1736,7 +1736,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( String upId, AttributeType attributeType, byte[]... values ) throws LdapException
+    public EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -1755,7 +1755,7 @@
         {
             if ( !Strings.isEmpty(upId) )
             {
-                AttributeType tempAT = getAttributeType( upId );
+                MutableAttributeTypeImpl tempAT = getAttributeType( upId );
 
                 if ( !tempAT.equals( attributeType ) )
                 {
@@ -1786,7 +1786,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( String upId, AttributeType attributeType, String... values ) throws LdapException
+    public EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -1805,7 +1805,7 @@
         {
             if ( !Strings.isEmpty(upId) )
             {
-                AttributeType tempAT = getAttributeType( upId );
+                MutableAttributeTypeImpl tempAT = getAttributeType( upId );
 
                 if ( !tempAT.equals( attributeType ) )
                 {
@@ -1829,7 +1829,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( String upId, AttributeType attributeType, Value<?>... values ) throws LdapException
+    public EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -1848,7 +1848,7 @@
         {
             if ( !Strings.isEmpty(upId) )
             {
-                AttributeType tempAT = getAttributeType( upId );
+                MutableAttributeTypeImpl tempAT = getAttributeType( upId );
 
                 if ( !tempAT.equals( attributeType ) )
                 {
@@ -1891,7 +1891,7 @@
         {
             for ( EntryAttribute attribute : attributes )
             {
-                AttributeType attributeType = attribute.getAttributeType();
+                MutableAttributeTypeImpl attributeType = attribute.getAttributeType();
 
                 if ( attributeType == null )
                 {
@@ -1915,7 +1915,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean remove( AttributeType attributeType, byte[]... values ) throws LdapException
+    public boolean remove( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -1958,7 +1958,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean remove( AttributeType attributeType, String... values ) throws LdapException
+    public boolean remove( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -2001,7 +2001,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean remove( AttributeType attributeType, Value<?>... values ) throws LdapException
+    public boolean remove( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -2056,7 +2056,7 @@
      * @param attributes the AttributeTypes to be removed
      * @return the removed attributes, if any, as a list; otherwise <code>null</code>
      */
-    public List<EntryAttribute> removeAttributes( AttributeType... attributes )
+    public List<EntryAttribute> removeAttributes( MutableAttributeTypeImpl... attributes )
     {
         if ( ( attributes == null ) || ( attributes.length == 0 ) || ( schemaManager == null ) )
         {
@@ -2065,7 +2065,7 @@
 
         List<EntryAttribute> removed = new ArrayList<EntryAttribute>( attributes.length );
 
-        for ( AttributeType attributeType : attributes )
+        for ( MutableAttributeTypeImpl attributeType : attributes )
         {
             if ( attributeType == null )
             {
@@ -2125,7 +2125,7 @@
         {
             for ( String attribute : attributes )
             {
-                AttributeType attributeType = null;
+                MutableAttributeTypeImpl attributeType = null;
 
                 try
                 {
@@ -2219,7 +2219,7 @@
         {
             try
             {
-                AttributeType attributeType = getAttributeType( upId );
+                MutableAttributeTypeImpl attributeType = getAttributeType( upId );
 
                 return remove( attributeType, values );
             }
@@ -2299,7 +2299,7 @@
         {
             try
             {
-                AttributeType attributeType = getAttributeType( upId );
+                MutableAttributeTypeImpl attributeType = getAttributeType( upId );
 
                 return remove( attributeType, values );
             }
@@ -2378,7 +2378,7 @@
         {
             try
             {
-                AttributeType attributeType = getAttributeType( upId );
+                MutableAttributeTypeImpl attributeType = getAttributeType( upId );
 
                 return remove( attributeType, values );
             }
@@ -2561,7 +2561,7 @@
             {
                 try
                 {
-                    AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( attribute.getId() );
+                    MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( attribute.getId() );
 
                     attributes.put( attributeType.getOid(), attribute );
                 }
@@ -2617,7 +2617,7 @@
             // here, to be able to restore it in the readExternal :
             // we need access to the registries, which are not available
             // in the ServerAttribute class.
-            for ( AttributeType attributeType : getAttributeTypes() )
+            for ( MutableAttributeTypeImpl attributeType : getAttributeTypes() )
             {
                 // Write the oid to be able to restore the AttributeType when deserializing
                 // the attribute
@@ -2684,7 +2684,7 @@
 
                 try
                 {
-                    AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
+                    MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
 
                     // Create the attribute we will read
                     EntryAttribute attribute = new DefaultEntryAttribute( attributeType );
@@ -2925,7 +2925,7 @@
 
                 if ( schemaManager != null )
                 {
-                    AttributeType attributeType = schemaManager.getAttributeType( id );
+                    MutableAttributeTypeImpl attributeType = schemaManager.getAttributeType( id );
 
                     if ( attributeType != objectClassAttributeType )
                     {
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultEntryAttribute.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultEntryAttribute.java
index 1ac0014..bc55d00 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultEntryAttribute.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultEntryAttribute.java
@@ -31,7 +31,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.shared.ldap.model.message.ResultCodeEnum;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SyntaxChecker;
 import org.apache.directory.shared.util.Strings;
 import org.apache.directory.shared.util.Unicode;
@@ -53,7 +53,7 @@
     private static final Logger LOG = LoggerFactory.getLogger( DefaultEntryAttribute.class );
 
     /** The associated AttributeType */
-    private AttributeType attributeType;
+    private MutableAttributeTypeImpl attributeType;
     
     /** The set of contained values */
     private Set<Value<?>> values = new LinkedHashSet<Value<?>>();
@@ -74,7 +74,7 @@
     //-------------------------------------------------------------------------
     // Helper methods
     //-------------------------------------------------------------------------
-    private Value<String> createStringValue( AttributeType attributeType, String value )
+    private Value<String> createStringValue( MutableAttributeTypeImpl attributeType, String value )
     {
         Value<String> stringValue = null;
         
@@ -109,7 +109,7 @@
     }
 
 
-    private Value<byte[]> createBinaryValue( AttributeType attributeType, byte[] value )
+    private Value<byte[]> createBinaryValue( MutableAttributeTypeImpl attributeType, byte[] value )
     {
         Value<byte[]> binaryValue = null;
         
@@ -161,7 +161,7 @@
     /**
      * Create a new instance of a EntryAttribute, without ID nor value.
      */
-    /* No qualifier */ DefaultEntryAttribute( AttributeType attributeType, String upId, String normId, boolean isHR, int hashCode, Value<?>... values)
+    /* No qualifier */ DefaultEntryAttribute( MutableAttributeTypeImpl attributeType, String upId, String normId, boolean isHR, int hashCode, Value<?>... values)
     {
         this.attributeType = attributeType;
         this.upId = upId;
@@ -184,7 +184,7 @@
      * 
      * @param attributeType the attributeType for the empty attribute added into the entry
      */
-    public DefaultEntryAttribute( AttributeType attributeType )
+    public DefaultEntryAttribute( MutableAttributeTypeImpl attributeType )
     {
         if ( attributeType == null )
         {
@@ -212,7 +212,7 @@
      * @param upId the ID for the added attributeType
      * @param attributeType the added AttributeType
      */
-    public DefaultEntryAttribute( String upId, AttributeType attributeType )
+    public DefaultEntryAttribute( String upId, MutableAttributeTypeImpl attributeType )
     {
         if ( attributeType == null ) 
         {
@@ -270,7 +270,7 @@
      * @param attributeType The attributeType added on creation
      * @param vals The added value for this attribute
      */
-    public DefaultEntryAttribute( AttributeType attributeType, String... vals )
+    public DefaultEntryAttribute( MutableAttributeTypeImpl attributeType, String... vals )
     {
         this( null, attributeType, vals );
     }
@@ -283,7 +283,7 @@
      * @param attributeType The attributeType added on creation
      * @param vals the added values for this attribute
      */
-    public DefaultEntryAttribute( String upId, AttributeType attributeType, String... vals )
+    public DefaultEntryAttribute( String upId, MutableAttributeTypeImpl attributeType, String... vals )
     {
         if ( attributeType == null )
         {
@@ -311,7 +311,7 @@
      * @param attributeType the attribute type according to the schema
      * @param vals an initial set of values for this attribute
      */
-    public DefaultEntryAttribute( String upId, AttributeType attributeType, Value<?>... vals )
+    public DefaultEntryAttribute( String upId, MutableAttributeTypeImpl attributeType, Value<?>... vals )
     {
         if ( attributeType == null )
         {
@@ -336,7 +336,7 @@
      * @param attributeType the attribute type according to the schema
      * @param vals an initial set of values for this attribute
      */
-    public DefaultEntryAttribute( AttributeType attributeType, Value<?>... vals )
+    public DefaultEntryAttribute( MutableAttributeTypeImpl attributeType, Value<?>... vals )
     {
         this( null, attributeType, vals );
     }
@@ -368,7 +368,7 @@
      * @param attributeType The attributeType added on creation
      * @param vals The value for the added attribute
      */
-    public DefaultEntryAttribute( AttributeType attributeType, byte[]... vals )
+    public DefaultEntryAttribute( MutableAttributeTypeImpl attributeType, byte[]... vals )
     {
         this( null, attributeType, vals );
     }
@@ -381,7 +381,7 @@
      * @param attributeType the AttributeType to be added
      * @param vals the values for the added attribute
      */
-    public DefaultEntryAttribute( String upId, AttributeType attributeType, byte[]... vals )
+    public DefaultEntryAttribute( String upId, MutableAttributeTypeImpl attributeType, byte[]... vals )
     {
         if ( attributeType == null )
         {
@@ -403,7 +403,7 @@
      * @param attributeType The attribute's type 
      * @param attribute The attribute to be copied
      */
-    public DefaultEntryAttribute( AttributeType attributeType, EntryAttribute attribute )
+    public DefaultEntryAttribute( MutableAttributeTypeImpl attributeType, EntryAttribute attribute )
     {
         // Copy the common values. isHR is only available on a ServerAttribute 
         this.attributeType = attributeType;
@@ -667,7 +667,7 @@
     /**
      * Check that the upId is either a name or the OID of a given AT
      */
-    private boolean areCompatible( String id, AttributeType attributeType )
+    private boolean areCompatible( String id, MutableAttributeTypeImpl attributeType )
     {
         // First, get rid of the options, if any
         int optPos = id.indexOf( ";" );
@@ -712,7 +712,7 @@
      * @param upId The attribute ID
      * @param attributeType The associated attributeType
      */
-    public void setUpId( String upId, AttributeType attributeType )
+    public void setUpId( String upId, MutableAttributeTypeImpl attributeType )
     {
         String trimmed = Strings.trim(upId);
 
@@ -2126,7 +2126,7 @@
      *
      * @return the attributeType associated with this entry attribute
      */
-    public AttributeType getAttributeType()
+    public MutableAttributeTypeImpl getAttributeType()
     {
         return attributeType;
     }
@@ -2144,7 +2144,7 @@
      *
      * @param attributeType the attributeType associated with this entry attribute
      */
-    public void setAttributeType( AttributeType attributeType )
+    public void setAttributeType( MutableAttributeTypeImpl attributeType )
     {
         if ( attributeType == null )
         {
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultModification.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultModification.java
index 66cb734..ce6ed4d 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultModification.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/DefaultModification.java
@@ -25,7 +25,7 @@
 
 import org.apache.directory.shared.i18n.I18n;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.util.Unicode;
 import org.slf4j.Logger;
@@ -75,7 +75,7 @@
         
         try
         {
-            AttributeType at = modAttribute.getAttributeType();
+            MutableAttributeTypeImpl at = modAttribute.getAttributeType();
             
             if ( at == null )
             {
@@ -240,7 +240,7 @@
         // Write the operation
         out.writeInt( operation.getValue() );
         
-        AttributeType at = attribute.getAttributeType();
+        MutableAttributeTypeImpl at = attribute.getAttributeType();
         
         // Write the attribute's oid
         Unicode.writeUTF(out, at.getOid());
@@ -270,7 +270,7 @@
         String oid = Unicode.readUTF(in);
         
         // Lookup for tha associated AttributeType
-        AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
+        MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
         
         attribute = new DefaultEntryAttribute( attributeType );
         
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/Entry.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/Entry.java
index 7521143..395bc43 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/Entry.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/Entry.java
@@ -27,7 +27,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 
 import org.apache.directory.shared.ldap.model.name.Dn;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -117,7 +117,7 @@
      * @param attributeType the AttributeType we are looking for
      * @return the associated attribute
      */
-    EntryAttribute get( AttributeType attributeType );
+    EntryAttribute get( MutableAttributeTypeImpl attributeType );
 
 
     /**
@@ -125,7 +125,7 @@
      *
      * @return The combined set of all the attributes.
      */
-    Set<AttributeType> getAttributeTypes();
+    Set<MutableAttributeTypeImpl> getAttributeTypes();
     
     
     /**
@@ -157,7 +157,7 @@
      * @param attributeTypes The AttributeTypes to add.
      * @return A list of replaced Attributes, of <code>null</code> if no attribute are removed.
      */
-    List<EntryAttribute> set( AttributeType... attributeTypes );
+    List<EntryAttribute> set( MutableAttributeTypeImpl... attributeTypes );
 
 
     /**
@@ -241,7 +241,7 @@
      * @param values The list of binary values to inject. It can be empty.
      * @throws LdapException If the attribute does not exist
      */
-    void add( AttributeType attributeType, byte[]... values ) throws LdapException;
+    void add( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException;
 
     
     /**
@@ -262,7 +262,7 @@
      * @param values The list of binary values to inject. It can be empty
      * @throws org.apache.directory.shared.ldap.model.exception.LdapException If the attribute does not exist
      */
-    void add( AttributeType attributeType, String... values ) throws LdapException;
+    void add( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException;
 
     
     /**
@@ -283,7 +283,7 @@
      * @param values The list of binary values to inject. It can be empty
      * @throws LdapException If the attribute does not exist
      */
-    void add( AttributeType attributeType, Value<?>... values ) throws LdapException;
+    void add( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException;
 
     
     /**
@@ -305,7 +305,7 @@
      * @param values The list of binary values to add. It can be empty.
      * @throws LdapException If the attribute does not exist
      */
-    void add( String upId, AttributeType attributeType, byte[]... values ) throws LdapException;
+    void add( String upId, MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException;
 
     
     /**
@@ -327,7 +327,7 @@
      * @param values The list of binary values to add. It can be empty.
      * @throws LdapException If the attribute does not exist
      */
-    void add( String upId, AttributeType attributeType, String... values ) throws LdapException;
+    void add( String upId, MutableAttributeTypeImpl attributeType, String... values ) throws LdapException;
 
     
     /**
@@ -349,7 +349,7 @@
      * @param values The list of values to add. It can be empty.
      * @throws LdapException If the attribute does not exist
      */
-    void add( String upId, AttributeType attributeType, Value<?>... values ) throws LdapException;
+    void add( String upId, MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException;
 
 
     /**
@@ -422,7 +422,7 @@
      * <code>null</code>
      * @throws org.apache.directory.shared.ldap.model.exception.LdapException if there are failures
      */
-    EntryAttribute put( AttributeType attributeType, byte[]... values ) throws LdapException;
+    EntryAttribute put( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException;
 
 
     /**
@@ -444,7 +444,7 @@
      * <code>null</code>
      * @throws org.apache.directory.shared.ldap.model.exception.LdapException if there are failures
      */
-    EntryAttribute put( AttributeType attributeType, String... values ) throws LdapException;
+    EntryAttribute put( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException;
 
 
     /**
@@ -466,7 +466,7 @@
      * <code>null</code>
      * @throws LdapException if there are failures
      */
-    EntryAttribute put( AttributeType attributeType, Value<?>... values ) throws LdapException;
+    EntryAttribute put( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException;
 
 
     /**
@@ -491,7 +491,7 @@
      * <code>null</code>
      * @throws LdapException if there are failures.
      */
-    EntryAttribute put( String upId, AttributeType attributeType, byte[]... values ) throws LdapException;
+    EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException;
 
 
     /**
@@ -517,7 +517,7 @@
      * <code>null</code>
      * @throws org.apache.directory.shared.ldap.model.exception.LdapException if there are failures.
      */
-    EntryAttribute put( String upId, AttributeType attributeType, String... values ) throws LdapException;
+    EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, String... values ) throws LdapException;
 
 
     /**
@@ -543,7 +543,7 @@
      * <code>null</code>
      * @throws LdapException if there are failures.
      */
-    EntryAttribute put( String upId, AttributeType attributeType, Value<?>... values ) throws LdapException;
+    EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException;
 
 
     /**
@@ -615,7 +615,7 @@
      * @return <code>true</code> if at least a value is removed, <code>false</code>
      * if not all the values have been removed or if the attribute does not exist. 
      */
-    boolean remove( AttributeType attributeType, byte[]... values ) throws LdapException;
+    boolean remove( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException;
 
     
     /**
@@ -639,7 +639,7 @@
      * @return <code>true</code> if at least a value is removed, <code>false</code>
      * if not all the values have been removed or if the attribute does not exist. 
      */
-    boolean remove( AttributeType attributeType, String... values ) throws LdapException;
+    boolean remove( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException;
 
     
     /**
@@ -663,7 +663,7 @@
      * @return <code>true</code> if at least a value is removed, <code>false</code>
      * if not all the values have been removed or if the attribute does not exist. 
      */
-    boolean remove( AttributeType attributeType, Value<?>... values ) throws LdapException;
+    boolean remove( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException;
 
     
     /**
@@ -692,7 +692,7 @@
      * @param attributes the AttributeTypes to be removed
      * @return the removed attributes, if any, as a list; otherwise <code>null</code>
      */
-    List<EntryAttribute> removeAttributes( AttributeType... attributes );
+    List<EntryAttribute> removeAttributes( MutableAttributeTypeImpl... attributes );
 
 
     /**
@@ -807,7 +807,7 @@
      * @return <code>true</code> if all the values are found within the attribute,
      * <code>false</code> otherwise, or if the attributes does not exist.
      */
-    boolean contains( AttributeType attributeType, byte[]... values );
+    boolean contains( MutableAttributeTypeImpl attributeType, byte[]... values );
 
 
     /**
@@ -818,7 +818,7 @@
      * @return <code>true</code> if all the values are found within the attribute,
      * <code>false</code> otherwise, or if the attributes does not exist.
      */
-    boolean contains( AttributeType attributeType, String... values );
+    boolean contains( MutableAttributeTypeImpl attributeType, String... values );
 
 
     /**
@@ -829,7 +829,7 @@
      * @return <code>true</code> if all the values are found within the attribute,
      * <code>false</code> otherwise, or if the attributes does not exist.
      */
-    boolean contains( AttributeType attributeType, Value<?>... values );
+    boolean contains( MutableAttributeTypeImpl attributeType, Value<?>... values );
 
 
     /**
@@ -838,7 +838,7 @@
      * @param attributeType The AttributeType to look for.
      * @return <code>true</code> if the attribute is found within the entry.
      */
-    boolean containsAttribute( AttributeType attributeType );
+    boolean containsAttribute( MutableAttributeTypeImpl attributeType );
 
     
     /**
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryAttribute.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryAttribute.java
index 539dca6..c70e0a1 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryAttribute.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryAttribute.java
@@ -26,7 +26,7 @@
 
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.exception.LdapInvalidAttributeValueException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SyntaxChecker;
 
 
@@ -207,7 +207,7 @@
      *
      * @return the attributeType associated with this entry attribute
      */
-    AttributeType getAttributeType();
+    MutableAttributeTypeImpl getAttributeType();
 
     
     /**
@@ -222,7 +222,7 @@
      *
      * @param attributeType the attributeType associated with this entry attribute
      */
-    void setAttributeType( AttributeType attributeType );
+    void setAttributeType( MutableAttributeTypeImpl attributeType );
 
     
     /**
@@ -475,7 +475,7 @@
      * @param upId The attribute ID
      * @param attributeType The associated attributeType
      */
-    void setUpId( String upId, AttributeType attributeType );
+    void setUpId( String upId, MutableAttributeTypeImpl attributeType );
 
     
     /**
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryAttributeSerializer.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryAttributeSerializer.java
index 6b3dcc6..40fc1da 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryAttributeSerializer.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryAttributeSerializer.java
@@ -23,7 +23,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -118,7 +118,7 @@
             }
         }
         
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
         
         if ( schemaManager != null )
         {
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryUtils.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryUtils.java
index 09d40da..0aa1ce9 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryUtils.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/EntryUtils.java
@@ -21,7 +21,7 @@
 
 import org.apache.directory.shared.i18n.I18n;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
 import org.apache.directory.shared.ldap.model.schema.MutableLdapSyntaxImpl;
 import org.apache.directory.shared.ldap.model.schema.MutableMatchingRuleImpl;
@@ -41,7 +41,7 @@
     /**
      * A local Syntax class for tests
      */
-    static class AT extends AttributeType
+    static class AT extends MutableAttributeTypeImpl
     {
         private static final long serialVersionUID = 0L;
 
@@ -93,9 +93,9 @@
         }
     }
 
-    /* no protection*/ static AttributeType getCaseIgnoringAttributeNoNumbersType()
+    /* no protection*/ static MutableAttributeTypeImpl getCaseIgnoringAttributeNoNumbersType()
     {
-        AttributeType attributeType = new AttributeType( "1.1.3.1" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.3.1" );
         MutableLdapSyntaxImpl syntax = new MutableLdapSyntaxImpl( "1.1.1.1", "", true );
 
         syntax.setSyntaxChecker( new AbstractSyntaxChecker( "1.1.2.1" )
@@ -176,9 +176,9 @@
     }
 
 
-    /* no protection*/ static AttributeType getIA5StringAttributeType()
+    /* no protection*/ static MutableAttributeTypeImpl getIA5StringAttributeType()
     {
-        AttributeType attributeType = new AttributeType( "1.1" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1" );
         attributeType.addName( "1.1" );
         MutableLdapSyntaxImpl syntax = new MutableLdapSyntaxImpl( "1.1.1", "", true );
 
@@ -224,9 +224,9 @@
     }
 
 
-    /* No protection */ static AttributeType getBytesAttributeType()
+    /* No protection */ static MutableAttributeTypeImpl getBytesAttributeType()
     {
-        AttributeType attributeType = new AttributeType( "1.2" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.2" );
         MutableLdapSyntaxImpl syntax = new MutableLdapSyntaxImpl( "1.2.1", "", true );
 
         syntax.setSyntaxChecker( new AbstractSyntaxChecker( "1.2.1" )
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/ImmutableEntry.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/ImmutableEntry.java
index 141dff7..16cd852 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/ImmutableEntry.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/ImmutableEntry.java
@@ -29,7 +29,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.util.exception.NotImplementedException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -68,7 +68,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( AttributeType attributeType, byte[]... values ) throws LdapException
+    public void add( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot add an attribute : the entry " + entry.getDn() + " is immutable." );
@@ -78,7 +78,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( AttributeType attributeType, String... values ) throws LdapException
+    public void add( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot add an attribute : the entry " + entry.getDn() + " is immutable." );
@@ -88,7 +88,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( AttributeType attributeType, Value<?>... values ) throws LdapException
+    public void add( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot add an attribute : the entry " + entry.getDn() + " is immutable." );
@@ -98,7 +98,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( String upId, AttributeType attributeType, byte[]... values ) throws LdapException
+    public void add( String upId, MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot add an attribute : the entry " + entry.getDn() + " is immutable." );
@@ -108,7 +108,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( String upId, AttributeType attributeType, Value<?>... values ) throws LdapException
+    public void add( String upId, MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot add an attribute : the entry " + entry.getDn() + " is immutable." );
@@ -118,7 +118,7 @@
     /**
      * {@inheritDoc}
      */
-    public void add( String upId, AttributeType attributeType, String... values ) throws LdapException
+    public void add( String upId, MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot add an attribute : the entry " + entry.getDn() + " is immutable." );
@@ -206,7 +206,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean containsAttribute( AttributeType attributeType )
+    public boolean containsAttribute( MutableAttributeTypeImpl attributeType )
     {
         return entry.containsAttribute( attributeType );
     }
@@ -215,7 +215,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean contains( AttributeType attributeType, byte[]... values )
+    public boolean contains( MutableAttributeTypeImpl attributeType, byte[]... values )
     {
         return entry.contains( attributeType, values );
     }
@@ -224,7 +224,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean contains( AttributeType attributeType, String... values )
+    public boolean contains( MutableAttributeTypeImpl attributeType, String... values )
     {
         return entry.contains( attributeType, values );
     }
@@ -233,7 +233,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean contains( AttributeType attributeType, Value<?>... values )
+    public boolean contains( MutableAttributeTypeImpl attributeType, Value<?>... values )
     {
         return entry.contains( attributeType, values );
     }
@@ -278,7 +278,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute get( AttributeType attributeType )
+    public EntryAttribute get( MutableAttributeTypeImpl attributeType )
     {
         return entry.get( attributeType );
     }
@@ -287,7 +287,7 @@
     /**
      * {@inheritDoc}
      */
-    public Set<AttributeType> getAttributeTypes()
+    public Set<MutableAttributeTypeImpl> getAttributeTypes()
     {
         return entry.getAttributeTypes();
     }
@@ -336,7 +336,7 @@
     /**
      * {@inheritDoc}     
      **/
-    public List<EntryAttribute> set( AttributeType... attributeTypes )
+    public List<EntryAttribute> set( MutableAttributeTypeImpl... attributeTypes )
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot set a value : the entry " + entry.getDn() + " is immutable." );
@@ -356,7 +356,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( AttributeType attributeType, byte[]... values ) throws LdapException
+    public EntryAttribute put( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot put a value : the entry " + entry.getDn() + " is immutable." );
@@ -366,7 +366,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( AttributeType attributeType, String... values ) throws LdapException
+    public EntryAttribute put( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot put a value : the entry " + entry.getDn() + " is immutable." );
@@ -376,7 +376,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( AttributeType attributeType, Value<?>... values ) throws LdapException
+    public EntryAttribute put( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot put a value : the entry " + entry.getDn() + " is immutable." );
@@ -386,7 +386,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( String upId, AttributeType attributeType, byte[]... values ) throws LdapException
+    public EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot put a value : the entry " + entry.getDn() + " is immutable." );
@@ -396,7 +396,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( String upId, AttributeType attributeType, String... values ) throws LdapException
+    public EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot put a value : the entry " + entry.getDn() + " is immutable." );
@@ -406,7 +406,7 @@
     /**
      * {@inheritDoc}
      */
-    public EntryAttribute put( String upId, AttributeType attributeType, Value<?>... values ) throws LdapException
+    public EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot put a value : the entry " + entry.getDn() + " is immutable." );
@@ -426,7 +426,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean remove( AttributeType attributeType, byte[]... values ) throws LdapException
+    public boolean remove( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot remove a value : the entry " + entry.getDn() + " is immutable." );
@@ -436,7 +436,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean remove( AttributeType attributeType, String... values ) throws LdapException
+    public boolean remove( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot remove a value : the entry " + entry.getDn() + " is immutable." );
@@ -446,7 +446,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean remove( AttributeType attributeType, Value<?>... values ) throws LdapException
+    public boolean remove( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot remove a value : the entry " + entry.getDn() + " is immutable." );
@@ -468,7 +468,7 @@
      * @param attributes the AttributeTypes to be removed
      * @return the removed attributes, if any, as a list; otherwise <code>null</code>
      */
-    public List<EntryAttribute> removeAttributes( AttributeType... attributes )
+    public List<EntryAttribute> removeAttributes( MutableAttributeTypeImpl... attributes )
     {
         new Exception().printStackTrace();
         throw new NotImplementedException( "Cannot remove a value : the entry " + entry.getDn() + " is immutable." );
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/StringValue.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/StringValue.java
index 9ace313..6fa4bc9 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/StringValue.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/StringValue.java
@@ -25,7 +25,7 @@
 
 import org.apache.directory.shared.i18n.I18n;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
 import org.apache.directory.shared.ldap.model.schema.Normalizer;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
@@ -70,7 +70,7 @@
      *
      * @param attributeType the schema type associated with this StringValue
      */
-    public StringValue( AttributeType attributeType )
+    public StringValue( MutableAttributeTypeImpl attributeType )
     {
         if ( attributeType == null )
         {
@@ -113,7 +113,7 @@
      * @param attributeType the schema type associated with this StringValue
      * @param value the value to wrap which can be null
      */
-    public StringValue( AttributeType attributeType, String value )
+    public StringValue( MutableAttributeTypeImpl attributeType, String value )
     {
         this( attributeType );
         this.wrappedValue = value;
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/Value.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/Value.java
index 359a4f5..49784b1 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/Value.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/entry/Value.java
@@ -23,7 +23,7 @@
 import java.io.Externalizable;
 
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.Normalizer;
 import org.apache.directory.shared.ldap.model.schema.SyntaxChecker;
 
@@ -41,7 +41,7 @@
      *
      * @param attributeType The AttributeType to apply
      */
-    void apply( AttributeType attributeType );
+    void apply( MutableAttributeTypeImpl attributeType );
     
 
     /**
@@ -63,7 +63,7 @@
      * 
      * @return The AttributeType
      */
-    AttributeType getAttributeType();
+    MutableAttributeTypeImpl getAttributeType();
 
     
     /**
@@ -77,7 +77,7 @@
      * @return <code>true</code> if the value is associated with the given
      * attributeType or one of its ascendant
      */
-    boolean instanceOf( AttributeType attributeType ) throws LdapException;
+    boolean instanceOf( MutableAttributeTypeImpl attributeType ) throws LdapException;
 
     
     /**
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/ApproximateNode.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/ApproximateNode.java
index 0fc4311..01d4c41 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/ApproximateNode.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/ApproximateNode.java
@@ -20,7 +20,7 @@
 package org.apache.directory.shared.ldap.model.filter;
 
 import org.apache.directory.shared.ldap.model.entry.Value;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 /**
  * A simple assertion value node.
@@ -35,7 +35,7 @@
      * @param attributeType the attribute type
      * @param value the value to test for
      */
-    public ApproximateNode( AttributeType attributeType, Value<T> value )
+    public ApproximateNode( MutableAttributeTypeImpl attributeType, Value<T> value )
     {
         super( attributeType, value, AssertionType.APPROXIMATE );
     }
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/EqualityNode.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/EqualityNode.java
index 19815b3..cfdcaf8 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/EqualityNode.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/EqualityNode.java
@@ -21,7 +21,7 @@
 
 
 import org.apache.directory.shared.ldap.model.entry.Value;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -37,7 +37,7 @@
      * @param attributeType the attributeType
      * @param value the value to test for
      */
-    public EqualityNode( AttributeType attributeType, Value<T> value )
+    public EqualityNode( MutableAttributeTypeImpl attributeType, Value<T> value )
     {
         super( attributeType, value, AssertionType.EQUALITY );
     }
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/ExtensibleNode.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/ExtensibleNode.java
index 2aae24a..896b1ad 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/ExtensibleNode.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/ExtensibleNode.java
@@ -21,7 +21,7 @@
 
 
 import org.apache.directory.shared.ldap.model.entry.Value;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -46,7 +46,7 @@
      * 
      * @param attributeType the attributeType associated with this node
      */
-    public ExtensibleNode( AttributeType attributeType )
+    public ExtensibleNode( MutableAttributeTypeImpl attributeType )
     {
         super( attributeType, AssertionType.EXTENSIBLE );
         
@@ -75,7 +75,7 @@
      * @param matchingRuleId the OID of the matching rule
      * @param dnAttributes the dn attributes
      */
-    public ExtensibleNode( AttributeType attributeType, Value<?> value, String matchingRuleId, boolean dnAttributes )
+    public ExtensibleNode( MutableAttributeTypeImpl attributeType, Value<?> value, String matchingRuleId, boolean dnAttributes )
     {
         super( attributeType, AssertionType.EXTENSIBLE );
 
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/FilterParser.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/FilterParser.java
index 352d4be..1aab8fb 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/FilterParser.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/FilterParser.java
@@ -27,7 +27,7 @@
 import org.apache.directory.shared.ldap.model.entry.BinaryValue;
 import org.apache.directory.shared.ldap.model.entry.Value;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.util.*;
 
@@ -60,7 +60,7 @@
         
         if ( schemaManager != null )
         {
-            AttributeType attributeType = schemaManager.getAttributeType( attribute );
+            MutableAttributeTypeImpl attributeType = schemaManager.getAttributeType( attribute );
             
             if ( attributeType != null )
             {
@@ -306,7 +306,7 @@
             
             if ( schemaManager != null )
             {
-                AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( attribute );
+                MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( attribute );
                 
                 if ( attributeType != null )
                 {
@@ -416,7 +416,7 @@
                 // This is a present node
                 if ( schemaManager != null )
                 {
-                    AttributeType attributeType = schemaManager.getAttributeType( attribute );
+                    MutableAttributeTypeImpl attributeType = schemaManager.getAttributeType( attribute );
                     
                     if ( attributeType != null )
                     {
@@ -445,7 +445,7 @@
             // An empty equality Node
             if ( schemaManager != null )
             {
-                AttributeType attributeType = schemaManager.getAttributeType( attribute );
+                MutableAttributeTypeImpl attributeType = schemaManager.getAttributeType( attribute );
                 
                 if ( attributeType != null )
                 {
@@ -473,7 +473,7 @@
                 // This is an equality node
                 if ( schemaManager != null )
                 {
-                    AttributeType attributeType = schemaManager.getAttributeType( attribute );
+                    MutableAttributeTypeImpl attributeType = schemaManager.getAttributeType( attribute );
                     
                     if ( attributeType != null )
                     {
@@ -558,7 +558,7 @@
                     }
                     else
                     {
-                        AttributeType attributeType = schemaManager.getAttributeType( attribute );
+                        MutableAttributeTypeImpl attributeType = schemaManager.getAttributeType( attribute );
                         
                         if ( attributeType != null )
                         {
@@ -589,7 +589,7 @@
                     }
                     else
                     {
-                        AttributeType attributeType = schemaManager.getAttributeType( attribute );
+                        MutableAttributeTypeImpl attributeType = schemaManager.getAttributeType( attribute );
                         
                         if ( attributeType != null )
                         {
@@ -620,7 +620,7 @@
                     }
                     else
                     {
-                        AttributeType attributeType = schemaManager.getAttributeType( attribute );
+                        MutableAttributeTypeImpl attributeType = schemaManager.getAttributeType( attribute );
                         
                         if ( attributeType != null )
                         {
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/GreaterEqNode.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/GreaterEqNode.java
index 7fe6b6c..d6dffe7 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/GreaterEqNode.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/GreaterEqNode.java
@@ -21,7 +21,7 @@
 
 
 import org.apache.directory.shared.ldap.model.entry.Value;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -37,7 +37,7 @@
      * @param attributeType the attributeType
      * @param value the value to test for
      */
-    public GreaterEqNode( AttributeType attributeType, Value<T> value )
+    public GreaterEqNode( MutableAttributeTypeImpl attributeType, Value<T> value )
     {
         super( attributeType, value, AssertionType.GREATEREQ );
     }
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/LeafNode.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/LeafNode.java
index 0bcb465..ab9f990 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/LeafNode.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/LeafNode.java
@@ -19,7 +19,7 @@
  */
 package org.apache.directory.shared.ldap.model.filter;
 
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -30,7 +30,7 @@
 public class LeafNode extends AbstractExprNode
 {
     /** attributeType on which this leaf is based */
-    protected AttributeType attributeType;
+    protected MutableAttributeTypeImpl attributeType;
     
     /** attribute on which this leaf is based */
     protected String attribute;
@@ -42,7 +42,7 @@
      * @param attributeType the attribute this node is based on
      * @param assertionType the type of this leaf node
      */
-    protected LeafNode( AttributeType attributeType, AssertionType assertionType )
+    protected LeafNode( MutableAttributeTypeImpl attributeType, AssertionType assertionType )
     {
         super( assertionType );
         this.attributeType = attributeType;
@@ -86,7 +86,7 @@
      * 
      * @return the attributeType asserted
      */
-    public final AttributeType getAttributeType()
+    public final MutableAttributeTypeImpl getAttributeType()
     {
         return attributeType;
     }
@@ -108,7 +108,7 @@
      * 
      * @param attributeType the attributeType that is asserted by this filter node
      */
-    public void setAttributeType( AttributeType attributeType )
+    public void setAttributeType( MutableAttributeTypeImpl attributeType )
     {
         this.attributeType = attributeType;
         
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/LessEqNode.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/LessEqNode.java
index 4d4c3b6..9d9e27d 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/LessEqNode.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/LessEqNode.java
@@ -21,7 +21,7 @@
 
 
 import org.apache.directory.shared.ldap.model.entry.Value;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -37,7 +37,7 @@
      * @param attributeType the attributeType
      * @param value the value to test for
      */
-    public LessEqNode( AttributeType attributeType, Value<T> value )
+    public LessEqNode( MutableAttributeTypeImpl attributeType, Value<T> value )
     {
         super( attributeType, value, AssertionType.LESSEQ );
     }
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/PresenceNode.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/PresenceNode.java
index 12b8a24..20528b6 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/PresenceNode.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/PresenceNode.java
@@ -19,7 +19,7 @@
  */
 package org.apache.directory.shared.ldap.model.filter;
 
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -35,7 +35,7 @@
      * 
      * @param attributeType the attributeType to assert the presence of
      */
-    public PresenceNode( AttributeType attributeType )
+    public PresenceNode( MutableAttributeTypeImpl attributeType )
     {
         super( attributeType, AssertionType.PRESENCE );
     }
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/SimpleNode.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/SimpleNode.java
index 4507106..e2306a4 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/SimpleNode.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/SimpleNode.java
@@ -23,7 +23,7 @@
 import org.apache.directory.shared.i18n.I18n;
 import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.model.entry.Value;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -64,7 +64,7 @@
      * @param value the value to test for
      * @param assertionType the type of assertion represented by this ExprNode
      */
-    protected SimpleNode( AttributeType attributeType, Value<T> value, AssertionType assertionType )
+    protected SimpleNode( MutableAttributeTypeImpl attributeType, Value<T> value, AssertionType assertionType )
     {
         super( attributeType, assertionType );
         this.value = value;
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/SubstringNode.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/SubstringNode.java
index 3f3194f..71cee0a 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/SubstringNode.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/filter/SubstringNode.java
@@ -27,7 +27,7 @@
 
 import org.apache.directory.shared.ldap.model.entry.StringValue;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.Normalizer;
 
 
@@ -55,7 +55,7 @@
      * @param initialPattern the initial fragment
      * @param finalPattern the final fragment
      */
-    public SubstringNode( AttributeType attributeType, String initialPattern, String finalPattern )
+    public SubstringNode( MutableAttributeTypeImpl attributeType, String initialPattern, String finalPattern )
     {
         super( attributeType, AssertionType.SUBSTRING );
 
@@ -88,7 +88,7 @@
      * 
      * @param attribute the name of the attribute to substring assert
      */
-    public SubstringNode( AttributeType attribute )
+    public SubstringNode( MutableAttributeTypeImpl attribute )
     {
         super( attribute, AssertionType.SUBSTRING );
 
@@ -122,7 +122,7 @@
      * @param initialPattern the initial fragment
      * @param finalPattern the final fragment
      */
-    public SubstringNode( List<String> anyPattern, AttributeType attributeType, String initialPattern, String finalPattern )
+    public SubstringNode( List<String> anyPattern, MutableAttributeTypeImpl attributeType, String initialPattern, String finalPattern )
     {
         super( attributeType, AssertionType.SUBSTRING );
 
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifAttributesReader.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifAttributesReader.java
index 0b94657..b0da8a3 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifAttributesReader.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifAttributesReader.java
@@ -34,7 +34,7 @@
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.util.Strings;
 import org.slf4j.Logger;
@@ -216,7 +216,7 @@
         int colonIndex = line.indexOf( ':' );
 
         String attributeName = lowerLine.substring( 0, colonIndex );
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         // We should *not* have a Dn twice
         if ( attributeName.equals( "dn" ) )
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/SearchParams.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/SearchParams.java
index de0697c..7b14912 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/SearchParams.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/message/SearchParams.java
@@ -27,7 +27,7 @@
 
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.filter.SearchScope;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.AttributeTypeOptions;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.SchemaUtils;
@@ -207,7 +207,7 @@
                 String id = SchemaUtils.stripOptions( returnAttribute );
                 Set<String> options = SchemaUtils.getOptions( returnAttribute );
 
-                AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( id );
+                MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( id );
                 AttributeTypeOptions attrOptions = new AttributeTypeOptions( attributeType, options );
 
                 returningAttributes.add( attrOptions );
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/name/Ava.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/name/Ava.java
index 3257c3a..e498d8e 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/name/Ava.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/name/Ava.java
@@ -32,7 +32,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.shared.ldap.model.message.ResultCodeEnum;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.LdapComparator;
 import org.apache.directory.shared.ldap.model.schema.MatchingRule;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
@@ -74,7 +74,7 @@
     private String normType;
     
     /** The attributeType if the Ava is schemaAware */
-    private AttributeType attributeType;
+    private MutableAttributeTypeImpl attributeType;
 
     /** The user provided Name type */
     private String upType;
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/AttributeTypeOptions.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/AttributeTypeOptions.java
index 2dc4cf2..df83590 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/AttributeTypeOptions.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/AttributeTypeOptions.java
@@ -38,7 +38,7 @@
 public class AttributeTypeOptions
 {
     /** The attributeType */
-    private AttributeType attributeType;
+    private MutableAttributeTypeImpl attributeType;
 
     /** The options, if any */
     private Set<String> options;
@@ -50,7 +50,7 @@
      *
      * @param attributeType The associated AttributeType
      */
-    public AttributeTypeOptions( AttributeType attributeType )
+    public AttributeTypeOptions( MutableAttributeTypeImpl attributeType )
     {
         this.attributeType = attributeType;
     }
@@ -63,7 +63,7 @@
      * @param attributeType the associated AttributeType
      * @param options the associated options
      */
-    public AttributeTypeOptions( AttributeType attributeType, Set<String> options )
+    public AttributeTypeOptions( MutableAttributeTypeImpl attributeType, Set<String> options )
     {
         this.attributeType = attributeType;
         this.options = options;
@@ -73,7 +73,7 @@
     /**
      * @return the inner attributeType
      */
-    public AttributeType getAttributeType()
+    public MutableAttributeTypeImpl getAttributeType()
     {
         return attributeType;
     }
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/DITContentRule.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/DITContentRule.java
index e70a7b1..5a31991 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/DITContentRule.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/DITContentRule.java
@@ -129,19 +129,19 @@
     private List<String> mayAttributeTypeOids;
 
     /** The list of allowed AttributeTypes */
-    private List<AttributeType> mayAttributeTypes;
+    private List<MutableAttributeTypeImpl> mayAttributeTypes;
 
     /** The list of required AttributeType OIDs */
     private List<String> mustAttributeTypeOids;
 
     /** The list of required AttributeTypes */
-    private List<AttributeType> mustAttributeTypes;
+    private List<MutableAttributeTypeImpl> mustAttributeTypes;
 
     /** The list of precluded AttributeType OIDs */
     private List<String> notAttributeTypeOids;
 
     /** The list of precluded AttributeTypes */
-    private List<AttributeType> notAttributeTypes;
+    private List<MutableAttributeTypeImpl> notAttributeTypes;
 
 
     /**
@@ -158,9 +158,9 @@
         notAttributeTypeOids = new ArrayList<String>();
         auxObjectClassOids = new ArrayList<String>();
 
-        mayAttributeTypes = new ArrayList<AttributeType>();
-        mustAttributeTypes = new ArrayList<AttributeType>();
-        notAttributeTypes = new ArrayList<AttributeType>();
+        mayAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
+        mustAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
+        notAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
         auxObjectClasses = new ArrayList<ObjectClass>();
     }
 
@@ -297,7 +297,7 @@
      *
      * @param attributeType The attributeType
      */
-    public void addMayAttributeTypes( AttributeType attributeType )
+    public void addMayAttributeTypes( MutableAttributeTypeImpl attributeType )
     {
         if ( locked )
         {
@@ -334,7 +334,7 @@
      *
      * @param mayAttributeTypes the list of allowed AttributeTypes
      */
-    public void setMayAttributeTypes( List<AttributeType> mayAttributeTypes )
+    public void setMayAttributeTypes( List<MutableAttributeTypeImpl> mayAttributeTypes )
     {
         if ( locked )
         {
@@ -348,7 +348,7 @@
             // update the OIDS now
             mayAttributeTypeOids.clear();
 
-            for ( AttributeType may : mayAttributeTypes )
+            for ( MutableAttributeTypeImpl may : mayAttributeTypes )
             {
                 mayAttributeTypeOids.add( may.getOid() );
             }
@@ -359,7 +359,7 @@
     /**
      * @return the mayAttributeTypes
      */
-    public List<AttributeType> getMayAttributeTypes()
+    public List<MutableAttributeTypeImpl> getMayAttributeTypes()
     {
         return mayAttributeTypes;
     }
@@ -398,7 +398,7 @@
      *
      * @param attributeType The attributeType
      */
-    public void addMustAttributeTypes( AttributeType attributeType )
+    public void addMustAttributeTypes( MutableAttributeTypeImpl attributeType )
     {
         if ( locked )
         {
@@ -435,7 +435,7 @@
      *
      * @param mustAttributeTypes the list of required AttributeTypes
      */
-    public void setMustAttributeTypes( List<AttributeType> mustAttributeTypes )
+    public void setMustAttributeTypes( List<MutableAttributeTypeImpl> mustAttributeTypes )
     {
         if ( locked )
         {
@@ -449,7 +449,7 @@
             // update the OIDS now
             mustAttributeTypeOids.clear();
 
-            for ( AttributeType may : mustAttributeTypes )
+            for ( MutableAttributeTypeImpl may : mustAttributeTypes )
             {
                 mustAttributeTypeOids.add( may.getOid() );
             }
@@ -460,7 +460,7 @@
     /**
      * @return the mustAttributeTypes
      */
-    public List<AttributeType> getMustAttributeTypes()
+    public List<MutableAttributeTypeImpl> getMustAttributeTypes()
     {
         return mustAttributeTypes;
     }
@@ -499,7 +499,7 @@
      *
      * @param attributeType The attributeType
      */
-    public void addNotAttributeTypes( AttributeType attributeType )
+    public void addNotAttributeTypes( MutableAttributeTypeImpl attributeType )
     {
         if ( locked )
         {
@@ -536,7 +536,7 @@
      *
      * @param notAttributeTypes the list of precluded AttributeTypes
      */
-    public void setNotAttributeTypes( List<AttributeType> notAttributeTypes )
+    public void setNotAttributeTypes( List<MutableAttributeTypeImpl> notAttributeTypes )
     {
         if ( locked )
         {
@@ -550,7 +550,7 @@
             // update the OIDS now
             notAttributeTypeOids.clear();
 
-            for ( AttributeType not : notAttributeTypes )
+            for ( MutableAttributeTypeImpl not : notAttributeTypes )
             {
                 notAttributeTypeOids.add( not.getOid() );
             }
@@ -561,7 +561,7 @@
     /**
      * @return the notAttributeTypes
      */
-    public List<AttributeType> getNotAttributeTypes()
+    public List<MutableAttributeTypeImpl> getNotAttributeTypes()
     {
         return notAttributeTypes;
     }
@@ -583,7 +583,7 @@
 
             if ( mayAttributeTypeOids != null )
             {
-                mayAttributeTypes = new ArrayList<AttributeType>( mayAttributeTypeOids.size() );
+                mayAttributeTypes = new ArrayList<MutableAttributeTypeImpl>( mayAttributeTypeOids.size() );
 
                 for ( String oid : mayAttributeTypeOids )
                 {
@@ -593,7 +593,7 @@
 
             if ( mustAttributeTypeOids != null )
             {
-                mustAttributeTypes = new ArrayList<AttributeType>( mustAttributeTypeOids.size() );
+                mustAttributeTypes = new ArrayList<MutableAttributeTypeImpl>( mustAttributeTypeOids.size() );
 
                 for ( String oid : mustAttributeTypeOids )
                 {
@@ -603,7 +603,7 @@
 
             if ( notAttributeTypeOids != null )
             {
-                notAttributeTypes = new ArrayList<AttributeType>( notAttributeTypeOids.size() );
+                notAttributeTypes = new ArrayList<MutableAttributeTypeImpl>( notAttributeTypeOids.size() );
 
                 for ( String oid : notAttributeTypeOids )
                 {
@@ -672,7 +672,7 @@
         }
 
         // Clone the MAY AttributeTypes ( will be empty )
-        copy.mayAttributeTypes = new ArrayList<AttributeType>();
+        copy.mayAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
 
         // Clone the MUST AttributeTypes OIDs
         copy.mustAttributeTypeOids = new ArrayList<String>();
@@ -683,7 +683,7 @@
         }
 
         // Clone the MUST AttributeTypes ( will be empty )
-        copy.mustAttributeTypes = new ArrayList<AttributeType>();
+        copy.mustAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
 
         // Clone the NOT AttributeTypes OIDs
         copy.notAttributeTypeOids = new ArrayList<String>();
@@ -694,7 +694,7 @@
         }
 
         // Clone the NOT AttributeTypes ( will be empty )
-        copy.notAttributeTypes = new ArrayList<AttributeType>();
+        copy.notAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
 
         return copy;
     }
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/DescriptionUtils.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/DescriptionUtils.java
index 619de87..507aac7 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/DescriptionUtils.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/DescriptionUtils.java
@@ -84,7 +84,7 @@
      * @return the AttributeTypeDescription Syntax for the attributeType in a
      *         pretty formated string
      */
-    public static String getDescription( AttributeType attributeType )
+    public static String getDescription( MutableAttributeTypeImpl attributeType )
     {
         StringBuilder buf = new StringBuilder( "( " );
         buf.append( attributeType.getOid() );
@@ -263,7 +263,7 @@
             getQDStrings( buf, aux );
         }
 
-        List<AttributeType> must = dITContentRule.getMustAttributeTypes();
+        List<MutableAttributeTypeImpl> must = dITContentRule.getMustAttributeTypes();
 
         if ( ( must != null ) && ( must.size() > 0 ) )
         {
@@ -271,7 +271,7 @@
             getQDStrings( buf, must );
         }
 
-        List<AttributeType> may = dITContentRule.getMayAttributeTypes();
+        List<MutableAttributeTypeImpl> may = dITContentRule.getMayAttributeTypes();
 
         if ( ( may != null ) && ( may.size() > 0 ) )
         {
@@ -279,7 +279,7 @@
             getQDStrings( buf, may );
         }
 
-        List<AttributeType> not = dITContentRule.getNotAttributeTypes();
+        List<MutableAttributeTypeImpl> not = dITContentRule.getNotAttributeTypes();
 
         if ( ( not != null ) && ( not.size() > 0 ) )
         {
@@ -500,7 +500,7 @@
         }
 
         buf.append( " APPLIES " );
-        List<AttributeType> attributeTypes = matchingRuleUse.getApplicableAttributes();
+        List<MutableAttributeTypeImpl> attributeTypes = matchingRuleUse.getApplicableAttributes();
 
         if ( attributeTypes.size() == 1 )
         {
@@ -513,7 +513,7 @@
 
             boolean isFirst = true;
 
-            for ( AttributeType attributeType : attributeTypes )
+            for ( MutableAttributeTypeImpl attributeType : attributeTypes )
             {
                 if ( isFirst )
                 {
@@ -592,11 +592,11 @@
         buf.append( '\n' );
 
         buf.append( " MUST\n" );
-        List<AttributeType> must = nameForm.getMustAttributeTypes();
+        List<MutableAttributeTypeImpl> must = nameForm.getMustAttributeTypes();
 
         getQDStrings( buf, must );
 
-        List<AttributeType> may = nameForm.getMayAttributeTypes();
+        List<MutableAttributeTypeImpl> may = nameForm.getMayAttributeTypes();
 
         if ( ( may != null ) && ( may.size() > 0 ) )
         {
@@ -702,7 +702,7 @@
             buf.append( '\n' );
         }
 
-        List<AttributeType> must = objectClass.getMustAttributeTypes();
+        List<MutableAttributeTypeImpl> must = objectClass.getMustAttributeTypes();
 
         if ( ( must != null ) && ( must.size() > 0 ) )
         {
@@ -710,7 +710,7 @@
             getQDStrings( buf, must );
         }
 
-        List<AttributeType> may = objectClass.getMayAttributeTypes();
+        List<MutableAttributeTypeImpl> may = objectClass.getMayAttributeTypes();
 
         if ( ( may != null ) && ( may.size() > 0 ) )
         {
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/EntityFactory.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/EntityFactory.java
index 295a690..c71666e 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/EntityFactory.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/EntityFactory.java
@@ -49,7 +49,7 @@
      * @return An AttributeType SchemaObject
      * @throws LdapException If the AttributeType is invalid
      */
-    AttributeType getAttributeType( SchemaManager schemaManager, Entry entry, Registries targetRegistries, String schemaName ) throws LdapException;
+    MutableAttributeTypeImpl getAttributeType( SchemaManager schemaManager, Entry entry, Registries targetRegistries, String schemaName ) throws LdapException;
 
     
     /**
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/MatchingRuleUse.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/MatchingRuleUse.java
index 3427368..b74a976 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/MatchingRuleUse.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/MatchingRuleUse.java
@@ -92,7 +92,7 @@
     private List<String> applicableAttributeOids;
 
     /** The list of attributes types the matching rule applies to */
-    private List<AttributeType> applicableAttributes;
+    private List<MutableAttributeTypeImpl> applicableAttributes;
 
 
     /**
@@ -103,7 +103,7 @@
         super( SchemaObjectType.MATCHING_RULE_USE, oid );
 
         applicableAttributeOids = new ArrayList<String>();
-        applicableAttributes = new ArrayList<AttributeType>();
+        applicableAttributes = new ArrayList<MutableAttributeTypeImpl>();
     }
 
 
@@ -127,7 +127,7 @@
 
             if ( applicableAttributeOids != null )
             {
-                applicableAttributes = new ArrayList<AttributeType>( applicableAttributeOids.size() );
+                applicableAttributes = new ArrayList<MutableAttributeTypeImpl>( applicableAttributeOids.size() );
 
                 for ( String oid : applicableAttributeOids )
                 {
@@ -150,7 +150,7 @@
     /**
      * @return The matchingRule's list of AttributeType OIDs the MRU applies to
      */
-    public List<AttributeType> getApplicableAttributes()
+    public List<MutableAttributeTypeImpl> getApplicableAttributes()
     {
         return applicableAttributes;
     }
@@ -180,7 +180,7 @@
      *
      * @param applicableAttributes The AttributeType list
      */
-    public void setApplicableAttributes( List<AttributeType> applicableAttributes )
+    public void setApplicableAttributes( List<MutableAttributeTypeImpl> applicableAttributes )
     {
         if ( locked )
         {
@@ -194,7 +194,7 @@
             // update the OIDS now
             applicableAttributeOids.clear();
 
-            for ( AttributeType at : applicableAttributes )
+            for ( MutableAttributeTypeImpl at : applicableAttributes )
             {
                 applicableAttributeOids.add( at.getOid() );
             }
@@ -226,7 +226,7 @@
      *
      * @param attributeType A matchingRule's AttributeType the MRU applies to
      */
-    public void addApplicableAttribute( AttributeType attributeType )
+    public void addApplicableAttribute( MutableAttributeTypeImpl attributeType )
     {
         if ( locked )
         {
@@ -279,7 +279,7 @@
         }
 
         // Copy the APPLIES list (will be empty)
-        copy.applicableAttributes = new ArrayList<AttributeType>();
+        copy.applicableAttributes = new ArrayList<MutableAttributeTypeImpl>();
 
         return copy;
     }
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/AttributeType.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/MutableAttributeTypeImpl.java
similarity index 97%
rename from ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/AttributeType.java
rename to ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/MutableAttributeTypeImpl.java
index 95f88d8..2d94a18 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/AttributeType.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/MutableAttributeTypeImpl.java
@@ -136,15 +136,15 @@
  * @see <a
  *      href="http://www.ietf.org/internet-drafts/draft-ietf-ldapbis-models-11.txt">
  *      ldapbis [MODELS]</a>
- * @see DescriptionUtils#getDescription(AttributeType)
+ * @see DescriptionUtils#getDescription(MutableAttributeTypeImpl)
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class AttributeType extends AbstractMutableSchemaObject implements Cloneable
+public class MutableAttributeTypeImpl extends AbstractMutableSchemaObject implements Cloneable
 {
     private static final long serialVersionUID = 1L;
 
     /** A logger for this class */
-    private static final Logger LOG = LoggerFactory.getLogger( AttributeType.class );
+    private static final Logger LOG = LoggerFactory.getLogger( MutableAttributeTypeImpl.class );
 
     /** The syntax OID associated with this AttributeType */
     private String syntaxOid;
@@ -174,7 +174,7 @@
     private String superiorOid;
 
     /** The superior AttributeType */
-    private AttributeType superior;
+    private MutableAttributeTypeImpl superior;
 
     /** whether or not this type is single valued */
     private boolean isSingleValued = false;
@@ -197,7 +197,7 @@
      *
      * @param oid the OID for this AttributeType
      */
-    public AttributeType( String oid )
+    public MutableAttributeTypeImpl( String oid )
     {
         super( SchemaObjectType.ATTRIBUTE_TYPE, oid );
     }
@@ -208,7 +208,7 @@
      */
     private boolean buildSuperior( List<Throwable> errors, Registries registries )
     {
-        AttributeType currentSuperior = null;
+        MutableAttributeTypeImpl currentSuperior = null;
         AttributeTypeRegistry attributeTypeRegistry = registries.getAttributeTypeRegistry();
 
         if ( superiorOid != null )
@@ -274,7 +274,7 @@
                 // Check for cycles now
                 Set<String> superiors = new HashSet<String>();
                 superiors.add( oid );
-                AttributeType tmp = currentSuperior;
+                MutableAttributeTypeImpl tmp = currentSuperior;
                 boolean isOk = true;
 
                 while ( tmp != null )
@@ -973,7 +973,7 @@
      *
      * @return the superior AttributeType for this AttributeType
      */
-    public AttributeType getSuperior()
+    public MutableAttributeTypeImpl getSuperior()
     {
         return superior;
     }
@@ -1032,7 +1032,7 @@
      *
      * @param superior The superior for this AttributeType
      */
-    public void setSuperior( AttributeType superior )
+    public void setSuperior( MutableAttributeTypeImpl superior )
     {
         if ( locked )
         {
@@ -1071,7 +1071,7 @@
      *
      * @param newSuperior The superior for this AttributeType
      */
-    public void updateSuperior( AttributeType newSuperior )
+    public void updateSuperior( MutableAttributeTypeImpl newSuperior )
     {
         if ( locked )
         {
@@ -1474,7 +1474,7 @@
      * @param descendant the perspective descendant to check
      * @return true if the descendant is truly a derived from this AttributeType
      */
-    public boolean isAncestorOf( AttributeType descendant )
+    public boolean isAncestorOf( MutableAttributeTypeImpl descendant )
     {
         if ( ( descendant == null ) || this.equals( descendant ) )
         {
@@ -1492,7 +1492,7 @@
      * @param ancestor the perspective ancestor to check
      * @return true if this AttributeType truly descends from the ancestor
      */
-    public boolean isDescendantOf( AttributeType ancestor )
+    public boolean isDescendantOf( MutableAttributeTypeImpl ancestor )
     {
         if ( ( ancestor == null ) || equals( ancestor ) )
         {
@@ -1512,7 +1512,7 @@
      * @return true if the ancestor equals the descendant or if the descendant is really
      * a subtype of the ancestor. otherwise false
      */
-    private boolean isAncestorOrEqual( AttributeType ancestor, AttributeType descendant )
+    private boolean isAncestorOrEqual( MutableAttributeTypeImpl ancestor, MutableAttributeTypeImpl descendant )
     {
         if ( ( ancestor == null ) || ( descendant == null ) )
         {
@@ -1540,9 +1540,9 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType copy()
+    public MutableAttributeTypeImpl copy()
     {
-        AttributeType copy = new AttributeType( oid );
+        MutableAttributeTypeImpl copy = new MutableAttributeTypeImpl( oid );
 
         // Copy the SchemaObject common data
         copy.copy( this );
@@ -1589,7 +1589,7 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType copyMutable()
+    public MutableAttributeTypeImpl copyMutable()
     {
         return copy();
     }
@@ -1622,12 +1622,12 @@
             return false;
         }
 
-        if ( !( o instanceof AttributeType ) )
+        if ( !( o instanceof MutableAttributeTypeImpl ) )
         {
             return false;
         }
 
-        AttributeType that = ( AttributeType ) o;
+        MutableAttributeTypeImpl that = ( MutableAttributeTypeImpl ) o;
 
         // The COLLECTIVE
         if ( isCollective != that.isCollective )
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/NameForm.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/NameForm.java
index 0541adf..a6d9b23 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/NameForm.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/NameForm.java
@@ -108,13 +108,13 @@
     private List<String> mustAttributeTypeOids;
 
     /** The set of required AttributeTypes for this name form */
-    private List<AttributeType> mustAttributeTypes;
+    private List<MutableAttributeTypeImpl> mustAttributeTypes;
 
     /** The set of allowed attribute OIDs for this name form */
     private List<String> mayAttributeTypeOids;
 
     /** The set of allowed AttributeTypes for this name form */
-    private List<AttributeType> mayAttributeTypes;
+    private List<MutableAttributeTypeImpl> mayAttributeTypes;
 
 
     /**
@@ -129,8 +129,8 @@
         mustAttributeTypeOids = new ArrayList<String>();
         mayAttributeTypeOids = new ArrayList<String>();
 
-        mustAttributeTypes = new ArrayList<AttributeType>();
-        mayAttributeTypes = new ArrayList<AttributeType>();
+        mustAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
+        mayAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
     }
 
 
@@ -150,7 +150,7 @@
 
             if ( mayAttributeTypeOids != null )
             {
-                mayAttributeTypes = new ArrayList<AttributeType>( mayAttributeTypeOids.size() );
+                mayAttributeTypes = new ArrayList<MutableAttributeTypeImpl>( mayAttributeTypeOids.size() );
 
                 for ( String oid : mayAttributeTypeOids )
                 {
@@ -160,7 +160,7 @@
 
             if ( mustAttributeTypeOids != null )
             {
-                mustAttributeTypes = new ArrayList<AttributeType>( mustAttributeTypeOids.size() );
+                mustAttributeTypes = new ArrayList<MutableAttributeTypeImpl>( mustAttributeTypeOids.size() );
 
                 for ( String oid : mustAttributeTypeOids )
                 {
@@ -256,7 +256,7 @@
      * 
      * @return the AttributeTypes of the must use attributes
      */
-    public List<AttributeType> getMustAttributeTypes()
+    public List<MutableAttributeTypeImpl> getMustAttributeTypes()
     {
         return Collections.unmodifiableList( mustAttributeTypes );
     }
@@ -286,7 +286,7 @@
      *
      * @param mustAttributeTypes the list of required AttributeTypes
      */
-    public void setMustAttributeTypes( List<AttributeType> mustAttributeTypes )
+    public void setMustAttributeTypes( List<MutableAttributeTypeImpl> mustAttributeTypes )
     {
         if ( locked )
         {
@@ -300,7 +300,7 @@
             // update the OIDS now
             mustAttributeTypeOids.clear();
 
-            for ( AttributeType may : mustAttributeTypes )
+            for ( MutableAttributeTypeImpl may : mustAttributeTypes )
             {
                 mustAttributeTypeOids.add( may.getOid() );
             }
@@ -332,7 +332,7 @@
      *
      * @param attributeType The attributeType
      */
-    public void addMustAttributeTypes( AttributeType attributeType )
+    public void addMustAttributeTypes( MutableAttributeTypeImpl attributeType )
     {
         if ( locked )
         {
@@ -368,7 +368,7 @@
      * 
      * @return the AttributeTypes of the may use attributes
      */
-    public List<AttributeType> getMayAttributeTypes()
+    public List<MutableAttributeTypeImpl> getMayAttributeTypes()
     {
         return Collections.unmodifiableList( mayAttributeTypes );
     }
@@ -398,7 +398,7 @@
      *
      * @param mayAttributeTypes the list of allowed AttributeTypes
      */
-    public void setMayAttributeTypes( List<AttributeType> mayAttributeTypes )
+    public void setMayAttributeTypes( List<MutableAttributeTypeImpl> mayAttributeTypes )
     {
         if ( locked )
         {
@@ -412,7 +412,7 @@
             // update the OIDS now
             mayAttributeTypeOids.clear();
 
-            for ( AttributeType may : mayAttributeTypes )
+            for ( MutableAttributeTypeImpl may : mayAttributeTypes )
             {
                 mayAttributeTypeOids.add( may.getOid() );
             }
@@ -444,7 +444,7 @@
      *
      * @param attributeType The attributeType
      */
-    public void addMayAttributeTypes( AttributeType attributeType )
+    public void addMayAttributeTypes( MutableAttributeTypeImpl attributeType )
     {
         if ( locked )
         {
@@ -496,7 +496,7 @@
         }
 
         // Copy the MAY AttributeTypes (will be empty)
-        copy.mayAttributeTypes = new ArrayList<AttributeType>();
+        copy.mayAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
 
         // Copy the MUST AttributeTypes OIDs
         copy.mustAttributeTypeOids = new ArrayList<String>();
@@ -507,7 +507,7 @@
         }
 
         // Copy the MUST AttributeTypes ( will be empty )
-        copy.mustAttributeTypes = new ArrayList<AttributeType>();
+        copy.mustAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
 
         // Copy the Structural ObjectClass OID
         copy.structuralObjectClassOid = structuralObjectClassOid;
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/ObjectClass.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/ObjectClass.java
index 403ece8..f472e69 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/ObjectClass.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/ObjectClass.java
@@ -92,13 +92,13 @@
     private List<String> mayAttributeTypeOids;
 
     /** The list of allowed AttributeTypes */
-    private List<AttributeType> mayAttributeTypes;
+    private List<MutableAttributeTypeImpl> mayAttributeTypes;
 
     /** The list of required AttributeType OIDs */
     private List<String> mustAttributeTypeOids;
 
     /** The list of required AttributeTypes */
-    private List<AttributeType> mustAttributeTypes;
+    private List<MutableAttributeTypeImpl> mustAttributeTypes;
 
 
     /**
@@ -113,8 +113,8 @@
         mustAttributeTypeOids = new ArrayList<String>();
         superiorOids = new ArrayList<String>();
 
-        mayAttributeTypes = new ArrayList<AttributeType>();
-        mustAttributeTypes = new ArrayList<AttributeType>();
+        mayAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
+        mustAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
         superiors = new ArrayList<ObjectClass>();
         objectClassType = ObjectClassTypeEnum.STRUCTURAL;
     }
@@ -208,13 +208,13 @@
 
         if ( mayAttributeTypeOids != null )
         {
-            mayAttributeTypes = new ArrayList<AttributeType>( mayAttributeTypeOids.size() );
+            mayAttributeTypes = new ArrayList<MutableAttributeTypeImpl>( mayAttributeTypeOids.size() );
 
             for ( String mayAttributeTypeName : mayAttributeTypeOids )
             {
                 try
                 {
-                    AttributeType attributeType = atRegistry.lookup( mayAttributeTypeName );
+                    MutableAttributeTypeImpl attributeType = atRegistry.lookup( mayAttributeTypeName );
 
                     if ( attributeType.isCollective() )
                     {
@@ -267,13 +267,13 @@
 
         if ( mustAttributeTypeOids != null )
         {
-            mustAttributeTypes = new ArrayList<AttributeType>( mustAttributeTypeOids.size() );
+            mustAttributeTypes = new ArrayList<MutableAttributeTypeImpl>( mustAttributeTypeOids.size() );
 
             for ( String mustAttributeTypeName : mustAttributeTypeOids )
             {
                 try
                 {
-                    AttributeType attributeType = atRegistry.lookup( mustAttributeTypeName );
+                    MutableAttributeTypeImpl attributeType = atRegistry.lookup( mustAttributeTypeName );
 
                     if ( attributeType.isCollective() )
                     {
@@ -363,12 +363,12 @@
              * OC -> AT (MAY and MUST)
              * OC -> OC (SUPERIORS)
              */
-            for ( AttributeType mayAttributeType : mayAttributeTypes )
+            for ( MutableAttributeTypeImpl mayAttributeType : mayAttributeTypes )
             {
                 registries.addReference( this, mayAttributeType );
             }
 
-            for ( AttributeType mustAttributeType : mustAttributeTypes )
+            for ( MutableAttributeTypeImpl mustAttributeType : mustAttributeTypes )
             {
                 registries.addReference( this, mustAttributeType );
             }
@@ -408,7 +408,7 @@
              */
             if ( mayAttributeTypes != null )
             {
-                for ( AttributeType may : mayAttributeTypes )
+                for ( MutableAttributeTypeImpl may : mayAttributeTypes )
                 {
                     registries.delReference( this, may );
                 }
@@ -416,7 +416,7 @@
 
             if ( mustAttributeTypes != null )
             {
-                for ( AttributeType must : mustAttributeTypes )
+                for ( MutableAttributeTypeImpl must : mustAttributeTypes )
                 {
                     registries.delReference( this, must );
                 }
@@ -445,7 +445,7 @@
     /**
      * @return the mayAttributeTypes
      */
-    public List<AttributeType> getMayAttributeTypes()
+    public List<MutableAttributeTypeImpl> getMayAttributeTypes()
     {
         return mayAttributeTypes;
     }
@@ -478,7 +478,7 @@
      *
      * @param attributeTypes The attributeTypes
      */
-    public void addMayAttributeTypes( AttributeType... attributeTypes )
+    public void addMayAttributeTypes( MutableAttributeTypeImpl... attributeTypes )
     {
         if ( locked )
         {
@@ -487,7 +487,7 @@
 
         if ( !isReadOnly )
         {
-            for ( AttributeType attributeType : attributeTypes )
+            for ( MutableAttributeTypeImpl attributeType : attributeTypes )
             {
                 if ( !mayAttributeTypeOids.contains( attributeType.getOid() ) )
                 {
@@ -521,7 +521,7 @@
      *
      * @param mayAttributeTypes the list of allowed AttributeTypes
      */
-    public void setMayAttributeTypes( List<AttributeType> mayAttributeTypes )
+    public void setMayAttributeTypes( List<MutableAttributeTypeImpl> mayAttributeTypes )
     {
         if ( locked )
         {
@@ -535,7 +535,7 @@
             // update the OIDS now
             mayAttributeTypeOids.clear();
 
-            for ( AttributeType may : mayAttributeTypes )
+            for ( MutableAttributeTypeImpl may : mayAttributeTypes )
             {
                 mayAttributeTypeOids.add( may.getOid() );
             }
@@ -548,7 +548,7 @@
      *
      * @param mayAttributeTypes the list of allowed AttributeTypes
      */
-    public void updateMayAttributeTypes( List<AttributeType> mayAttributeTypes )
+    public void updateMayAttributeTypes( List<MutableAttributeTypeImpl> mayAttributeTypes )
     {
         this.mayAttributeTypes.clear();
         this.mayAttributeTypes.addAll( mayAttributeTypes );
@@ -556,7 +556,7 @@
         // update the OIDS now
         mayAttributeTypeOids.clear();
 
-        for ( AttributeType may : mayAttributeTypes )
+        for ( MutableAttributeTypeImpl may : mayAttributeTypes )
         {
             mayAttributeTypeOids.add( may.getOid() );
         }
@@ -575,7 +575,7 @@
     /**
      * @return the mustAttributeTypes
      */
-    public List<AttributeType> getMustAttributeTypes()
+    public List<MutableAttributeTypeImpl> getMustAttributeTypes()
     {
         return mustAttributeTypes;
     }
@@ -608,7 +608,7 @@
      *
      * @param attributeTypes The attributeTypse
      */
-    public void addMustAttributeTypes( AttributeType... attributeTypes )
+    public void addMustAttributeTypes( MutableAttributeTypeImpl... attributeTypes )
     {
         if ( locked )
         {
@@ -617,7 +617,7 @@
 
         if ( !isReadOnly )
         {
-            for ( AttributeType attributeType : attributeTypes )
+            for ( MutableAttributeTypeImpl attributeType : attributeTypes )
             {
                 if ( !mustAttributeTypeOids.contains( attributeType.getOid() ) )
                 {
@@ -651,7 +651,7 @@
      *
      * @param mustAttributeTypes the list of required AttributeTypes
      */
-    public void setMustAttributeTypes( List<AttributeType> mustAttributeTypes )
+    public void setMustAttributeTypes( List<MutableAttributeTypeImpl> mustAttributeTypes )
     {
         if ( locked )
         {
@@ -665,7 +665,7 @@
             // update the OIDS now
             mustAttributeTypeOids.clear();
 
-            for ( AttributeType may : mustAttributeTypes )
+            for ( MutableAttributeTypeImpl may : mustAttributeTypes )
             {
                 mustAttributeTypeOids.add( may.getOid() );
             }
@@ -678,7 +678,7 @@
      *
      * @param mustAttributeTypes the list of allowed AttributeTypes
      */
-    public void updateMustAttributeTypes( List<AttributeType> mustAttributeTypes )
+    public void updateMustAttributeTypes( List<MutableAttributeTypeImpl> mustAttributeTypes )
     {
         this.mustAttributeTypes.clear();
         this.mustAttributeTypes.addAll( mustAttributeTypes );
@@ -686,7 +686,7 @@
         // update the OIDS now
         mustAttributeTypeOids.clear();
 
-        for ( AttributeType must : mustAttributeTypes )
+        for ( MutableAttributeTypeImpl must : mustAttributeTypes )
         {
             mustAttributeTypeOids.add( must.getOid() );
         }
@@ -947,7 +947,7 @@
         }
 
         // Copy the MAY AttributeTypes ( will be empty )
-        copy.mayAttributeTypes = new ArrayList<AttributeType>();
+        copy.mayAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
 
         // Copy the MUST AttributeTypes OIDs
         copy.mustAttributeTypeOids = new ArrayList<String>();
@@ -958,7 +958,7 @@
         }
 
         // Copy the MUST AttributeTypes ( will be empty )
-        copy.mustAttributeTypes = new ArrayList<AttributeType>();
+        copy.mustAttributeTypes = new ArrayList<MutableAttributeTypeImpl>();
 
         return copy;
     }
@@ -1067,7 +1067,7 @@
         }
 
         // One way
-        for ( AttributeType oid : mayAttributeTypes )
+        for ( MutableAttributeTypeImpl oid : mayAttributeTypes )
         {
             if ( !that.mayAttributeTypes.contains( oid ) )
             {
@@ -1076,7 +1076,7 @@
         }
 
         // The other way
-        for ( AttributeType oid : that.mayAttributeTypes )
+        for ( MutableAttributeTypeImpl oid : that.mayAttributeTypes )
         {
             if ( !mayAttributeTypes.contains( oid ) )
             {
@@ -1115,7 +1115,7 @@
         }
 
         // One way
-        for ( AttributeType oid : mustAttributeTypes )
+        for ( MutableAttributeTypeImpl oid : mustAttributeTypes )
         {
             if ( !that.mustAttributeTypes.contains( oid ) )
             {
@@ -1124,7 +1124,7 @@
         }
 
         // The other way
-        for ( AttributeType oid : that.mustAttributeTypes )
+        for ( MutableAttributeTypeImpl oid : that.mustAttributeTypes )
         {
             if ( !mustAttributeTypes.contains( oid ) )
             {
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/SchemaManager.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/SchemaManager.java
index b9a9742..9fc031a 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/SchemaManager.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/SchemaManager.java
@@ -439,7 +439,7 @@
      * @return The found AttributeType 
      * @throws LdapException if the OID is not found in the AttributeType registry
      */
-    AttributeType lookupAttributeTypeRegistry( String oid ) throws LdapException;
+    MutableAttributeTypeImpl lookupAttributeTypeRegistry( String oid ) throws LdapException;
 
 
     /**
@@ -450,7 +450,7 @@
      * @param oid the OID we are looking for
      * @return The found AttributeType, or null if not found
      */
-    AttributeType getAttributeType( String oid );
+    MutableAttributeTypeImpl getAttributeType( String oid );
 
 
     /**
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/SchemaUtils.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/SchemaUtils.java
index 3b0b030..eb34309 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/SchemaUtils.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/SchemaUtils.java
@@ -354,7 +354,7 @@
      *            the attributeTypes to list
      * @return a buffer which contains the rendered list
      */
-    public static StringBuffer render( AttributeType[] ats )
+    public static StringBuffer render( MutableAttributeTypeImpl[] ats )
     {
         StringBuffer buf = new StringBuffer();
         return render( buf, ats );
@@ -371,7 +371,7 @@
      *            the attributeTypes to list
      * @return a buffer which contains the rendered list
      */
-    public static StringBuffer render( StringBuffer buf, AttributeType[] ats )
+    public static StringBuffer render( StringBuffer buf, MutableAttributeTypeImpl[] ats )
     {
         if ( ats == null || ats.length == 0 )
         {
@@ -573,7 +573,7 @@
      * @throws LdapException if there are problems accessing the objects
      * associated with the attribute type.
      */
-    public static StringBuffer render( AttributeType at ) throws LdapException
+    public static StringBuffer render( MutableAttributeTypeImpl at ) throws LdapException
     {
         StringBuffer buf = new StringBuffer();
         buf.append( "( " ).append( at.getOid() );
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/normalizers/ConcreteNameComponentNormalizer.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/normalizers/ConcreteNameComponentNormalizer.java
index 16f7f5f..4714eac 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/normalizers/ConcreteNameComponentNormalizer.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/normalizers/ConcreteNameComponentNormalizer.java
@@ -26,7 +26,7 @@
 import org.apache.directory.shared.ldap.model.entry.BinaryValue;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.name.NameComponentNormalizer;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.MatchingRule;
 import org.apache.directory.shared.ldap.model.schema.Normalizer;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
@@ -109,7 +109,7 @@
      */
     public Object normalizeByName( String name, String value ) throws LdapException
     {
-        AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( name );
+        MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( name );
         
         if ( attributeType.getSyntax().isHumanReadable() )
         {
@@ -140,7 +140,7 @@
      */
     public Object normalizeByName( String name, byte[] value ) throws LdapException
     {
-        AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( name );
+        MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( name );
         
         if ( !attributeType.getSyntax().isHumanReadable() )
         {
@@ -194,7 +194,7 @@
      */
     private Normalizer lookup( String id ) throws LdapException
     {
-        AttributeType type = schemaManager.lookupAttributeTypeRegistry( id );
+        MutableAttributeTypeImpl type = schemaManager.lookupAttributeTypeRegistry( id );
         MatchingRule mrule = type.getEquality();
         
         if ( mrule == null )
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/AttributeTypeDescriptionSchemaParser.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/AttributeTypeDescriptionSchemaParser.java
index 6f3c6a3..0f5815a 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/AttributeTypeDescriptionSchemaParser.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/AttributeTypeDescriptionSchemaParser.java
@@ -23,7 +23,7 @@
 import java.text.ParseException;
 
 import org.apache.directory.shared.i18n.I18n;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -83,7 +83,7 @@
      * @return the parsed AttributeTypeDescription bean
      * @throws ParseException if there are any recognition errors (bad syntax)
      */
-    public synchronized AttributeType parseAttributeTypeDescription( String attributeTypeDescription )
+    public synchronized MutableAttributeTypeImpl parseAttributeTypeDescription( String attributeTypeDescription )
         throws ParseException
     {
 
@@ -99,7 +99,7 @@
 
         try
         {
-            AttributeType attributeType = parser.attributeTypeDescription();
+            MutableAttributeTypeImpl attributeType = parser.attributeTypeDescription();
             
             // Update the schemaName
             updateSchemaName( attributeType );
@@ -135,7 +135,7 @@
      * @return An instance of AttributeType
      * @throws ParseException {@inheritDoc}
      */
-    public AttributeType parse( String schemaDescription ) throws ParseException
+    public MutableAttributeTypeImpl parse( String schemaDescription ) throws ParseException
     {
         return parseAttributeTypeDescription( schemaDescription );
     }
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/OpenLdapSchemaParser.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/OpenLdapSchemaParser.java
index 926ddfb..f14a3eb 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/OpenLdapSchemaParser.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/OpenLdapSchemaParser.java
@@ -33,7 +33,7 @@
 
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.directory.shared.i18n.I18n;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.ObjectClass;
 import org.apache.directory.shared.ldap.model.schema.SchemaObject;
 import org.apache.directory.shared.ldap.model.schema.syntaxCheckers.OpenLdapObjectIdentifierMacro;
@@ -54,7 +54,7 @@
     private List<Object> schemaDescriptions;
 
     /** The list of attribute type, initialized by splitParsedSchemaDescriptions() */
-    private List<AttributeType> attributeTypes;
+    private List<MutableAttributeTypeImpl> attributeTypes;
 
     /** The list of object classes, initialized by splitParsedSchemaDescriptions()*/
     private List<ObjectClass> objectClasses;
@@ -91,7 +91,7 @@
      * 
      * @return the attribute types
      */
-    public List<AttributeType> getAttributeTypes()
+    public List<MutableAttributeTypeImpl> getAttributeTypes()
     {
         return attributeTypes;
     }
@@ -128,7 +128,7 @@
     private void afterParse() throws ParseException
     {
         objectClasses = new ArrayList<ObjectClass>();
-        attributeTypes = new ArrayList<AttributeType>();
+        attributeTypes = new ArrayList<MutableAttributeTypeImpl>();
         objectIdentifierMacros = new HashMap<String, OpenLdapObjectIdentifierMacro>();
 
         // split parsed schema descriptions
@@ -139,9 +139,9 @@
                 OpenLdapObjectIdentifierMacro oid = (OpenLdapObjectIdentifierMacro) obj;
                 objectIdentifierMacros.put( oid.getName(), oid );
             }
-            else if ( obj instanceof AttributeType )
+            else if ( obj instanceof MutableAttributeTypeImpl )
             {
-                AttributeType attributeType = ( AttributeType ) obj;
+                MutableAttributeTypeImpl attributeType = ( MutableAttributeTypeImpl ) obj;
 
                 attributeTypes.add( attributeType );
             }
@@ -168,7 +168,7 @@
             }
 
             // apply object identifier macros to attribute types
-            for ( AttributeType attributeType : attributeTypes )
+            for ( MutableAttributeTypeImpl attributeType : attributeTypes )
             {
                 attributeType.setOid( getResolveOid( attributeType.getOid() ) );
                 attributeType.setSyntaxOid( getResolveOid( attributeType.getSyntaxOid() ) );
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/ParserDescriptionUtils.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/ParserDescriptionUtils.java
index 6c45045..94d3d3d 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/ParserDescriptionUtils.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/parsers/ParserDescriptionUtils.java
@@ -22,7 +22,7 @@
 
 import java.util.List;
 
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.LdapSyntax;
 import org.apache.directory.shared.ldap.model.schema.MutableLdapSyntaxImpl;
 import org.apache.directory.shared.ldap.model.schema.MutableMatchingRuleImpl;
@@ -111,7 +111,7 @@
      * @param at1 the second attributeType to compare
      * @return true if both attributeTypes match exactly, false otherwise
      */
-    public static boolean attributeTypesMatch( AttributeType at0, AttributeType at1 )
+    public static boolean attributeTypesMatch( MutableAttributeTypeImpl at0, MutableAttributeTypeImpl at1 )
     {
         // compare all common description parameters
         if ( ! descriptionsMatch( at0, at1 ) )
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/AttributeTypeRegistry.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/AttributeTypeRegistry.java
index b4cda02..77cb249 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/AttributeTypeRegistry.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/AttributeTypeRegistry.java
@@ -24,7 +24,7 @@
 import java.util.Map;
 
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.normalizers.OidNormalizer;
 
 
@@ -33,7 +33,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public interface AttributeTypeRegistry extends SchemaObjectRegistry<AttributeType>, Iterable<AttributeType>
+public interface AttributeTypeRegistry extends SchemaObjectRegistry<MutableAttributeTypeImpl>, Iterable<MutableAttributeTypeImpl>
 {
     /**
      * Gets an oid/name to normalizer mapping used to normalize distinguished 
@@ -65,7 +65,7 @@
      * @throws LdapException if the ancestor attributeType cannot be 
      * discerned from the ancestorId supplied
      */
-    boolean hasDescendants( AttributeType ancestor ) throws LdapException;
+    boolean hasDescendants( MutableAttributeTypeImpl ancestor ) throws LdapException;
 
 
     /**
@@ -78,7 +78,7 @@
      * @throws LdapException if the ancestor attributeType cannot be 
      * discerned from the ancestorId supplied
      */
-    Iterator<AttributeType> descendants( String ancestorId ) throws LdapException;
+    Iterator<MutableAttributeTypeImpl> descendants( String ancestorId ) throws LdapException;
 
 
     /**
@@ -91,7 +91,7 @@
      * @throws LdapException if the ancestor attributeType cannot be 
      * discerned from the ancestorId supplied
      */
-    Iterator<AttributeType> descendants( AttributeType ancestor ) throws LdapException;
+    Iterator<MutableAttributeTypeImpl> descendants( MutableAttributeTypeImpl ancestor ) throws LdapException;
 
 
     /**
@@ -101,7 +101,7 @@
      * @param attributeType The attributeType to register
      * @throws org.apache.directory.shared.ldap.model.exception.LdapException If something went wrong
      */
-    void registerDescendants( AttributeType attributeType, AttributeType ancestor ) throws LdapException;
+    void registerDescendants( MutableAttributeTypeImpl attributeType, MutableAttributeTypeImpl ancestor ) throws LdapException;
 
 
     /**
@@ -112,19 +112,19 @@
      * @param ancestor its ancestor 
      * @throws LdapException If something went wrong
      */
-    void unregisterDescendants( AttributeType attributeType, AttributeType ancestor ) throws LdapException;
+    void unregisterDescendants( MutableAttributeTypeImpl attributeType, MutableAttributeTypeImpl ancestor ) throws LdapException;
 
 
     /**
      * Add a new Oid/Normalizer couple in the OidNormalizer map
      */
-    void addMappingFor( AttributeType attributeType ) throws LdapException;
+    void addMappingFor( MutableAttributeTypeImpl attributeType ) throws LdapException;
 
 
     /**
      * Remove a new Oid/Normalizer couple in the OidNormalizer map
      */
-    void removeMappingFor( AttributeType attributeType ) throws LdapException;
+    void removeMappingFor( MutableAttributeTypeImpl attributeType ) throws LdapException;
 
 
     /**
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/DefaultAttributeTypeRegistry.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/DefaultAttributeTypeRegistry.java
index 969c0f9..806bde0 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/DefaultAttributeTypeRegistry.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/DefaultAttributeTypeRegistry.java
@@ -29,7 +29,7 @@
 
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.exception.LdapNoSuchAttributeException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.MatchingRule;
 import org.apache.directory.shared.ldap.model.schema.SchemaObjectType;
 import org.apache.directory.shared.ldap.model.schema.normalizers.NoOpNormalizer;
@@ -43,7 +43,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class DefaultAttributeTypeRegistry extends DefaultSchemaObjectRegistry<AttributeType> implements
+public class DefaultAttributeTypeRegistry extends DefaultSchemaObjectRegistry<MutableAttributeTypeImpl> implements
     AttributeTypeRegistry
 {
     /** static class logger */
@@ -53,7 +53,7 @@
     private Map<String, OidNormalizer> oidNormalizerMap;
 
     /** maps OIDs to a Set of descendants for that OID */
-    private Map<String, Set<AttributeType>> oidToDescendantSet;
+    private Map<String, Set<MutableAttributeTypeImpl>> oidToDescendantSet;
 
 
     /**
@@ -61,9 +61,9 @@
      */
     public DefaultAttributeTypeRegistry()
     {
-        super( SchemaObjectType.ATTRIBUTE_TYPE, new OidRegistry<AttributeType>() );
+        super( SchemaObjectType.ATTRIBUTE_TYPE, new OidRegistry<MutableAttributeTypeImpl>() );
         oidNormalizerMap = new HashMap<String, OidNormalizer>();
-        oidToDescendantSet = new HashMap<String, Set<AttributeType>>();
+        oidToDescendantSet = new HashMap<String, Set<MutableAttributeTypeImpl>>();
     }
 
 
@@ -84,7 +84,7 @@
         try
         {
             String oid = getOidByName( ancestorId );
-            Set<AttributeType> descendants = oidToDescendantSet.get( oid );
+            Set<MutableAttributeTypeImpl> descendants = oidToDescendantSet.get( oid );
             return ( descendants != null ) && !descendants.isEmpty();
         }
         catch ( LdapException ne )
@@ -97,10 +97,10 @@
     /**
      * {@inheritDoc}
      */
-    public boolean hasDescendants( AttributeType ancestor ) throws LdapException
+    public boolean hasDescendants( MutableAttributeTypeImpl ancestor ) throws LdapException
     {
         String oid = ancestor.getOid();
-        Set<AttributeType> descendants = oidToDescendantSet.get( oid );
+        Set<MutableAttributeTypeImpl> descendants = oidToDescendantSet.get( oid );
         return ( descendants != null ) && !descendants.isEmpty();
     }
 
@@ -109,12 +109,12 @@
      * {@inheritDoc}
      */
     @SuppressWarnings("unchecked")
-    public Iterator<AttributeType> descendants( String ancestorId ) throws LdapException
+    public Iterator<MutableAttributeTypeImpl> descendants( String ancestorId ) throws LdapException
     {
         try
         {
             String oid = getOidByName( ancestorId );
-            Set<AttributeType> descendants = oidToDescendantSet.get( oid );
+            Set<MutableAttributeTypeImpl> descendants = oidToDescendantSet.get( oid );
 
             if ( descendants == null )
             {
@@ -134,10 +134,10 @@
      * {@inheritDoc}
      */
     @SuppressWarnings("unchecked")
-    public Iterator<AttributeType> descendants( AttributeType ancestor ) throws LdapException
+    public Iterator<MutableAttributeTypeImpl> descendants( MutableAttributeTypeImpl ancestor ) throws LdapException
     {
         String oid = ancestor.getOid();
-        Set<AttributeType> descendants = oidToDescendantSet.get( oid );
+        Set<MutableAttributeTypeImpl> descendants = oidToDescendantSet.get( oid );
 
         if ( descendants == null )
         {
@@ -151,7 +151,7 @@
     /**
      * {@inheritDoc}
      */
-    public void registerDescendants( AttributeType attributeType, AttributeType ancestor ) throws LdapException
+    public void registerDescendants( MutableAttributeTypeImpl attributeType, MutableAttributeTypeImpl ancestor ) throws LdapException
     {
         // add this attribute to descendant list of other attributes in superior chain
         if ( ancestor == null )
@@ -160,12 +160,12 @@
         }
 
         // Get the ancestor's descendant, if any
-        Set<AttributeType> descendants = oidToDescendantSet.get( ancestor.getOid() );
+        Set<MutableAttributeTypeImpl> descendants = oidToDescendantSet.get( ancestor.getOid() );
 
         // Initialize the descendant Set to store the descendants for the attributeType
         if ( descendants == null )
         {
-            descendants = new HashSet<AttributeType>( 1 );
+            descendants = new HashSet<MutableAttributeTypeImpl>( 1 );
             oidToDescendantSet.put( ancestor.getOid(), descendants );
         }
 
@@ -189,7 +189,7 @@
     /**
      * {@inheritDoc}
      */
-    public void unregisterDescendants( AttributeType attributeType, AttributeType ancestor ) throws LdapException
+    public void unregisterDescendants( MutableAttributeTypeImpl attributeType, MutableAttributeTypeImpl ancestor ) throws LdapException
     {
         // add this attribute to descendant list of other attributes in superior chain
         if ( ancestor == null )
@@ -198,7 +198,7 @@
         }
 
         // Get the ancestor's descendant, if any
-        Set<AttributeType> descendants = oidToDescendantSet.get( ancestor.getOid() );
+        Set<MutableAttributeTypeImpl> descendants = oidToDescendantSet.get( ancestor.getOid() );
 
         if ( descendants != null )
         {
@@ -227,11 +227,11 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType unregister( String numericOid ) throws LdapException
+    public MutableAttributeTypeImpl unregister( String numericOid ) throws LdapException
     {
         try
         {
-            AttributeType removed = super.unregister( numericOid );
+            MutableAttributeTypeImpl removed = super.unregister( numericOid );
 
             removeMappingFor( removed );
 
@@ -255,7 +255,7 @@
     /**
      * {@inheritDoc}
      */
-    public void addMappingFor( AttributeType attributeType ) throws LdapException
+    public void addMappingFor( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         MatchingRule equality = attributeType.getEquality();
         OidNormalizer oidNormalizer;
@@ -285,7 +285,7 @@
     /**
      * Remove the AttributeType normalizer from the OidNormalizer map 
      */
-    public void removeMappingFor( AttributeType attributeType ) throws LdapException
+    public void removeMappingFor( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         if ( attributeType == null )
         {
@@ -305,7 +305,7 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType lookup( String oid ) throws LdapException
+    public MutableAttributeTypeImpl lookup( String oid ) throws LdapException
     {
         try
         {
@@ -346,7 +346,7 @@
         // and clear the descendant
         for ( String oid : oidToDescendantSet.keySet() )
         {
-            Set<AttributeType> descendants = oidToDescendantSet.get( oid );
+            Set<MutableAttributeTypeImpl> descendants = oidToDescendantSet.get( oid );
 
             if ( descendants != null )
             {
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/ImmutableAttributeTypeRegistry.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/ImmutableAttributeTypeRegistry.java
index cfc35cf..27cea53 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/ImmutableAttributeTypeRegistry.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/ImmutableAttributeTypeRegistry.java
@@ -28,7 +28,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapNoSuchAttributeException;
 import org.apache.directory.shared.ldap.model.exception.LdapUnwillingToPerformException;
 import org.apache.directory.shared.ldap.model.message.ResultCodeEnum;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaObjectType;
 import org.apache.directory.shared.ldap.model.schema.normalizers.OidNormalizer;
 
@@ -76,7 +76,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean hasDescendants( AttributeType ancestor ) throws LdapException
+    public boolean hasDescendants( MutableAttributeTypeImpl ancestor ) throws LdapException
     {
         return immutableAttributeTypeRegistry.hasDescendants( ancestor );
     }
@@ -85,7 +85,7 @@
     /**
      * {@inheritDoc}
      */
-    public Iterator<AttributeType> descendants( String ancestorId ) throws LdapException
+    public Iterator<MutableAttributeTypeImpl> descendants( String ancestorId ) throws LdapException
     {
         return immutableAttributeTypeRegistry.descendants( ancestorId );
     }
@@ -94,7 +94,7 @@
     /**
      * {@inheritDoc}
      */
-    public Iterator<AttributeType> descendants( AttributeType ancestor ) throws LdapException
+    public Iterator<MutableAttributeTypeImpl> descendants( MutableAttributeTypeImpl ancestor ) throws LdapException
     {
         return immutableAttributeTypeRegistry.descendants( ancestor );
     }
@@ -103,7 +103,7 @@
     /**
      * {@inheritDoc}
      */
-    public void register( AttributeType attributeType ) throws LdapException
+    public void register( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         throw new LdapUnwillingToPerformException( ResultCodeEnum.NO_SUCH_OPERATION, I18n.err( I18n.ERR_04275 ) );
     }
@@ -112,7 +112,7 @@
     /**
      * {@inheritDoc}
      */
-    public void registerDescendants( AttributeType attributeType, AttributeType ancestor ) throws LdapException
+    public void registerDescendants( MutableAttributeTypeImpl attributeType, MutableAttributeTypeImpl ancestor ) throws LdapException
     {
         throw new LdapUnwillingToPerformException( ResultCodeEnum.NO_SUCH_OPERATION, I18n.err( I18n.ERR_04275 ) );
     }
@@ -121,7 +121,7 @@
     /**
      * {@inheritDoc}
      */
-    public void unregisterDescendants( AttributeType attributeType, AttributeType ancestor ) throws LdapException
+    public void unregisterDescendants( MutableAttributeTypeImpl attributeType, MutableAttributeTypeImpl ancestor ) throws LdapException
     {
         throw new LdapUnwillingToPerformException( ResultCodeEnum.NO_SUCH_OPERATION, I18n.err( I18n.ERR_04275 ) );
     }
@@ -130,7 +130,7 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType unregister( String numericOid ) throws LdapException
+    public MutableAttributeTypeImpl unregister( String numericOid ) throws LdapException
     {
         throw new LdapUnwillingToPerformException( ResultCodeEnum.NO_SUCH_OPERATION,
             "Cannot modify the AttributeTypeRegistry copy" );
@@ -140,7 +140,7 @@
     /**
      * {@inheritDoc}
      */
-    public void addMappingFor( AttributeType attributeType ) throws LdapException
+    public void addMappingFor( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         throw new LdapUnwillingToPerformException( ResultCodeEnum.NO_SUCH_OPERATION, I18n.err( I18n.ERR_04275 ) );
     }
@@ -149,7 +149,7 @@
     /**
      * {@inheritDoc}
      */
-    public void removeMappingFor( AttributeType attributeType ) throws LdapException
+    public void removeMappingFor( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         throw new LdapUnwillingToPerformException( ResultCodeEnum.NO_SUCH_OPERATION, I18n.err( I18n.ERR_04275 ) );
     }
@@ -158,7 +158,7 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType lookup( String oid ) throws LdapException
+    public MutableAttributeTypeImpl lookup( String oid ) throws LdapException
     {
         return immutableAttributeTypeRegistry.lookup( oid );
     }
@@ -194,7 +194,7 @@
     /**
      * {@inheritDoc}
      */
-    public Iterator<AttributeType> iterator()
+    public Iterator<MutableAttributeTypeImpl> iterator()
     {
         return immutableAttributeTypeRegistry.iterator();
     }
@@ -273,7 +273,7 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType get( String oid )
+    public MutableAttributeTypeImpl get( String oid )
     {
         return immutableAttributeTypeRegistry.get( oid );
     }
@@ -291,7 +291,7 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType unregister( AttributeType schemaObject ) throws LdapException
+    public MutableAttributeTypeImpl unregister( MutableAttributeTypeImpl schemaObject ) throws LdapException
     {
         throw new LdapUnwillingToPerformException( ResultCodeEnum.NO_SUCH_OPERATION, I18n.err( I18n.ERR_04275 ) );
     }
diff --git a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/Registries.java b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/Registries.java
index eb5bacd..fb76b4a 100644
--- a/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/Registries.java
+++ b/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/schema/registries/Registries.java
@@ -37,7 +37,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapSchemaViolationException;
 import org.apache.directory.shared.ldap.model.exception.LdapUnwillingToPerformException;
 import org.apache.directory.shared.ldap.model.message.ResultCodeEnum;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.DITContentRule;
 import org.apache.directory.shared.ldap.model.schema.DITStructureRule;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
@@ -292,7 +292,7 @@
         // AttributeType
         try
         {
-            AttributeType attributeType = attributeTypeRegistry.lookup( name );
+            MutableAttributeTypeImpl attributeType = attributeTypeRegistry.lookup( name );
 
             if ( attributeType != null )
             {
@@ -500,7 +500,7 @@
 
         // Step 4 :
         // Check the AttributeTypes
-        for ( AttributeType attributeType : attributeTypeRegistry )
+        for ( MutableAttributeTypeImpl attributeType : attributeTypeRegistry )
         {
             resolve( attributeType, errors );
         }
@@ -534,7 +534,7 @@
      * AT -> S
      * AT -> AT
      */
-    public void delCrossReferences( AttributeType attributeType )
+    public void delCrossReferences( MutableAttributeTypeImpl attributeType )
     {
         if ( attributeType.getEquality() != null )
         {
@@ -644,7 +644,7 @@
      */
     private void buildAttributeTypeReferences( List<Throwable> errors )
     {
-        for ( AttributeType attributeType : attributeTypeRegistry )
+        for ( MutableAttributeTypeImpl attributeType : attributeTypeRegistry )
         {
             if ( ( getUsing( attributeType ) == null ) || getUsing( attributeType ).isEmpty() )
             {
@@ -1041,12 +1041,12 @@
     /**
      * Check AttributeType referential integrity
      */
-    private void resolveRecursive( AttributeType attributeType, Set<String> processed, List<Throwable> errors )
+    private void resolveRecursive( MutableAttributeTypeImpl attributeType, Set<String> processed, List<Throwable> errors )
     {
         // Process the Superior, if any
         String superiorOid = attributeType.getSuperiorOid();
 
-        AttributeType superior = null;
+        MutableAttributeTypeImpl superior = null;
 
         if ( superiorOid != null )
         {
@@ -1174,7 +1174,7 @@
      * Check the inheritance, and the existence of MatchingRules and LdapSyntax
      * for an attribute 
      */
-    private void resolve( AttributeType attributeType, List<Throwable> errors )
+    private void resolve( MutableAttributeTypeImpl attributeType, List<Throwable> errors )
     {
         // This set is used to avoid having more than one error
         // for an AttributeType. It's mandatory when processing
@@ -1189,7 +1189,7 @@
     }
 
 
-    private List<AttributeType> getMustRecursive( List<AttributeType> musts, Set<ObjectClass> processed,
+    private List<MutableAttributeTypeImpl> getMustRecursive( List<MutableAttributeTypeImpl> musts, Set<ObjectClass> processed,
         ObjectClass objectClass )
     {
         if ( objectClass != null )
@@ -1203,7 +1203,7 @@
 
             processed.add( objectClass );
 
-            for ( AttributeType must : objectClass.getMustAttributeTypes() )
+            for ( MutableAttributeTypeImpl must : objectClass.getMustAttributeTypes() )
             {
                 musts.add( must );
             }
@@ -1233,12 +1233,12 @@
 
         // Check that the MAY and MUST AT are consistent (no AT in MAY and in MUST
         // in one of its superior
-        List<AttributeType> musts = getMustRecursive( new ArrayList<AttributeType>(), new HashSet<ObjectClass>(),
+        List<MutableAttributeTypeImpl> musts = getMustRecursive( new ArrayList<MutableAttributeTypeImpl>(), new HashSet<ObjectClass>(),
             objectClass );
 
         if ( musts != null )
         {
-            for ( AttributeType may : objectClass.getMayAttributeTypes() )
+            for ( MutableAttributeTypeImpl may : objectClass.getMayAttributeTypes() )
             {
                 if ( musts.contains( may ) )
                 {
@@ -1552,7 +1552,7 @@
             switch ( schemaObject.getObjectType() )
             {
                 case ATTRIBUTE_TYPE:
-                    attributeTypeRegistry.register( ( AttributeType ) schemaObject );
+                    attributeTypeRegistry.register( ( MutableAttributeTypeImpl ) schemaObject );
                     break;
 
                 case COMPARATOR:
@@ -1767,7 +1767,7 @@
         switch ( schemaObject.getObjectType() )
         {
             case ATTRIBUTE_TYPE:
-                unregistered = attributeTypeRegistry.unregister( ( AttributeType ) schemaObject );
+                unregistered = attributeTypeRegistry.unregister( ( MutableAttributeTypeImpl ) schemaObject );
                 break;
 
             case COMPARATOR:
@@ -2332,7 +2332,7 @@
             // Check that each ObjectClass has all the MAY AttributeTypes
             if ( objectClass.getMayAttributeTypes() != null )
             {
-                for ( AttributeType may : objectClass.getMayAttributeTypes() )
+                for ( MutableAttributeTypeImpl may : objectClass.getMayAttributeTypes() )
                 {
                     if ( !attributeTypeRegistry.contains( may.getOid() ) )
                     {
@@ -2352,7 +2352,7 @@
             // Check that each ObjectClass has all the MUST AttributeTypes
             if ( objectClass.getMustAttributeTypes() != null )
             {
-                for ( AttributeType must : objectClass.getMustAttributeTypes() )
+                for ( MutableAttributeTypeImpl must : objectClass.getMustAttributeTypes() )
                 {
                     if ( !attributeTypeRegistry.contains( must.getOid() ) )
                     {
@@ -2394,7 +2394,7 @@
         // Check the AttributeTypes : check for MatchingRules, Syntaxes
         LOG.debug( "Checking AttributeTypes..." );
 
-        for ( AttributeType attributeType : attributeTypeRegistry )
+        for ( MutableAttributeTypeImpl attributeType : attributeTypeRegistry )
         {
             // Check that each AttributeType has a SYNTAX 
             if ( attributeType.getSyntax() == null )
@@ -2475,7 +2475,7 @@
             // Check the SUP
             if ( attributeType.getSuperior() != null )
             {
-                AttributeType superior = attributeType.getSuperior();
+                MutableAttributeTypeImpl superior = attributeType.getSuperior();
 
                 if ( !attributeTypeRegistry.contains( superior.getOid() ) )
                 {
@@ -2524,7 +2524,7 @@
         clone.syntaxCheckerRegistry = syntaxCheckerRegistry.copy();
 
         // Store all the SchemaObjects into the globalOid registry
-        for ( AttributeType attributeType : clone.attributeTypeRegistry )
+        for ( MutableAttributeTypeImpl attributeType : clone.attributeTypeRegistry )
         {
             clone.globalOidRegistry.put( attributeType );
         }
diff --git a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/entry/BinaryValueAttributeTypeTest.java b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/entry/BinaryValueAttributeTypeTest.java
index 6aa14e3..874e069 100644
--- a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/entry/BinaryValueAttributeTypeTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/entry/BinaryValueAttributeTypeTest.java
@@ -35,7 +35,7 @@
 import java.util.Arrays;
 
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.MutableLdapSyntaxImpl;
 import org.apache.directory.shared.ldap.model.schema.MutableMatchingRuleImpl;
 import org.apache.directory.shared.ldap.model.schema.AbstractNormalizer;
@@ -68,7 +68,7 @@
 public class BinaryValueAttributeTypeTest
 {
     private MutableLdapSyntaxImpl s;
-    private AttributeType at;
+    private MutableAttributeTypeImpl at;
     private MutableMatchingRuleImpl mr;
     
     private static final byte[] BYTES1 = new byte[]{0x01, 0x02, 0x03, 0x04};
@@ -117,7 +117,7 @@
             }
         });
         
-        at = new AttributeType( "1.1.3.1" );
+        at = new MutableAttributeTypeImpl( "1.1.3.1" );
         at.setEquality( mr );
         at.setOrdering( mr );
         at.setSubstring( mr );
@@ -165,7 +165,7 @@
     /**
      * Deserialize a BinaryValue
      */
-    private BinaryValue deserializeValue( ByteArrayOutputStream out, AttributeType at ) throws IOException, ClassNotFoundException
+    private BinaryValue deserializeValue( ByteArrayOutputStream out, MutableAttributeTypeImpl at ) throws IOException, ClassNotFoundException
     {
         ObjectInputStream oIn = null;
         ByteArrayInputStream in = new ByteArrayInputStream( out.toByteArray() );
@@ -215,7 +215,7 @@
         }
         
         // create a AT without any syntax
-        AttributeType attribute = new AttributeType( "1.1.3.1" );
+        MutableAttributeTypeImpl attribute = new MutableAttributeTypeImpl( "1.1.3.1" );
         
         try
         {
@@ -234,7 +234,7 @@
      */
     @Test public void testServerBinaryValueNullValue()
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         
         BinaryValue value = new BinaryValue( attribute, null );
         
@@ -248,7 +248,7 @@
      */
     @Test public void testServerBinaryValueEmptyValue()
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         
         BinaryValue value = new BinaryValue( attribute, StringConstants.EMPTY_BYTES );
         
@@ -262,7 +262,7 @@
      */
     @Test public void testServerBinaryValueNoValue()
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         byte[] val = new byte[]{0x01};
         BinaryValue bv = new BinaryValue( attribute );
         
@@ -278,7 +278,7 @@
      */
     @Test public void testServerBinaryValue()
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         byte[] val = new byte[]{0x01};
         BinaryValue value = new BinaryValue( attribute, val );
         
@@ -294,7 +294,7 @@
     @Test
     public void testClone() throws LdapException
     {
-        AttributeType at1 = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl at1 = EntryUtils.getBytesAttributeType();
         BinaryValue bv = new BinaryValue( at1, null );
         BinaryValue bv1 = bv.clone();
         
@@ -323,7 +323,7 @@
      */
     @Test public void testEquals()
     {
-        AttributeType at1 = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl at1 = EntryUtils.getBytesAttributeType();
         
         BinaryValue value1 = new BinaryValue( at1, new byte[]{0x01, (byte)0x02} );
         BinaryValue value2 = new BinaryValue( at1, new byte[]{0x01, (byte)0x02} );
@@ -352,7 +352,7 @@
      */
     @Test public void testGetNormalizedValue()
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         
         BinaryValue value = new BinaryValue( attribute, null );
         assertNull( value.getNormalizedValue() );
@@ -370,7 +370,7 @@
      */
     @Test public void testGetNormalizedValueCopy()
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         
         BinaryValue value = new BinaryValue( attribute, null );
         assertNull( value.getNormalizedValue() );
@@ -388,7 +388,7 @@
      */
     @Test public void testGetNormalizedValueReference()
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         
         BinaryValue value = new BinaryValue( attribute, null );
         assertNull( value.getNormalizedValueReference() );
@@ -407,7 +407,7 @@
     @Test
     public void testgetAttributeType()
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         BinaryValue sbv = new BinaryValue( attribute );
         
         assertEquals( attribute, sbv.getAttributeType() );
@@ -421,7 +421,7 @@
      */
     @Test public void testIsValid()
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         
         BinaryValue value = new BinaryValue( attribute, null );
         assertTrue( value.isValid() );
@@ -450,7 +450,7 @@
      */
     @Test public void testHashCode()
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         BinaryValue v0 = new BinaryValue( attribute, new byte[]{0x01, 0x02} );
         BinaryValue v1 = new BinaryValue( attribute, new byte[]{(byte)0x81, (byte)0x82} );
         BinaryValue v2 = new BinaryValue( attribute, new byte[]{0x01, 0x02} );
@@ -478,7 +478,7 @@
     @Test
     public void testSame() throws LdapException
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         BinaryValue bv = new BinaryValue( attribute );
 
         bv.normalize();
@@ -504,7 +504,7 @@
     @Test
     public void testInstanceOf() throws LdapException
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         BinaryValue sbv = new BinaryValue( attribute );
         
         assertTrue( sbv.instanceOf( attribute ) );
@@ -521,7 +521,7 @@
     @Test
     public void testNormalize() throws LdapException
     {
-        AttributeType attribute = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getBytesAttributeType();
         BinaryValue bv = new BinaryValue( attribute );
 
         bv.normalize();
@@ -543,7 +543,7 @@
     @Test
     public void testCompareTo()
     {
-        AttributeType at1 = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl at1 = EntryUtils.getBytesAttributeType();
         BinaryValue v0 = new BinaryValue( at1, BYTES1 );
         BinaryValue v1 = new BinaryValue( at1, BYTES2 );
         
diff --git a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/entry/StringValueAttributeTypeTest.java b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/entry/StringValueAttributeTypeTest.java
index e061be7..91d2547 100644
--- a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/entry/StringValueAttributeTypeTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/entry/StringValueAttributeTypeTest.java
@@ -39,7 +39,7 @@
 import java.util.List;
 
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
 import org.apache.directory.shared.ldap.model.schema.AbstractSyntaxChecker;
 import org.apache.directory.shared.ldap.model.schema.comparators.StringComparator;
@@ -175,7 +175,7 @@
     @Test 
     public void testClientStringValueNullValue()
     {
-        AttributeType attribute = EntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getIA5StringAttributeType();
         
         StringValue value = new StringValue( attribute, null );
         
@@ -189,7 +189,7 @@
      */
     @Test public void testGetNormalizedValue()
     {
-        AttributeType attribute = EntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getIA5StringAttributeType();
         
         StringValue sv = new StringValue( attribute, null );
         
@@ -216,7 +216,7 @@
      */
     @Test public void testIsValid()
     {
-        AttributeType attribute = EntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getIA5StringAttributeType();
         
         StringValue sv = new StringValue( attribute, null );
         assertTrue( sv.isValid() );
@@ -238,7 +238,7 @@
     @Test
     public void testNormalize() throws LdapException
     {
-        AttributeType attribute = EntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getIA5StringAttributeType();
         StringValue sv = new StringValue( attribute );
 
         sv.normalize();
@@ -260,7 +260,7 @@
     @Test
     public void testInstanceOf() throws LdapException
     {
-        AttributeType attribute = EntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getIA5StringAttributeType();
         StringValue ssv = new StringValue( attribute );
         
         assertTrue( ssv.instanceOf( attribute ) );
@@ -277,7 +277,7 @@
     @Test
     public void testgetAttributeType()
     {
-        AttributeType attribute = EntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl attribute = EntryUtils.getIA5StringAttributeType();
         StringValue ssv = new StringValue( attribute );
         
         assertEquals( attribute, ssv.getAttributeType() );
@@ -289,8 +289,8 @@
      */
     @Test public void testEquals()
     {
-        AttributeType at1 = EntryUtils.getIA5StringAttributeType();
-        AttributeType at2 = EntryUtils.getBytesAttributeType();
+        MutableAttributeTypeImpl at1 = EntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl at2 = EntryUtils.getBytesAttributeType();
         
         StringValue value1 = new StringValue( at1, "test" );
         StringValue value2 = new StringValue( at1, "test" );
@@ -337,7 +337,7 @@
         }
         
         // create a AT without any syntax
-        AttributeType attribute = new EntryUtils.AT( "1.1.3.1" );
+        MutableAttributeTypeImpl attribute = new EntryUtils.AT( "1.1.3.1" );
         
         try
         {
@@ -357,7 +357,7 @@
      */
     @Test public void testHashCode()
     {
-        AttributeType at1 = EntryUtils.getCaseIgnoringAttributeNoNumbersType();
+        MutableAttributeTypeImpl at1 = EntryUtils.getCaseIgnoringAttributeNoNumbersType();
         StringValue v0 = new StringValue( at1, "Alex" );
         StringValue v1 = new StringValue( at1, "ALEX" );
         StringValue v2 = new StringValue( at1, "alex" );
@@ -391,7 +391,7 @@
     @Test
     public void testCompareTo()
     {
-        AttributeType at1 = EntryUtils.getCaseIgnoringAttributeNoNumbersType();
+        MutableAttributeTypeImpl at1 = EntryUtils.getCaseIgnoringAttributeNoNumbersType();
         StringValue v0 = new StringValue( at1, "Alex" );
         StringValue v1 = new StringValue( at1, "ALEX" );
         
@@ -411,7 +411,7 @@
     @Test
     public void testClone() throws LdapException
     {
-        AttributeType at1 = EntryUtils.getCaseIgnoringAttributeNoNumbersType();
+        MutableAttributeTypeImpl at1 = EntryUtils.getCaseIgnoringAttributeNoNumbersType();
         StringValue sv = new StringValue( at1, "Test" );
         
         StringValue sv1 = sv.clone();
diff --git a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/SchemaUtilsTest.java b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/SchemaUtilsTest.java
index 22cd7e3..e924786 100644
--- a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/SchemaUtilsTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/SchemaUtilsTest.java
@@ -27,7 +27,7 @@
 
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.MutableLdapSyntaxImpl;
 import org.apache.directory.shared.ldap.model.schema.MutableMatchingRuleImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaUtils;
@@ -77,11 +77,11 @@
     }
 
 
-    public AttributeType[] getAttributeTypes()
+    public MutableAttributeTypeImpl[] getAttributeTypes()
     {
-        AttributeType[] ats = new AttributeType[5];
+        MutableAttributeTypeImpl[] ats = new MutableAttributeTypeImpl[5];
 
-        ats[0] = new AttributeType( "2.5.4.41" );
+        ats[0] = new MutableAttributeTypeImpl( "2.5.4.41" );
         ats[0].addName( "name" );
         ats[0].setSyntax(  getSyntaxes()[1] );
         ats[0].setSyntaxLength( 32768 );
@@ -89,24 +89,24 @@
         ats[0].setSubstring( getMatchingRules()[1] );
 
         // ( 2.5.4.3 NAME 'cn' SUP name )
-        ats[1] = new AttributeType( "2.5.4.3" );
+        ats[1] = new MutableAttributeTypeImpl( "2.5.4.3" );
         ats[1].addName( "cn", "commonName" );
 
-        ats[2] = new AttributeType( "2.5.4.41" );
+        ats[2] = new MutableAttributeTypeImpl( "2.5.4.41" );
         ats[2].addName( "name" );
         ats[2].setSyntax( getSyntaxes()[1] );
         ats[2].setSyntaxLength( 32768 );
         ats[2].setEquality( getMatchingRules()[0] );
         ats[2].setSubstring( getMatchingRules()[1] );
 
-        ats[3] = new AttributeType( "2.5.4.41" );
+        ats[3] = new MutableAttributeTypeImpl( "2.5.4.41" );
         ats[3].addName( "name" );
         ats[3].setSyntax( getSyntaxes()[1] );
         ats[3].setSyntaxLength( 32768 );
         ats[3].setEquality( getMatchingRules()[0] );
         ats[3].setSubstring( getMatchingRules()[1] );
 
-        ats[4] = new AttributeType( "2.5.4.41" );
+        ats[4] = new MutableAttributeTypeImpl( "2.5.4.41" );
         ats[4].addName( "name" );
         ats[4].setSyntax( getSyntaxes()[1] );
         ats[4].setSyntaxLength( 32768 );
diff --git a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/parsers/OpenLdapSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/parsers/OpenLdapSchemaParserTest.java
index 1b5c771..3a1ba96 100644
--- a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/parsers/OpenLdapSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/parsers/OpenLdapSchemaParserTest.java
@@ -32,7 +32,7 @@
 
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.ObjectClass;
 import org.apache.directory.shared.ldap.model.schema.ObjectClassTypeEnum;
 import org.apache.directory.shared.ldap.model.schema.parsers.ConsoleParserMonitor;
@@ -78,9 +78,9 @@
             + "        SYNTAX 1.3.6.1.4.1.1466.115.121.1.25 )";
 
         parser.parse( attributeTypeData );
-        List<AttributeType> attributeTypes = parser.getAttributeTypes();
-        Map<String, AttributeType> mapAttributeTypes = mapAttributeTypes( attributeTypes );
-        AttributeType attributeType = mapAttributeTypes.get( "2.5.4.14" );
+        List<MutableAttributeTypeImpl> attributeTypes = parser.getAttributeTypes();
+        Map<String, MutableAttributeTypeImpl> mapAttributeTypes = mapAttributeTypes( attributeTypes );
+        MutableAttributeTypeImpl attributeType = mapAttributeTypes.get( "2.5.4.14" );
 
         assertNotNull( attributeType );
         assertEquals( "2.5.4.14", attributeType.getOid() );
@@ -90,11 +90,11 @@
     }
 
 
-    private Map<String, AttributeType> mapAttributeTypes( List<AttributeType> attributeTypes )
+    private Map<String, MutableAttributeTypeImpl> mapAttributeTypes( List<MutableAttributeTypeImpl> attributeTypes )
     {
-        Map<String, AttributeType> m = new HashMap<String, AttributeType>();
+        Map<String, MutableAttributeTypeImpl> m = new HashMap<String, MutableAttributeTypeImpl>();
 
-        for ( AttributeType attributeType : attributeTypes )
+        for ( MutableAttributeTypeImpl attributeType : attributeTypes )
         {
             m.put( attributeType.getOid(), attributeType );
         }
@@ -112,9 +112,9 @@
             + "        EQUALITY caseIgnoreMatch\n"
             + "        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )";
         parser.parse( attributeTypeData );
-        List<AttributeType> attributeTypeList = parser.getAttributeTypes();
-        Map<String, AttributeType> attributeTypes = mapAttributeTypes( attributeTypeList );
-        AttributeType type = attributeTypes.get( "2.5.4.2" );
+        List<MutableAttributeTypeImpl> attributeTypeList = parser.getAttributeTypes();
+        Map<String, MutableAttributeTypeImpl> attributeTypes = mapAttributeTypes( attributeTypeList );
+        MutableAttributeTypeImpl type = attributeTypes.get( "2.5.4.2" );
 
         assertNotNull( type );
         assertEquals( "2.5.4.2", type.getOid() );
@@ -134,9 +134,9 @@
             + "        EQUALITY caseIgnoreMatch\n"
             + "        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )";
         parser.parse( attributeTypeData );
-        List<AttributeType> attributeTypeList = parser.getAttributeTypes();
-        Map<String, AttributeType> attributeTypes = mapAttributeTypes( attributeTypeList );
-        AttributeType type = attributeTypes.get( "2.5.4.2" );
+        List<MutableAttributeTypeImpl> attributeTypeList = parser.getAttributeTypes();
+        Map<String, MutableAttributeTypeImpl> attributeTypes = mapAttributeTypes( attributeTypeList );
+        MutableAttributeTypeImpl type = attributeTypes.get( "2.5.4.2" );
 
         assertNotNull( type );
         assertEquals( "2.5.4.2", type.getOid() );
@@ -160,9 +160,9 @@
             + "        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )";
 
         parser.parse( attributeTypeData );
-        List<AttributeType> attributeTypeList = parser.getAttributeTypes();
-        Map<String, AttributeType> attributeTypes = mapAttributeTypes( attributeTypeList );
-        AttributeType type = attributeTypes.get( "2.5.4.2" );
+        List<MutableAttributeTypeImpl> attributeTypeList = parser.getAttributeTypes();
+        Map<String, MutableAttributeTypeImpl> attributeTypes = mapAttributeTypes( attributeTypeList );
+        MutableAttributeTypeImpl type = attributeTypes.get( "2.5.4.2" );
 
         assertNotNull( type );
         assertEquals( "2.5.4.2", type.getOid() );
@@ -182,9 +182,9 @@
             + "        EQUALITY caseIgnoreMatch\n"
             + "        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )";
         parser.parse( attributeTypeData );
-        List<AttributeType> attributeTypeList = parser.getAttributeTypes();
-        Map<String, AttributeType> attributeTypes = mapAttributeTypes( attributeTypeList );
-        AttributeType type = attributeTypes.get( "2.5.4.2" );
+        List<MutableAttributeTypeImpl> attributeTypeList = parser.getAttributeTypes();
+        Map<String, MutableAttributeTypeImpl> attributeTypes = mapAttributeTypes( attributeTypeList );
+        MutableAttributeTypeImpl type = attributeTypes.get( "2.5.4.2" );
 
         assertNotNull( type );
         assertEquals( "2.5.4.2", type.getOid() );
@@ -332,7 +332,7 @@
         InputStream input = getClass().getResourceAsStream( "core.schema" );
         parser.parse( input );
 
-        List<AttributeType> attributeTypes = parser.getAttributeTypes();
+        List<MutableAttributeTypeImpl> attributeTypes = parser.getAttributeTypes();
         List<ObjectClass> objectClassTypes = parser.getObjectClassTypes();
         Map<String, OpenLdapObjectIdentifierMacro> objectIdentifierMacros = parser.getObjectIdentifierMacros();
 
@@ -348,7 +348,7 @@
         InputStream input = getClass().getResourceAsStream( "inetorgperson.schema" );
         parser.parse( input );
 
-        List<AttributeType> attributeTypes = parser.getAttributeTypes();
+        List<MutableAttributeTypeImpl> attributeTypes = parser.getAttributeTypes();
         List<ObjectClass> objectClassTypes = parser.getObjectClassTypes();
         Map<String, OpenLdapObjectIdentifierMacro> objectIdentifierMacros = parser.getObjectIdentifierMacros();
 
@@ -364,14 +364,14 @@
         InputStream input = getClass().getResourceAsStream( "collective.schema" );
         parser.parse( input );
 
-        List<AttributeType> attributeTypes = parser.getAttributeTypes();
+        List<MutableAttributeTypeImpl> attributeTypes = parser.getAttributeTypes();
         List<ObjectClass> objectClassTypes = parser.getObjectClassTypes();
         Map<String, OpenLdapObjectIdentifierMacro> objectIdentifierMacros = parser.getObjectIdentifierMacros();
 
         assertEquals( 13, attributeTypes.size() );
         assertEquals( 0, objectClassTypes.size() );
         assertEquals( 0, objectIdentifierMacros.size() );
-        for ( AttributeType attributeTypeLiteral : attributeTypes )
+        for ( MutableAttributeTypeImpl attributeTypeLiteral : attributeTypes )
         {
             assertTrue( attributeTypeLiteral.isCollective() );
         }
@@ -384,7 +384,7 @@
         InputStream input = getClass().getResourceAsStream( "dyngroup.schema" );
         parser.parse( input );
 
-        List<AttributeType> attributeTypes = parser.getAttributeTypes();
+        List<MutableAttributeTypeImpl> attributeTypes = parser.getAttributeTypes();
         List<ObjectClass> objectClassTypes = parser.getObjectClassTypes();
         Map<String, OpenLdapObjectIdentifierMacro> objectIdentifierMacros = parser.getObjectIdentifierMacros();
 
@@ -418,7 +418,7 @@
             }
         }
         
-        for ( AttributeType attributeType : attributeTypes )
+        for ( MutableAttributeTypeImpl attributeType : attributeTypes )
         {
             List<String> asList = attributeType.getNames();
             
@@ -446,9 +446,9 @@
             + "        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE)";
 
         parser.parse( attributeTypeData );
-        List<AttributeType> attributeTypes = parser.getAttributeTypes();
-        Map<String, AttributeType> mapAttributeTypes = mapAttributeTypes( attributeTypes );
-        AttributeType attributeType = mapAttributeTypes.get( "1.3.6.1.4.1.8104.1.1.37" );
+        List<MutableAttributeTypeImpl> attributeTypes = parser.getAttributeTypes();
+        Map<String, MutableAttributeTypeImpl> mapAttributeTypes = mapAttributeTypes( attributeTypes );
+        MutableAttributeTypeImpl attributeType = mapAttributeTypes.get( "1.3.6.1.4.1.8104.1.1.37" );
 
         assertNotNull( attributeType );
         assertEquals( "1.3.6.1.4.1.8104.1.1.37", attributeType.getOid() );
diff --git a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/registries/AttributeTypeRegistryTest.java b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/registries/AttributeTypeRegistryTest.java
index bae94de..3b12945 100644
--- a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/registries/AttributeTypeRegistryTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/registries/AttributeTypeRegistryTest.java
@@ -27,7 +27,7 @@
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.registries.AttributeTypeRegistry;
 import org.apache.directory.shared.ldap.model.schema.registries.DefaultAttributeTypeRegistry;
 import org.junit.Before;
@@ -56,7 +56,7 @@
     @Test
     public void testUnregister() throws LdapException
     {
-        AttributeType at0 = new AttributeType( "1.1" );
+        MutableAttributeTypeImpl at0 = new MutableAttributeTypeImpl( "1.1" );
         at0.addName( "t", "test", "Test", "T" );
         atRegistry.register( at0 );
         
@@ -81,7 +81,7 @@
     @Test
     public void testRegister() throws LdapException
     {
-        AttributeType at0 = new AttributeType( "1.1" );
+        MutableAttributeTypeImpl at0 = new MutableAttributeTypeImpl( "1.1" );
         at0.addName( "t", "test", "Test", "T" );
         atRegistry.register( at0 );
         
diff --git a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserTest.java
index 0e77342..032bfcd 100644
--- a/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserTest.java
@@ -31,7 +31,7 @@
 
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.UsageEnum;
 import org.apache.directory.shared.ldap.model.schema.parsers.ConsoleParserMonitor;
 import org.apache.directory.shared.ldap.model.schema.parsers.AttributeTypeDescriptionSchemaParser;
@@ -125,7 +125,7 @@
     public void testSuperType() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         // no SUP
         value = "( 1.1 SYNTAX 1.1 )";
@@ -212,7 +212,7 @@
     public void testEquality() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         // no EQUALITY
         value = "( 1.1 SYNTAX 1.1 )";
@@ -258,7 +258,7 @@
     public void testOrdering() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         // no ORDERING
         value = "( 1.1 SYNTAX 1.1 )";
@@ -304,7 +304,7 @@
     public void testSubstring() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         // no SUBSTR
         value = "( 1.1 SYNTAX 1.1 )";
@@ -349,7 +349,7 @@
     public void testSyntax() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         // no SYNTAX
         value = "( 1.1 SUP 1.1 )";
@@ -476,7 +476,7 @@
     public void testSingleValue() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         // not single-value
         value = "( 1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' )";
@@ -516,7 +516,7 @@
     public void testCollective() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         // not collective
         value = "( 1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' )";
@@ -556,7 +556,7 @@
     public void testNoUserModification() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         // not NO-USER-MODIFICATION
         value = "( 1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' )";
@@ -596,7 +596,7 @@
     public void testUsage() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         // DEFAULT is userApplications
         value = "( 1.1 SYNTAX 1.1 )";
@@ -663,7 +663,7 @@
     public void testFull() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         value = "( 1.2.3.4.5.6.7.8.9.0 NAME ( 'abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789' 'test' ) DESC 'Descripton \u00E4\u00F6\u00FC\u00DF \u90E8\u9577' OBSOLETE SUP abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 EQUALITY 2.3.4.5.6.7.8.9.0.1 ORDERING 3.4.5.6.7.8.9.0.1.2 SUBSTR 4.5.6.7.8.9.0.1.2.3 SYNTAX 5.6.7.8.9.0.1.2.3.4{1234567890} SINGLE-VALUE NO-USER-MODIFICATION USAGE dSAOperation X-TEST-a ('test1-1' 'test1-2') X-TEST-b ('test2-1' 'test2-2') )";
         attributeType = parser.parseAttributeTypeDescription( value );
@@ -730,7 +730,7 @@
     public void testRequiredElements() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         value = "( 1.2.3.4.5.6.7.8.9.0 SYNTAX 1.1 SUP 1.1 )";
         attributeType = parser.parseAttributeTypeDescription( value );
@@ -773,7 +773,7 @@
     public void testCollecitveConstraint() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         value = "( 1.1 SYNTAX 1.1 COLLECTIVE )";
         attributeType = parser.parseAttributeTypeDescription( value );
@@ -833,7 +833,7 @@
     public void testNoUserModificatonConstraint() throws ParseException
     {
         String value = null;
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         value = "( 1.1 SYNTAX 1.1 NO-USER-MODIFICATION USAGE directoryOperation )";
         attributeType = parser.parseAttributeTypeDescription( value );
@@ -886,7 +886,7 @@
     public void testIgnoreElementOrder() throws ParseException
     {
         String value = "( 2.5.4.3 SUP name SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 USAGE userApplications DESC 'RFC2256: common name(s) for which the entity is known by'  EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch NAME ( 'cn' 'commonName' )  )";
-        AttributeType attributeType = parser.parseAttributeTypeDescription( value );
+        MutableAttributeTypeImpl attributeType = parser.parseAttributeTypeDescription( value );
 
         assertEquals( "2.5.4.3", attributeType.getOid() );
         assertEquals( 2, attributeType.getNames().size() );
@@ -910,7 +910,7 @@
     public void testRfcUid() throws ParseException
     {
         String value = "( 0.9.2342.19200300.100.1.1 NAME ( 'uid' 'userid' ) DESC 'RFC1274: user identifier' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} USAGE userApplications )";
-        AttributeType attributeType = parser.parseAttributeTypeDescription( value );
+        MutableAttributeTypeImpl attributeType = parser.parseAttributeTypeDescription( value );
 
         assertEquals( "0.9.2342.19200300.100.1.1", attributeType.getOid() );
         assertEquals( 2, attributeType.getNames().size() );
@@ -943,7 +943,7 @@
     {
         String substrate = "( 1.3.6.1.4.1.18060.0.4.0.2.10000 NAME ( 'bogus' 'bogusName' ) "
             + "DESC 'bogus description' SUP name SINGLE-VALUE )";
-        AttributeType desc = parser.parseAttributeTypeDescription( substrate );
+        MutableAttributeTypeImpl desc = parser.parseAttributeTypeDescription( substrate );
         assertEquals( "1.3.6.1.4.1.18060.0.4.0.2.10000", desc.getOid() );
         assertEquals( "bogus", desc.getNames().get( 0 ) );
         assertEquals( "bogusName", desc.getNames().get( 1 ) );
@@ -961,7 +961,7 @@
     {
         String substrate = "( 1.3.6.1.4.1.18060.0.4.0.2.10000 NAME ( 'bogus' 'bogusName' ) "
             + "DESC 'bogus description' SUP name SINGLE-VALUE X-SCHEMA 'blah' )";
-        AttributeType desc = parser.parseAttributeTypeDescription( substrate );
+        MutableAttributeTypeImpl desc = parser.parseAttributeTypeDescription( substrate );
         assertEquals( "1.3.6.1.4.1.18060.0.4.0.2.10000", desc.getOid() );
         assertEquals( "bogus", desc.getNames().get( 0 ) );
         assertEquals( "bogusName", desc.getNames().get( 1 ) );
@@ -999,7 +999,7 @@
         try
         {
             String value = null;
-            AttributeType attributeType = null;
+            MutableAttributeTypeImpl attributeType = null;
 
             parser.setQuirksMode( true );
 
@@ -1083,7 +1083,7 @@
     {
         String value = "( 2.5.4.58 NAME 'attributeCertificateAttribute' " + "DESC 'attribute certificate use ;binary' "
             + "SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 ) ";
-        AttributeType attributeType = parser.parseAttributeTypeDescription( value );
+        MutableAttributeTypeImpl attributeType = parser.parseAttributeTypeDescription( value );
 
         assertEquals( "2.5.4.58", attributeType.getOid() );
         assertEquals( 1, attributeType.getNames().size() );
@@ -1107,7 +1107,7 @@
     {
         String value = "( 1.3.18.0.2.4.216 NAME 'SAFDfpDataClass' DESC '  ' " +
             "EQUALITY 2.5.13.2 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )";
-        AttributeType attributeType = parser.parseAttributeTypeDescription( value );
+        MutableAttributeTypeImpl attributeType = parser.parseAttributeTypeDescription( value );
 
         assertEquals( "1.3.18.0.2.4.216", attributeType.getOid() );
         assertEquals( 1, attributeType.getNames().size() );
diff --git a/ldap/schema/data/src/main/java/org/apache/directory/shared/ldap/schemaloader/SchemaEntityFactory.java b/ldap/schema/data/src/main/java/org/apache/directory/shared/ldap/schemaloader/SchemaEntityFactory.java
index 2dca720..506984d 100644
--- a/ldap/schema/data/src/main/java/org/apache/directory/shared/ldap/schemaloader/SchemaEntityFactory.java
+++ b/ldap/schema/data/src/main/java/org/apache/directory/shared/ldap/schemaloader/SchemaEntityFactory.java
@@ -38,7 +38,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.shared.ldap.model.exception.LdapUnwillingToPerformException;
 import org.apache.directory.shared.ldap.model.message.ResultCodeEnum;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.EntityFactory;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
 import org.apache.directory.shared.ldap.model.schema.MutableLdapSyntaxImpl;
@@ -872,7 +872,7 @@
      * @throws LdapInvalidAttributeValueException 
      * @throws LdapUnwillingToPerformException 
      */
-    public AttributeType getAttributeType( SchemaManager schemaManager, Entry entry, Registries targetRegistries,
+    public MutableAttributeTypeImpl getAttributeType( SchemaManager schemaManager, Entry entry, Registries targetRegistries,
         String schemaName ) throws LdapInvalidAttributeValueException, LdapUnwillingToPerformException
     {
         checkEntry( entry, SchemaConstants.ATTRIBUTE_TYPE );
@@ -900,7 +900,7 @@
         }
 
         // Create the new AttributeType
-        AttributeType attributeType = new AttributeType( oid );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( oid );
 
         // Syntax
         EntryAttribute mSyntax = entry.get( MetaSchemaConstants.M_SYNTAX_AT );
diff --git a/ldap/schema/data/src/main/java/org/apache/directory/shared/ldap/schemamanager/impl/DefaultSchemaManager.java b/ldap/schema/data/src/main/java/org/apache/directory/shared/ldap/schemamanager/impl/DefaultSchemaManager.java
index 1df6642..dc41f36 100644
--- a/ldap/schema/data/src/main/java/org/apache/directory/shared/ldap/schemamanager/impl/DefaultSchemaManager.java
+++ b/ldap/schema/data/src/main/java/org/apache/directory/shared/ldap/schemamanager/impl/DefaultSchemaManager.java
@@ -41,7 +41,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapUnwillingToPerformException;
 import org.apache.directory.shared.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.model.name.Dn;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.EntityFactory;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
 import org.apache.directory.shared.ldap.model.schema.LdapComparator;
@@ -796,7 +796,7 @@
     {
         for ( Entry entry : schemaLoader.loadAttributeTypes( schema ) )
         {
-            AttributeType attributeType = factory.getAttributeType( this, entry, registries, schema.getSchemaName() );
+            MutableAttributeTypeImpl attributeType = factory.getAttributeType( this, entry, registries, schema.getSchemaName() );
 
             addSchemaObject( registries, attributeType, schema );
         }
@@ -1518,7 +1518,7 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType lookupAttributeTypeRegistry( String oid ) throws LdapException
+    public MutableAttributeTypeImpl lookupAttributeTypeRegistry( String oid ) throws LdapException
     {
         return registries.getAttributeTypeRegistry().lookup( Strings.toLowerCase( oid ).trim() );
     }
@@ -1527,7 +1527,7 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType getAttributeType( String oid )
+    public MutableAttributeTypeImpl getAttributeType( String oid )
     {
         try
         {
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/MatchingRuleTest.java b/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/MatchingRuleTest.java
index dd90436..d81d246 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/MatchingRuleTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/MatchingRuleTest.java
@@ -31,7 +31,7 @@
 import org.apache.commons.io.FileUtils;
 import com.mycila.junit.concurrent.Concurrency;
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.LdapComparator;
 import org.apache.directory.shared.ldap.model.schema.MatchingRule;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
@@ -128,7 +128,7 @@
         assertEquals( 0, comparator.compare( " +1 234-567 890 ", "+1234567890" ) );
 
         // test a real attribute: telephoneNumber
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( "telephoneNumber" );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( "telephoneNumber" );
         assertNotNull( at.getEquality() );
         assertEquals( TelephoneNumberNormalizer.class.getName(), at.getEquality().getNormalizer().getClass().getName() );
         assertEquals( "+1234567890", at.getEquality().getNormalizer().normalize( " +1 234-567 890 " ) );
@@ -165,7 +165,7 @@
         assertTrue( comparator.compare( 1234L, 234L ) > 0 );
 
         // test a real attribute type: uidNumber
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( "uidNumber" );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( "uidNumber" );
         assertNotNull( at.getEquality() );
         assertEquals( NumericNormalizer.class.getName(), at.getEquality().getNormalizer().getClass().getName() );
         assertEquals( "123", at.getEquality().getNormalizer().normalize( " 1 2 3 " ) );
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerAddTest.java b/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerAddTest.java
index ac83591..481bb67 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerAddTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerAddTest.java
@@ -37,7 +37,7 @@
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.exception.LdapSchemaException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
 import org.apache.directory.shared.ldap.model.schema.LdapComparator;
 import org.apache.directory.shared.ldap.model.schema.LdapSyntax;
@@ -138,7 +138,7 @@
     {
         try
         {
-            AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
+            MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
 
             return attributeType != null;
         }
@@ -223,7 +223,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -253,7 +253,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -281,7 +281,7 @@
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
         // Create the collective attribute first
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -297,7 +297,7 @@
         assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() );
 
         // Now try to create an AT which is a subtype of teh create collective attribute
-        AttributeType subType = new AttributeType( "1.1.1" );
+        MutableAttributeTypeImpl subType = new MutableAttributeTypeImpl( "1.1.1" );
         subType.setEqualityOid( "2.5.13.1" );
         subType.setOrderingOid( null );
         subType.setSubstringOid( null );
@@ -325,7 +325,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -358,7 +358,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -392,7 +392,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -425,7 +425,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -452,7 +452,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( "0.0" );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -484,7 +484,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.8 " );
         attributeType.setUsage( UsageEnum.USER_APPLICATIONS );
 
@@ -510,7 +510,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( null );
         attributeType.setOrderingOid( "0.0" );
         attributeType.setSubstringOid( null );
@@ -542,7 +542,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( null );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( "0.0" );
@@ -574,7 +574,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( "2.5.13.1" );
         attributeType.setSubstringOid( "2.5.13.1" );
@@ -600,7 +600,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "2.5.18.4" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "2.5.18.4" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( "2.5.13.1" );
         attributeType.setSubstringOid( "2.5.13.1" );
@@ -618,7 +618,7 @@
         assertTrue( isATPresent( schemaManager, "2.5.18.4" ) );
 
         // Check that it hasen't changed
-        AttributeType original = schemaManager.lookupAttributeTypeRegistry( "2.5.18.4" );
+        MutableAttributeTypeImpl original = schemaManager.lookupAttributeTypeRegistry( "2.5.18.4" );
         assertEquals( "distinguishedNameMatch", original.getEqualityOid() );
         assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() );
         assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() );
@@ -635,7 +635,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( "2.5.13.1" );
         attributeType.setSubstringOid( "2.5.13.1" );
@@ -669,7 +669,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( "2.5.13.1" );
         attributeType.setSubstringOid( "2.5.13.1" );
@@ -688,7 +688,7 @@
         assertEquals( atrSize + 1, schemaManager.getAttributeTypeRegistry().size() );
         assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() );
 
-        AttributeType added = schemaManager.lookupAttributeTypeRegistry( "referral" );
+        MutableAttributeTypeImpl added = schemaManager.lookupAttributeTypeRegistry( "referral" );
         assertNotNull( added );
         assertEquals( "1.1.1.0", added.getOid() );
         assertTrue( added.getNames().contains( "referral" ) );
@@ -709,7 +709,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( null );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -719,7 +719,7 @@
         // It should not fail
         assertTrue( schemaManager.add( attributeType ) );
 
-        AttributeType result = schemaManager.lookupAttributeTypeRegistry( "1.1.0" );
+        MutableAttributeTypeImpl result = schemaManager.lookupAttributeTypeRegistry( "1.1.0" );
 
         assertEquals( "1.3.6.1.4.1.1466.115.121.1.12", result.getSyntaxOid() );
         assertEquals( "2.5.13.1", result.getEqualityOid() );
@@ -738,7 +738,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( null );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -770,7 +770,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( null );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -802,7 +802,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( null );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerDelTest.java b/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerDelTest.java
index edaa3ce..c296c05 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerDelTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerDelTest.java
@@ -35,7 +35,7 @@
 import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.exception.LdapProtocolErrorException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
 import org.apache.directory.shared.ldap.model.schema.LdapComparator;
 import org.apache.directory.shared.ldap.model.schema.LdapSyntax;
@@ -128,7 +128,7 @@
     {
         try
         {
-            AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
+            MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
 
             return attributeType != null;
         }
@@ -234,7 +234,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "1.1.0" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" );
         attributeType.setEqualityOid( "2.5.13.1" );
         attributeType.setOrderingOid( null );
         attributeType.setSubstringOid( null );
@@ -261,7 +261,7 @@
         int atrSize = schemaManager.getAttributeTypeRegistry().size();
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
-        AttributeType attributeType = new AttributeType( "generationQualifier" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "generationQualifier" );
         attributeType.setOid( "2.5.4.44" );
 
         // It should not fail
@@ -286,7 +286,7 @@
 
         // Try to delete an AT which is referenced by at least one OC
         // (modifiersName has one descendant : schemaModifiersName)
-        AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( "cn" );
+        MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( "cn" );
 
         // It should fail
         assertFalse( schemaManager.delete( attributeType ) );
@@ -309,7 +309,7 @@
         int goidSize = schemaManager.getGlobalOidRegistry().size();
 
         // Try to delete an AT which is contained by a disabled schema
-        AttributeType attributeType = new AttributeType( "gecos" );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "gecos" );
         attributeType.setOid( "1.3.6.1.1.1.1.2" );
 
         // It should fail
@@ -334,7 +334,7 @@
 
         // Try to delete an AT which has descendant 
         // (modifiersName has one descendant : schemaModifiersName)
-        AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( "modifiersName" );
+        MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( "modifiersName" );
 
         // It should fail
         assertFalse( schemaManager.delete( attributeType ) );
@@ -557,7 +557,7 @@
         assertTrue( errors.get( 0 ) instanceof LdapProtocolErrorException );
 
         // Now delete the using AT : it should be OK
-        AttributeType at = new AttributeType( AT_OID );
+        MutableAttributeTypeImpl at = new MutableAttributeTypeImpl( AT_OID );
         assertTrue( schemaManager.delete( at ) );
 
         assertEquals( atrSize - 1, schemaManager.getAttributeTypeRegistry().size() );
@@ -951,7 +951,7 @@
         assertTrue( errors.get( 0 ) instanceof LdapProtocolErrorException);
 
         // Now delete the using AT : it should be OK
-        AttributeType at = new AttributeType( AT_OID );
+        MutableAttributeTypeImpl at = new MutableAttributeTypeImpl( AT_OID );
         assertTrue( schemaManager.delete( at ) );
 
         assertEquals( atrSize - 1, schemaManager.getAttributeTypeRegistry().size() );
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerLoadTest.java b/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerLoadTest.java
index e496ea2..6e3c301 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerLoadTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/shared/ldap/schemaloader/SchemaManagerLoadTest.java
@@ -32,7 +32,7 @@
 
 import org.apache.commons.io.FileUtils;
 import org.apache.directory.shared.ldap.model.exception.LdapUnwillingToPerformException;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.registries.DefaultSchema;
 import org.apache.directory.shared.ldap.model.schema.registries.Schema;
@@ -528,7 +528,7 @@
         assertTrue( schemaManager.load( "cosine" ) );
         assertFalse( schemaManager.load( "nis" ) );
         
-        AttributeType at = schemaManager.getAttributeType( "uidNumber" );
+        MutableAttributeTypeImpl at = schemaManager.getAttributeType( "uidNumber" );
         // if nis schema was loaded then the at will not be null
         assertNull( at );
 
@@ -798,7 +798,7 @@
 
         assertFalse( schemaManager.getErrors().isEmpty() );
         
-        AttributeType at = schemaManager.getAttributeType( "uidNumber" );
+        MutableAttributeTypeImpl at = schemaManager.getAttributeType( "uidNumber" );
         // if nis schema was loaded then the at will not be null
         assertNotNull( at );
     }