renaming attributeTyep

git-svn-id: https://svn.apache.org/repos/asf/directory/apacheds/branches/akarasulu@1083574 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core-api/src/main/java/org/apache/directory/server/core/changelog/ChangeLogSearchEngine.java b/core-api/src/main/java/org/apache/directory/server/core/changelog/ChangeLogSearchEngine.java
index 7efc014..6c80cc5 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/changelog/ChangeLogSearchEngine.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/changelog/ChangeLogSearchEngine.java
@@ -25,7 +25,7 @@
 import org.apache.directory.shared.ldap.model.filter.ExprNode;
 import org.apache.directory.shared.ldap.model.ldif.ChangeType;
 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.ObjectClass;
 
 
@@ -191,7 +191,7 @@
      * @return the set of ChangeLogEvents on a particular attributeType
      * @throws Exception if there are failures accessing the store
      */
-    Cursor<ChangeLogEvent> find( AttributeType attributeType, RevisionOrder order ) throws Exception;
+    Cursor<ChangeLogEvent> find( MutableAttributeTypeImpl attributeType, RevisionOrder order ) throws Exception;
     
 
     /**
diff --git a/core-api/src/main/java/org/apache/directory/server/core/entry/ClonedServerEntry.java b/core-api/src/main/java/org/apache/directory/server/core/entry/ClonedServerEntry.java
index 999b81e..64d81cc 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/entry/ClonedServerEntry.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/entry/ClonedServerEntry.java
@@ -34,7 +34,7 @@
 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.name.Dn;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -91,73 +91,73 @@
     }
 
 
-    public void add( AttributeType attributeType, byte[]... values ) throws LdapException
+    public void add( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         clonedEntry.add( attributeType, values );
     }
 
 
-    public void add( AttributeType attributeType, String... values ) throws LdapException
+    public void add( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         clonedEntry.add( attributeType, values );
     }
 
 
-    public void add( AttributeType attributeType, Value<?>... values ) throws LdapException
+    public void add( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         clonedEntry.add( attributeType, values );
     }
 
 
-    public void add( String upId, AttributeType attributeType, byte[]... values ) throws LdapException
+    public void add( String upId, MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         clonedEntry.add( attributeType, values );
     }
 
 
-    public void add( String upId, AttributeType attributeType, String... values ) throws LdapException
+    public void add( String upId, MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         clonedEntry.add( attributeType, values );
     }
 
 
-    public void add( String upId, AttributeType attributeType, Value<?>... values ) throws LdapException
+    public void add( String upId, MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         clonedEntry.add( attributeType, values );
     }
 
 
-    public boolean contains( AttributeType attributeType, byte[]... values )
+    public boolean contains( MutableAttributeTypeImpl attributeType, byte[]... values )
     {
         return clonedEntry.contains( attributeType, values );
     }
 
 
-    public boolean contains( AttributeType attributeType, String... values )
+    public boolean contains( MutableAttributeTypeImpl attributeType, String... values )
     {
         return clonedEntry.contains( attributeType, values );
     }
 
 
-    public boolean contains( AttributeType attributeType, Value<?>... values )
+    public boolean contains( MutableAttributeTypeImpl attributeType, Value<?>... values )
     {
         return clonedEntry.contains( attributeType, values );
     }
 
 
-    public boolean containsAttribute( AttributeType attributeType )
+    public boolean containsAttribute( MutableAttributeTypeImpl attributeType )
     {
         return clonedEntry.containsAttribute( attributeType );
     }
 
 
-    public EntryAttribute get( AttributeType attributeType )
+    public EntryAttribute get( MutableAttributeTypeImpl attributeType )
     {
         return clonedEntry.get( attributeType );
     }
 
 
-    public Set<AttributeType> getAttributeTypes()
+    public Set<MutableAttributeTypeImpl> getAttributeTypes()
     {
         return clonedEntry.getAttributeTypes();
     }
@@ -187,55 +187,55 @@
     }
 
 
-    public EntryAttribute put( AttributeType attributeType, byte[]... values ) throws LdapException
+    public EntryAttribute put( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         return clonedEntry.put( attributeType, values );
     }
 
 
-    public EntryAttribute put( AttributeType attributeType, String... values ) throws LdapException
+    public EntryAttribute put( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         return clonedEntry.put( attributeType, values );
     }
 
 
-    public EntryAttribute put( AttributeType attributeType, Value<?>... values ) throws LdapException
+    public EntryAttribute put( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         return clonedEntry.put( attributeType, values );
     }
 
 
-    public EntryAttribute put( String upId, AttributeType attributeType, byte[]... values ) throws LdapException
+    public EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         return clonedEntry.put( attributeType, values );
     }
 
 
-    public EntryAttribute put( String upId, AttributeType attributeType, String... values ) throws LdapException
+    public EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         return clonedEntry.put( upId, attributeType, values );
     }
 
 
-    public EntryAttribute put( String upId, AttributeType attributeType, Value<?>... values ) throws LdapException
+    public EntryAttribute put( String upId, MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         return clonedEntry.put( upId, attributeType, values );
     }
 
 
-    public boolean remove( AttributeType attributeType, byte[]... values ) throws LdapException
+    public boolean remove( MutableAttributeTypeImpl attributeType, byte[]... values ) throws LdapException
     {
         return clonedEntry.remove( attributeType, values );
     }
 
 
-    public boolean remove( AttributeType attributeType, String... values ) throws LdapException
+    public boolean remove( MutableAttributeTypeImpl attributeType, String... values ) throws LdapException
     {
         return clonedEntry.remove( attributeType, values );
     }
 
 
-    public boolean remove( AttributeType attributeType, Value<?>... values ) throws LdapException
+    public boolean remove( MutableAttributeTypeImpl attributeType, Value<?>... values ) throws LdapException
     {
         return clonedEntry.remove( attributeType, values );
     }
@@ -247,13 +247,13 @@
     }
 
 
-    public List<EntryAttribute> removeAttributes( AttributeType... attributes )
+    public List<EntryAttribute> removeAttributes( MutableAttributeTypeImpl... attributes )
     {
         return clonedEntry.removeAttributes( attributes );
     }
 
 
-    public List<EntryAttribute> set( AttributeType... attributeTypes )
+    public List<EntryAttribute> set( MutableAttributeTypeImpl... attributeTypes )
     {
         return clonedEntry.set( attributeTypes );
     }
diff --git a/core-api/src/main/java/org/apache/directory/server/core/entry/ServerEntryUtils.java b/core-api/src/main/java/org/apache/directory/server/core/entry/ServerEntryUtils.java
index 476a6a2..3de6e34 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/entry/ServerEntryUtils.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/entry/ServerEntryUtils.java
@@ -47,7 +47,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.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.SchemaUtils;
 import org.apache.directory.shared.util.EmptyEnumeration;
@@ -69,7 +69,7 @@
      */
     public static Attribute toBasicAttribute( EntryAttribute entryAttribute )
     {
-        AttributeType attributeType = entryAttribute.getAttributeType();
+        MutableAttributeTypeImpl attributeType = entryAttribute.getAttributeType();
         
         Attribute attribute = new BasicAttribute( attributeType.getName() );
         
@@ -98,7 +98,7 @@
         
         Attributes attributes = new BasicAttributes( true );
 
-        for ( AttributeType attributeType:entry.getAttributeTypes() )
+        for ( MutableAttributeTypeImpl attributeType:entry.getAttributeTypes() )
         {
             EntryAttribute attr = entry.get( attributeType );
             
@@ -125,7 +125,7 @@
      * 
      * @throws InvalidAttributeIdentifierException If we had an incorrect attribute
      */
-    public static EntryAttribute toServerAttribute( Attribute attribute, AttributeType attributeType ) throws LdapInvalidAttributeTypeException
+    public static EntryAttribute toServerAttribute( Attribute attribute, MutableAttributeTypeImpl attributeType ) throws LdapInvalidAttributeTypeException
     {
         if ( attribute == null )
         {
@@ -219,7 +219,7 @@
                     String id = SchemaUtils.stripOptions( attributeId );
                     Set<String> options = SchemaUtils.getOptions( attributeId );
                     // TODO : handle options.
-                    AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( id );
+                    MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( id );
                     EntryAttribute serverAttribute = ServerEntryUtils.toServerAttribute( attr, attributeType );
                     
                     if ( serverAttribute != null )
@@ -256,7 +256,7 @@
         Entry targetEntry = ( Entry ) entry.clone();
         ModificationOperation modOp = mod.getOperation();
         String id = mod.getAttribute().getId();
-        AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( id );
+        MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( id );
         
         switch ( modOp )
         {
@@ -364,7 +364,7 @@
      * @param attributeType the associated attributeType
      * @return a instance of a ServerModification object
      */
-    private static Modification toServerModification( ModificationItem modificationImpl, AttributeType attributeType ) throws LdapInvalidAttributeTypeException
+    private static Modification toServerModification( ModificationItem modificationImpl, MutableAttributeTypeImpl attributeType ) throws LdapInvalidAttributeTypeException
 
     {
         ModificationOperation operation;
@@ -413,7 +413,7 @@
 
             for ( ModificationItem modificationItem: modificationItems )
             {
-                AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( modificationItem.getAttribute().getID() );
+                MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( modificationItem.getAttribute().getID() );
                 modifications.add( toServerModification( modificationItem, attributeType ) );
             }
         
@@ -433,7 +433,7 @@
      * @param attributeType the associated attributeType
      * @return a instance of a ServerModification object
      */
-    private static Modification toServerModification( Modification modification, AttributeType attributeType ) 
+    private static Modification toServerModification( Modification modification, MutableAttributeTypeImpl attributeType ) 
     {
         Modification serverModification = new DefaultModification( 
             modification.getOperation(),
@@ -474,7 +474,7 @@
                 else
                 {
                     // TODO : handle options
-                    AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( id );
+                    MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( id );
                     modificationsList.add( toServerModification( modification, attributeType ) );
                 }
             }
@@ -522,7 +522,7 @@
                 
                 
                 // TODO : handle options
-                AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( id );
+                MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( id );
                 modificationsList.add( toServerModification( (ModificationItem)modification, attributeType ) );
             }
         
@@ -542,7 +542,7 @@
      * @param type the attributeType spec of the Attribute to extract
      * @return the modification item on the attributeType specified
      */
-    public static final Modification getModificationItem( List<Modification> mods, AttributeType type )
+    public static final Modification getModificationItem( List<Modification> mods, MutableAttributeTypeImpl type )
     {
         for ( Modification modification:mods )
         {
@@ -565,7 +565,7 @@
      * @param type the attributeType spec of the Attribute to extract
      * @return the extract Attribute or null if no such attribute exists
      */
-    public static EntryAttribute getAttribute( List<Modification> mods, AttributeType type )
+    public static EntryAttribute getAttribute( List<Modification> mods, MutableAttributeTypeImpl type )
     {
         Modification mod = getModificationItem( mods, type );
         
diff --git a/core-api/src/main/java/org/apache/directory/server/core/entry/TestServerEntryUtils.java b/core-api/src/main/java/org/apache/directory/server/core/entry/TestServerEntryUtils.java
index 22525c4..986cbf1 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/entry/TestServerEntryUtils.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/entry/TestServerEntryUtils.java
@@ -23,7 +23,7 @@
 import org.apache.directory.shared.ldap.model.entry.StringValue;
 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.AbstractLdapComparator;
 import org.apache.directory.shared.ldap.model.schema.LdapSyntax;
 import org.apache.directory.shared.ldap.model.schema.MatchingRule;
@@ -45,7 +45,7 @@
     /**
      * A local Syntax class for tests
      */
-    static class AT extends AttributeType
+    static class AT extends MutableAttributeTypeImpl
     {
         private static final long serialVersionUID = 0L;
 
@@ -97,9 +97,9 @@
     }
 
     /* no protection*/ 
-    static AttributeType getCaseIgnoringAttributeNoNumbersType()
+    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" )
@@ -195,9 +195,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 );
 
@@ -241,9 +241,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/core-api/src/main/java/org/apache/directory/server/core/filtering/BaseEntryFilteringCursor.java b/core-api/src/main/java/org/apache/directory/server/core/filtering/BaseEntryFilteringCursor.java
index d62652f..7062828 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/filtering/BaseEntryFilteringCursor.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/filtering/BaseEntryFilteringCursor.java
@@ -35,7 +35,7 @@
 import org.apache.directory.shared.ldap.model.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.exception.OperationAbandonedException;
-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.UsageEnum;
 import org.slf4j.Logger;
@@ -383,7 +383,7 @@
 
         if ( getOperationContext().isNoAttributes() )
         {
-            for ( AttributeType at : entry.getOriginalEntry().getAttributeTypes() )
+            for ( MutableAttributeTypeImpl at : entry.getOriginalEntry().getAttributeTypes() )
             {
                 entry.remove( entry.get( at ) );
             }
@@ -394,7 +394,7 @@
         
         if ( getOperationContext().isAllUserAttributes() )
         {
-            for ( AttributeType at : entry.getOriginalEntry().getAttributeTypes() )
+            for ( MutableAttributeTypeImpl at : entry.getOriginalEntry().getAttributeTypes() )
             {
                 boolean isNotRequested = true;
                 
@@ -424,7 +424,7 @@
         
         if ( getOperationContext().isAllOperationalAttributes() )
         {
-            for ( AttributeType at : entry.getOriginalEntry().getAttributeTypes() )
+            for ( MutableAttributeTypeImpl at : entry.getOriginalEntry().getAttributeTypes() )
             {
                 boolean isNotRequested = true;
                 
@@ -454,7 +454,7 @@
         
         if ( getOperationContext().getReturningAttributes() != null )
         {
-            for ( AttributeType at : entry.getOriginalEntry().getAttributeTypes() )
+            for ( MutableAttributeTypeImpl at : entry.getOriginalEntry().getAttributeTypes() )
             {
                 boolean isNotRequested = true;
                 
diff --git a/core-api/src/main/java/org/apache/directory/server/core/interceptor/BaseInterceptor.java b/core-api/src/main/java/org/apache/directory/server/core/interceptor/BaseInterceptor.java
index 1b38df0..54be549 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/interceptor/BaseInterceptor.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/interceptor/BaseInterceptor.java
@@ -47,7 +47,7 @@
 import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 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;
 
 
@@ -67,52 +67,52 @@
     protected SchemaManager schemaManager;
 
     /** set of operational attribute types used for representing the password policy state of a user entry */
-    protected static final Set<AttributeType> PWD_POLICY_STATE_ATTRIBUTE_TYPES = new HashSet<AttributeType>();
+    protected static final Set<MutableAttributeTypeImpl> PWD_POLICY_STATE_ATTRIBUTE_TYPES = new HashSet<MutableAttributeTypeImpl>();
 
     /** The AccessControlSubentries AttributeType */
-    protected static AttributeType ACCESS_CONTROL_SUBENTRIES_AT;
+    protected static MutableAttributeTypeImpl ACCESS_CONTROL_SUBENTRIES_AT;
 
     /** A reference to the AdministrativeRole AT */
-    protected static AttributeType ADMINISTRATIVE_ROLE_AT;
+    protected static MutableAttributeTypeImpl ADMINISTRATIVE_ROLE_AT;
 
     /** The CollectiveAttributeSubentries AttributeType */
-    protected static AttributeType COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT;
+    protected static MutableAttributeTypeImpl COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT;
 
     /** The CollectiveExclusions AttributeType */
-    protected static AttributeType COLLECTIVE_EXCLUSIONS_AT;
+    protected static MutableAttributeTypeImpl COLLECTIVE_EXCLUSIONS_AT;
 
     /** A storage for the entryACI attributeType */
-    protected static AttributeType ENTRY_ACI_AT;
+    protected static MutableAttributeTypeImpl ENTRY_ACI_AT;
 
     /** A reference to the EntryCSN AT */
-    protected static AttributeType ENTRY_CSN_AT;
+    protected static MutableAttributeTypeImpl ENTRY_CSN_AT;
 
     /** A reference to the EntryUUID AT */
-    protected static AttributeType ENTRY_UUID_AT;
+    protected static MutableAttributeTypeImpl ENTRY_UUID_AT;
 
     /** A reference to the ModifiersName AT */
-    protected static AttributeType MODIFIERS_NAME_AT;
+    protected static MutableAttributeTypeImpl MODIFIERS_NAME_AT;
 
     /** A reference to the ModifyTimestamp AT */
-    protected static AttributeType MODIFY_TIMESTAMP_AT;
+    protected static MutableAttributeTypeImpl MODIFY_TIMESTAMP_AT;
 
     /** The ObjectClass AttributeType */
-    protected static AttributeType OBJECT_CLASS_AT;
+    protected static MutableAttributeTypeImpl OBJECT_CLASS_AT;
 
     /** the subentry ACI attribute type */
-    protected static AttributeType SUBENTRY_ACI_AT;
+    protected static MutableAttributeTypeImpl SUBENTRY_ACI_AT;
 
     /** A reference to the AccessControlSubentries AT */
-    protected static AttributeType SUBSCHEMA_SUBENTRY_AT;
+    protected static MutableAttributeTypeImpl SUBSCHEMA_SUBENTRY_AT;
 
     /** A reference to the SubtreeSpecification AT */
-    protected static AttributeType SUBTREE_SPECIFICATION_AT;
+    protected static MutableAttributeTypeImpl SUBTREE_SPECIFICATION_AT;
 
     /** A reference to the TriggerExecutionSubentries AT */
-    protected static AttributeType TRIGGER_EXECUTION_SUBENTRIES_AT;
+    protected static MutableAttributeTypeImpl TRIGGER_EXECUTION_SUBENTRIES_AT;
 
     /** A starage for the uniqueMember attributeType */
-    protected static AttributeType UNIQUE_MEMBER_AT;
+    protected static MutableAttributeTypeImpl UNIQUE_MEMBER_AT;
 
 
 
diff --git a/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/CompareOperationContext.java b/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/CompareOperationContext.java
index 8c343ce..763d126 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/CompareOperationContext.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/CompareOperationContext.java
@@ -27,7 +27,7 @@
 import org.apache.directory.shared.ldap.model.message.MessageTypeEnum;
 import org.apache.directory.shared.ldap.model.entry.BinaryValue;
 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.util.Strings;
 
 
@@ -43,7 +43,7 @@
     private String oid;
     
     /** The associated AttributeType */
-    private AttributeType attributeType;
+    private MutableAttributeTypeImpl attributeType;
 
     /** The value to be compared */
     private Value<?> value;
@@ -167,7 +167,7 @@
     /**
      *  @return The AttributeType for the compared value
      */
-    public AttributeType getAttributeType()
+    public MutableAttributeTypeImpl getAttributeType()
     {
         return attributeType;
     }
@@ -178,7 +178,7 @@
      * 
      * @param attributeType The AttributeType
      */
-    public void setAttributeType( AttributeType attributeType )
+    public void setAttributeType( MutableAttributeTypeImpl attributeType )
     {
         this.attributeType = attributeType;
     }
diff --git a/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/SearchingOperationContext.java b/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/SearchingOperationContext.java
index 9ca0480..a99953e 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/SearchingOperationContext.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/interceptor/context/SearchingOperationContext.java
@@ -36,7 +36,7 @@
 import org.apache.directory.shared.ldap.model.filter.SearchScope;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.AttributeTypeOptions;
 import org.apache.directory.shared.ldap.model.schema.SchemaUtils;
 import org.apache.directory.shared.util.StringConstants;
@@ -158,7 +158,7 @@
                     String id = SchemaUtils.stripOptions( returnAttribute );
                     Set<String> options = SchemaUtils.getOptions( returnAttribute );
                     
-                    AttributeType attributeType = session.getDirectoryService()
+                    MutableAttributeTypeImpl attributeType = session.getDirectoryService()
                         .getSchemaManager().lookupAttributeTypeRegistry( id );
                     AttributeTypeOptions attrOptions = new AttributeTypeOptions( attributeType, options );
                    
diff --git a/core-api/src/main/java/org/apache/directory/server/core/schema/DescriptionParsers.java b/core-api/src/main/java/org/apache/directory/server/core/schema/DescriptionParsers.java
index 163c4b1..7a2f142 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/schema/DescriptionParsers.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/schema/DescriptionParsers.java
@@ -32,7 +32,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.DITContentRule;
 import org.apache.directory.shared.ldap.model.schema.DITStructureRule;
 import org.apache.directory.shared.ldap.model.schema.MutableLdapSyntax;
@@ -74,7 +74,7 @@
     private static final SyntaxCheckerDescription[]  EMPTY_SYNTAX_CHECKERS     = new SyntaxCheckerDescription[0];
     private static final MutableLdapSyntaxImpl[]                EMPTY_SYNTAXES            = new MutableLdapSyntaxImpl[0];
     private static final MutableMatchingRuleImpl[]              EMPTY_MATCHING_RULES      = new MutableMatchingRuleImpl[0];
-    private static final AttributeType[]             EMPTY_ATTRIBUTE_TYPES     = new AttributeType[0];
+    private static final MutableAttributeTypeImpl[]             EMPTY_ATTRIBUTE_TYPES     = new MutableAttributeTypeImpl[0];
     private static final ObjectClass[]               EMPTY_OBJECT_CLASSES      = new ObjectClass[0];
     private static final MatchingRuleUse[]           EMPTY_MATCHING_RULE_USES  = new MatchingRuleUse[0];
     private static final DITStructureRule[]          EMPTY_DIT_STRUCTURE_RULES = new DITStructureRule[0];
@@ -214,20 +214,20 @@
      * @return the set of attributeType objects for the descriptions 
      * @throws LdapException if there are problems parsing the descriptions
      */
-    public AttributeType[] parseAttributeTypes( EntryAttribute attr ) throws LdapException
+    public MutableAttributeTypeImpl[] parseAttributeTypes( EntryAttribute attr ) throws LdapException
     {
         if ( ( attr == null ) || ( attr.size() == 0 ) )
         {
             return EMPTY_ATTRIBUTE_TYPES;
         }
 
-        AttributeType[] attributeTypes = new AttributeType[attr.size()];
+        MutableAttributeTypeImpl[] attributeTypes = new MutableAttributeTypeImpl[attr.size()];
 
         int pos = 0;
 
         for ( Value<?> value : attr )
         {
-            AttributeType attributeType = null;
+            MutableAttributeTypeImpl attributeType = null;
 
             try
             {
diff --git a/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java b/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java
index d00867d..447cc11 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java
@@ -26,7 +26,7 @@
 import org.apache.directory.server.core.filtering.EntryFilteringCursor;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 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.MutableMatchingRuleImpl;
 import org.apache.directory.shared.ldap.model.schema.ObjectClass;
 import org.apache.directory.shared.ldap.model.schema.registries.Schema;
@@ -146,7 +146,7 @@
     EntryFilteringCursor listAllNames() throws Exception;
 
 
-    Set<Entry> listAttributeTypeDependents( AttributeType at ) throws Exception;
+    Set<Entry> listAttributeTypeDependents( MutableAttributeTypeImpl at ) throws Exception;
 
 
     /**
diff --git a/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDaoImpl.java b/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDaoImpl.java
index 271a067..daa04a0 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDaoImpl.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDaoImpl.java
@@ -57,7 +57,7 @@
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.AttributeTypeOptions;
 import org.apache.directory.shared.ldap.model.schema.MutableMatchingRuleImpl;
 import org.apache.directory.shared.ldap.model.schema.ObjectClass;
@@ -100,23 +100,23 @@
     private final SchemaEntityFactory factory;
     private final SchemaManager schemaManager;
 
-    private final AttributeType M_NAME_AT;
-    private final AttributeType M_OID_AT;
-    private final AttributeType OBJECT_CLASS_AT;
-    private final AttributeType M_SYNTAX_AT;
-    private final AttributeType M_ORDERING_AT;
-    private final AttributeType M_SUBSTRING_AT;
-    private final AttributeType M_EQUALITY_AT;
-    private final AttributeType M_SUP_ATTRIBUTE_TYPE_AT;
-    private final AttributeType M_MUST_AT;
-    private final AttributeType M_MAY_AT;
-    private final AttributeType M_AUX_AT;
-    private final AttributeType M_OC_AT;
-    private final AttributeType M_SUP_OBJECT_CLASS_AT;
-    private final AttributeType M_DEPENDENCIES_AT;
+    private final MutableAttributeTypeImpl M_NAME_AT;
+    private final MutableAttributeTypeImpl M_OID_AT;
+    private final MutableAttributeTypeImpl OBJECT_CLASS_AT;
+    private final MutableAttributeTypeImpl M_SYNTAX_AT;
+    private final MutableAttributeTypeImpl M_ORDERING_AT;
+    private final MutableAttributeTypeImpl M_SUBSTRING_AT;
+    private final MutableAttributeTypeImpl M_EQUALITY_AT;
+    private final MutableAttributeTypeImpl M_SUP_ATTRIBUTE_TYPE_AT;
+    private final MutableAttributeTypeImpl M_MUST_AT;
+    private final MutableAttributeTypeImpl M_MAY_AT;
+    private final MutableAttributeTypeImpl M_AUX_AT;
+    private final MutableAttributeTypeImpl M_OC_AT;
+    private final MutableAttributeTypeImpl M_SUP_OBJECT_CLASS_AT;
+    private final MutableAttributeTypeImpl M_DEPENDENCIES_AT;
 
     private final Set<AttributeTypeOptions> schemaAttributesToReturn = new HashSet<AttributeTypeOptions>();
-    private final AttributeType disabledAttributeType;
+    private final MutableAttributeTypeImpl disabledAttributeType;
 
 
     /**
@@ -729,7 +729,7 @@
     /* (non-Javadoc)
      * @see org.apache.directory.server.core.schema.SchemaPartitionDao#listAttributeTypeDependents(org.apache.directory.shared.ldap.schema.AttributeType)
      */
-    public Set<Entry> listAttributeTypeDependents( AttributeType at ) throws Exception
+    public Set<Entry> listAttributeTypeDependents( MutableAttributeTypeImpl at ) throws Exception
     {
         /*
          * Right now the following inefficient filter is being used:
diff --git a/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AbstractRegistrySynchronizer.java b/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AbstractRegistrySynchronizer.java
index e055284..a4a1825 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AbstractRegistrySynchronizer.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AbstractRegistrySynchronizer.java
@@ -41,7 +41,7 @@
 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.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.schema.MutableSchemaObject;
 import org.apache.directory.shared.ldap.model.schema.SchemaObject;
@@ -66,7 +66,7 @@
     protected final SchemaManager schemaManager;
 
     /** The m-oid AttributeType */
-    protected final AttributeType m_oidAT;
+    protected final MutableAttributeTypeImpl m_oidAT;
 
     /** The Schema objetc factory */
     protected final SchemaEntityFactory factory;
diff --git a/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java b/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java
index ba8c3d4..3460924 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/AttributeTypeSynchronizer.java
@@ -30,7 +30,7 @@
 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.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.schema.registries.Schema;
 import org.apache.directory.shared.util.Strings;
@@ -79,7 +79,7 @@
         // Build the new AttributeType from the given entry
         String schemaName = getSchemaName( dn );
 
-        AttributeType attributeType = factory.getAttributeType( schemaManager, entry, schemaManager.getRegistries(),
+        MutableAttributeTypeImpl attributeType = factory.getAttributeType( schemaManager, entry, schemaManager.getRegistries(),
             schemaName );
 
         // At this point, the constructed AttributeType has not been checked against the 
@@ -118,7 +118,7 @@
         Entry entry = modifyContext.getEntry();
         String schemaName = getSchemaName( name );
         String oid = getOid( entry );
-        AttributeType at = factory.getAttributeType( schemaManager, targetEntry, schemaManager.getRegistries(),
+        MutableAttributeTypeImpl at = factory.getAttributeType( schemaManager, targetEntry, schemaManager.getRegistries(),
             schemaName );
 
         if ( isSchemaEnabled( schemaName ) )
@@ -164,7 +164,7 @@
         }
         
         // Test that the Oid exists
-        AttributeType attributeType = ( AttributeType ) checkOidExists( entry );
+        MutableAttributeTypeImpl attributeType = ( MutableAttributeTypeImpl ) checkOidExists( entry );
 
         if ( schema.isEnabled() && attributeType.isEnabled() )
         {
@@ -194,7 +194,7 @@
     public void rename( Entry entry, Rdn newRdn, boolean cascade ) throws LdapException
     {
         String schemaName = getSchemaName( entry.getDn() );
-        AttributeType oldAt = factory
+        MutableAttributeTypeImpl oldAt = factory
             .getAttributeType( schemaManager, entry, schemaManager.getRegistries(), schemaName );
 
         // Inject the new OID
@@ -208,7 +208,7 @@
         newDn = newDn.add( newRdn );
         targetEntry.setDn( newDn );
 
-        AttributeType at = factory.getAttributeType( schemaManager, targetEntry, schemaManager.getRegistries(),
+        MutableAttributeTypeImpl at = factory.getAttributeType( schemaManager, targetEntry, schemaManager.getRegistries(),
             schemaName );
 
         if ( isSchemaEnabled( schemaName ) )
@@ -238,13 +238,13 @@
         checkParent( newParentName, schemaManager, SchemaConstants.ATTRIBUTE_TYPE );
         String oldSchemaName = getSchemaName( oriChildName );
         String newSchemaName = getSchemaName( newParentName );
-        AttributeType oldAt = factory.getAttributeType( schemaManager, entry, schemaManager.getRegistries(),
+        MutableAttributeTypeImpl oldAt = factory.getAttributeType( schemaManager, entry, schemaManager.getRegistries(),
             oldSchemaName );
         Entry targetEntry = ( Entry ) entry.clone();
         String newOid = newRn.getNormValue().getString();
         targetEntry.put( MetaSchemaConstants.M_OID_AT, newOid );
         checkOidIsUnique( newOid );
-        AttributeType newAt = factory.getAttributeType( schemaManager, targetEntry, schemaManager.getRegistries(),
+        MutableAttributeTypeImpl newAt = factory.getAttributeType( schemaManager, targetEntry, schemaManager.getRegistries(),
             newSchemaName );
 
         if ( !isSchemaLoaded( oldSchemaName ) )
@@ -289,9 +289,9 @@
         checkParent( newParentName, schemaManager, SchemaConstants.ATTRIBUTE_TYPE );
         String oldSchemaName = getSchemaName( oriChildName );
         String newSchemaName = getSchemaName( newParentName );
-        AttributeType oldAt = factory.getAttributeType( schemaManager, entry, schemaManager.getRegistries(),
+        MutableAttributeTypeImpl oldAt = factory.getAttributeType( schemaManager, entry, schemaManager.getRegistries(),
             oldSchemaName );
-        AttributeType newAt = factory.getAttributeType( schemaManager, entry, schemaManager.getRegistries(),
+        MutableAttributeTypeImpl newAt = factory.getAttributeType( schemaManager, entry, schemaManager.getRegistries(),
             newSchemaName );
 
         if ( !isSchemaLoaded( oldSchemaName ) )
diff --git a/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/RegistrySynchronizerAdaptor.java b/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/RegistrySynchronizerAdaptor.java
index ab7c340..d77295e 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/RegistrySynchronizerAdaptor.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/RegistrySynchronizerAdaptor.java
@@ -42,7 +42,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapInvalidDnException;
 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.ObjectClass;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.registries.ObjectClassRegistry;
@@ -97,7 +97,7 @@
     };
 
     private final Registries registries;
-    private final AttributeType objectClassAT;
+    private final MutableAttributeTypeImpl objectClassAT;
     private final RegistrySynchronizer[] registrySynchronizers = new RegistrySynchronizer[11];
     private final Map<String, RegistrySynchronizer> objectClass2synchronizerMap = new HashMap<String, RegistrySynchronizer>();
     private final SchemaSynchronizer schemaSynchronizer;
diff --git a/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SchemaSynchronizer.java b/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SchemaSynchronizer.java
index 7c664b7..4a468c0 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SchemaSynchronizer.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SchemaSynchronizer.java
@@ -42,7 +42,7 @@
 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.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.schema.registries.Registries;
 import org.apache.directory.shared.ldap.model.schema.registries.Schema;
@@ -75,13 +75,13 @@
     private final Registries registries;
 
     /** The m-disable AttributeType */
-    private final AttributeType disabledAT;
+    private final MutableAttributeTypeImpl disabledAT;
 
     /** The CN attributeType */
-    private final AttributeType cnAT;
+    private final MutableAttributeTypeImpl cnAT;
 
     /** The m-dependencies AttributeType */
-    private final AttributeType dependenciesAT;
+    private final MutableAttributeTypeImpl dependenciesAT;
 
     /** A static Dn referencing ou=schema */
     private final Dn ouSchemaDn;
diff --git a/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SyntaxSynchronizer.java b/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SyntaxSynchronizer.java
index 51ff89f..3d9b8d8 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SyntaxSynchronizer.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/schema/registries/synchronizers/SyntaxSynchronizer.java
@@ -34,7 +34,7 @@
 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.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.MatchingRule;
 import org.apache.directory.shared.ldap.model.schema.MutableLdapSyntax;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
@@ -147,7 +147,7 @@
     {
         List<SchemaObject> dependees = new ArrayList<SchemaObject>();
 
-        for ( AttributeType attributeType : schemaManager.getAttributeTypeRegistry() )
+        for ( MutableAttributeTypeImpl attributeType : schemaManager.getAttributeTypeRegistry() )
         {
             if ( oid.equals( attributeType.getSyntax().getOid() ) )
             {
diff --git a/core-api/src/test/java/org/apache/directory/server/core/MockCoreSession.java b/core-api/src/test/java/org/apache/directory/server/core/MockCoreSession.java
index be4ad4e..eb615f9 100644
--- a/core-api/src/test/java/org/apache/directory/server/core/MockCoreSession.java
+++ b/core-api/src/test/java/org/apache/directory/server/core/MockCoreSession.java
@@ -67,7 +67,7 @@
 import org.apache.directory.shared.ldap.model.message.UnbindRequest;
 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.AttributeTypeOptions;
 import org.apache.directory.shared.util.Strings;
 
@@ -190,7 +190,7 @@
     {
         Value<?> val = null;
 
-        AttributeType attributeType = directoryService.getSchemaManager().lookupAttributeTypeRegistry( oid );
+        MutableAttributeTypeImpl attributeType = directoryService.getSchemaManager().lookupAttributeTypeRegistry( oid );
 
         // make sure we add the request controls to operation
         if ( attributeType.getSyntax().isHumanReadable() )
diff --git a/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryAttributeTest.java b/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryAttributeTest.java
index b69dbe4..9b08851 100644
--- a/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryAttributeTest.java
+++ b/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryAttributeTest.java
@@ -51,7 +51,7 @@
 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.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.SchemaManager;
 import org.apache.directory.shared.ldap.schemaextractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schemaextractor.impl.DefaultSchemaLdifExtractor;
@@ -76,15 +76,15 @@
 {
     private static LdifSchemaLoader loader;
 
-    private static AttributeType atCN;
-    private static AttributeType atDC;
-    private static AttributeType atSN;
+    private static MutableAttributeTypeImpl atCN;
+    private static MutableAttributeTypeImpl atDC;
+    private static MutableAttributeTypeImpl atSN;
 
     // A SINGLE-VALUE attribute
-    private static AttributeType atC;
+    private static MutableAttributeTypeImpl atC;
 
     // A Binary attribute
-    private static AttributeType atPwd;
+    private static MutableAttributeTypeImpl atPwd;
 
     private static final Value<String> NULL_STRING_VALUE = new StringValue( ( String ) null );
     private static final Value<byte[]> NULL_BINARY_VALUE = new BinaryValue( ( byte[] ) null );
@@ -190,7 +190,7 @@
     /**
      * Deserialize a DefaultEntryAttribute
      */
-    private DefaultEntryAttribute deserializeValue( ByteArrayOutputStream out, AttributeType at ) throws IOException,
+    private DefaultEntryAttribute deserializeValue( ByteArrayOutputStream out, MutableAttributeTypeImpl at ) throws IOException,
         ClassNotFoundException
     {
         ObjectInputStream oIn = null;
@@ -229,7 +229,7 @@
     @Test
     public void testAddOneValue() throws Exception
     {
-        AttributeType at = TestServerEntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl at = TestServerEntryUtils.getIA5StringAttributeType();
 
         DefaultEntryAttribute attr = new DefaultEntryAttribute( at );
 
@@ -279,7 +279,7 @@
     @Test
     public void testAddTwoValue() throws Exception
     {
-        AttributeType at = TestServerEntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl at = TestServerEntryUtils.getIA5StringAttributeType();
 
         DefaultEntryAttribute attr = new DefaultEntryAttribute( at );
 
@@ -314,7 +314,7 @@
     @Test
     public void testAddNullValue() throws Exception
     {
-        AttributeType at = TestServerEntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl at = TestServerEntryUtils.getIA5StringAttributeType();
 
         DefaultEntryAttribute attr = new DefaultEntryAttribute( at );
 
@@ -335,7 +335,7 @@
     @Test
     public void testGetAttribute() throws Exception
     {
-        AttributeType at = TestServerEntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl at = TestServerEntryUtils.getIA5StringAttributeType();
 
         DefaultEntryAttribute attr = new DefaultEntryAttribute( at );
 
@@ -357,7 +357,7 @@
     @Test
     public void testContains() throws Exception
     {
-        AttributeType at = TestServerEntryUtils.getIA5StringAttributeType();
+        MutableAttributeTypeImpl at = TestServerEntryUtils.getIA5StringAttributeType();
 
         DefaultEntryAttribute attr = new DefaultEntryAttribute( at );
 
diff --git a/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryTest.java b/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryTest.java
index 174d47d..c3e96b3 100644
--- a/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryTest.java
+++ b/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryTest.java
@@ -52,7 +52,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.shared.ldap.model.exception.LdapNoSuchAttributeException;
 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.SchemaManager;
 import org.apache.directory.shared.ldap.schemaextractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schemaextractor.impl.DefaultSchemaLdifExtractor;
@@ -87,16 +87,16 @@
     private static LdifSchemaLoader loader;
     private static SchemaManager schemaManager;
 
-    private static AttributeType atObjectClass;
-    private static AttributeType atCN;
-    private static AttributeType atDC;
-    private static AttributeType atSN;
-    private static AttributeType atC;
-    private static AttributeType atL;
-    private static AttributeType atOC;
+    private static MutableAttributeTypeImpl atObjectClass;
+    private static MutableAttributeTypeImpl atCN;
+    private static MutableAttributeTypeImpl atDC;
+    private static MutableAttributeTypeImpl atSN;
+    private static MutableAttributeTypeImpl atC;
+    private static MutableAttributeTypeImpl atL;
+    private static MutableAttributeTypeImpl atOC;
 
     // A Binary attribute
-    private static AttributeType atPwd;
+    private static MutableAttributeTypeImpl atPwd;
 
     private static Dn EXAMPLE_DN;
 
@@ -490,7 +490,7 @@
 
         try
         {
-            entry.add( ( AttributeType ) null, strValue1 );
+            entry.add( ( MutableAttributeTypeImpl ) null, strValue1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -606,7 +606,7 @@
 
         try
         {
-            entry.add( "cn", ( AttributeType ) null, strValue1 );
+            entry.add( "cn", ( MutableAttributeTypeImpl ) null, strValue1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -657,7 +657,7 @@
         // Test that we can't inject a null AT
         try
         {
-            entry.add( ( AttributeType ) null, "test" );
+            entry.add( ( MutableAttributeTypeImpl ) null, "test" );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -715,8 +715,8 @@
         Dn dn = new Dn( schemaManager, "cn=test" );
         DefaultEntry entry = new DefaultEntry( schemaManager, dn );
 
-        AttributeType atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
-        AttributeType atJpegPhoto = schemaManager.lookupAttributeTypeRegistry( "jpegPhoto" );
+        MutableAttributeTypeImpl atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
+        MutableAttributeTypeImpl atJpegPhoto = schemaManager.lookupAttributeTypeRegistry( "jpegPhoto" );
 
         byte[] test1 = Strings.getBytesUtf8("test1");
         byte[] test2 = Strings.getBytesUtf8("test2");
@@ -725,7 +725,7 @@
         // Test that we can't inject a null AT
         try
         {
-            entry.add( ( AttributeType ) null, test1 );
+            entry.add( ( MutableAttributeTypeImpl ) null, test1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -796,7 +796,7 @@
         Dn dn = new Dn( schemaManager, "cn=test" );
         DefaultEntry entry = new DefaultEntry( schemaManager, dn );
 
-        AttributeType atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
+        MutableAttributeTypeImpl atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
 
         byte[] b1 = Strings.getBytesUtf8("test1");
         byte[] b2 = Strings.getBytesUtf8("test2");
@@ -813,7 +813,7 @@
         // Test that we can't inject a null AT
         try
         {
-            entry.add( ( AttributeType ) null, test1 );
+            entry.add( ( MutableAttributeTypeImpl ) null, test1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -966,7 +966,7 @@
         Dn dn = new Dn( schemaManager, "cn=test" );
         DefaultEntry entry = new DefaultEntry( schemaManager, dn );
 
-        AttributeType atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
+        MutableAttributeTypeImpl atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
 
         byte[] test1 = Strings.getBytesUtf8("test1");
         byte[] test2 = Strings.getBytesUtf8("test2");
@@ -1024,7 +1024,7 @@
         Dn dn = new Dn( schemaManager, "cn=test" );
         Entry entry = new DefaultEntry( schemaManager, dn );
 
-        AttributeType atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
+        MutableAttributeTypeImpl atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
 
         byte[] b1 = Strings.getBytesUtf8("test1");
         byte[] b2 = Strings.getBytesUtf8("test2");
@@ -1186,7 +1186,7 @@
         Dn dn = new Dn( schemaManager, "cn=test" );
         DefaultEntry entry = new DefaultEntry( schemaManager, dn );
 
-        AttributeType atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
+        MutableAttributeTypeImpl atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
 
         byte[] test1 = Strings.getBytesUtf8("test1");
         byte[] test2 = Strings.getBytesUtf8("test2");
@@ -1244,7 +1244,7 @@
         Dn dn = new Dn( schemaManager, "cn=test" );
         Entry entry = new DefaultEntry( schemaManager, dn );
 
-        AttributeType atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
+        MutableAttributeTypeImpl atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
 
         byte[] b1 = Strings.getBytesUtf8("test1");
         byte[] b2 = Strings.getBytesUtf8("test2");
@@ -1416,7 +1416,7 @@
     {
         Entry entry = new DefaultEntry( schemaManager, EXAMPLE_DN );
 
-        assertFalse( entry.contains( ( AttributeType ) null, BYTES1 ) );
+        assertFalse( entry.contains( ( MutableAttributeTypeImpl ) null, BYTES1 ) );
         assertFalse( entry.contains( atPwd, BYTES1 ) );
 
         EntryAttribute attrPWD = new DefaultEntryAttribute( atPwd, BYTES1, BYTES2 );
@@ -1439,7 +1439,7 @@
     {
         Entry entry = new DefaultEntry( schemaManager, EXAMPLE_DN );
 
-        assertFalse( entry.contains( ( AttributeType ) null, "test" ) );
+        assertFalse( entry.contains( ( MutableAttributeTypeImpl ) null, "test" ) );
         assertFalse( entry.contains( atCN, "test" ) );
 
         EntryAttribute attrCN = new DefaultEntryAttribute( atCN, "test1", "test2" );
@@ -1727,7 +1727,7 @@
 
         entry.add( attrOC, attrCN, attrSN, attrPWD );
 
-        Set<AttributeType> attributeTypes = entry.getAttributeTypes();
+        Set<MutableAttributeTypeImpl> attributeTypes = entry.getAttributeTypes();
 
         assertEquals( 4, attributeTypes.size() );
         assertTrue( attributeTypes.contains( atOC ) );
@@ -1747,7 +1747,7 @@
         Entry entry = new DefaultEntry( schemaManager, EXAMPLE_DN );
 
         assertNull( entry.get( atCN ) );
-        assertNull( entry.get( ( AttributeType ) null ) );
+        assertNull( entry.get( ( MutableAttributeTypeImpl ) null ) );
 
         EntryAttribute attrOC = new DefaultEntryAttribute( atOC, "top", "person" );
         EntryAttribute attrCN = new DefaultEntryAttribute( atCN, "test1", "test2" );
@@ -1947,7 +1947,7 @@
 
         assertTrue( iterator.hasNext() );
 
-        Set<AttributeType> expectedIds = new HashSet<AttributeType>();
+        Set<MutableAttributeTypeImpl> expectedIds = new HashSet<MutableAttributeTypeImpl>();
         expectedIds.add( atOC );
         expectedIds.add( atCN );
         expectedIds.add( atSN );
@@ -1957,7 +1957,7 @@
         {
             EntryAttribute attribute = iterator.next();
 
-            AttributeType attributeType = attribute.getAttributeType();
+            MutableAttributeTypeImpl attributeType = attribute.getAttributeType();
             assertTrue( expectedIds.contains( attributeType ) );
             expectedIds.remove( attributeType );
         }
@@ -1979,7 +1979,7 @@
 
         try
         {
-            entry.put( ( AttributeType ) null, BYTES1 );
+            entry.put( ( MutableAttributeTypeImpl ) null, BYTES1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2021,7 +2021,7 @@
 
         try
         {
-            entry.put( ( AttributeType ) null, "test" );
+            entry.put( ( MutableAttributeTypeImpl ) null, "test" );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2069,7 +2069,7 @@
 
         try
         {
-            entry.put( ( AttributeType ) null, strValue1 );
+            entry.put( ( MutableAttributeTypeImpl ) null, strValue1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2160,7 +2160,7 @@
 
         try
         {
-            entry.put( ( String ) null, ( AttributeType ) null, BYTES1 );
+            entry.put( ( String ) null, ( MutableAttributeTypeImpl ) null, BYTES1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2170,7 +2170,7 @@
 
         try
         {
-            entry.put( " ", ( AttributeType ) null, BYTES1 );
+            entry.put( " ", ( MutableAttributeTypeImpl ) null, BYTES1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2180,7 +2180,7 @@
 
         try
         {
-            entry.put( "badAttr", ( AttributeType ) null, BYTES1 );
+            entry.put( "badAttr", ( MutableAttributeTypeImpl ) null, BYTES1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2235,7 +2235,7 @@
 
         try
         {
-            entry.put( ( String ) null, ( AttributeType ) null, "test" );
+            entry.put( ( String ) null, ( MutableAttributeTypeImpl ) null, "test" );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2245,7 +2245,7 @@
 
         try
         {
-            entry.put( " ", ( AttributeType ) null, "test" );
+            entry.put( " ", ( MutableAttributeTypeImpl ) null, "test" );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2255,7 +2255,7 @@
 
         try
         {
-            entry.put( "badAttr", ( AttributeType ) null, "test" );
+            entry.put( "badAttr", ( MutableAttributeTypeImpl ) null, "test" );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2316,7 +2316,7 @@
 
         try
         {
-            entry.put( ( String ) null, ( AttributeType ) null, strValue1 );
+            entry.put( ( String ) null, ( MutableAttributeTypeImpl ) null, strValue1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2326,7 +2326,7 @@
 
         try
         {
-            entry.put( " ", ( AttributeType ) null, strValue1 );
+            entry.put( " ", ( MutableAttributeTypeImpl ) null, strValue1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2336,7 +2336,7 @@
 
         try
         {
-            entry.put( "badAttr", ( AttributeType ) null, strValue1 );
+            entry.put( "badAttr", ( MutableAttributeTypeImpl ) null, strValue1 );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2620,8 +2620,8 @@
 
         // Adding some serverAttributes
         //AttributeType atCo = registries.lookupAttributeTypeRegistry( "countryName" );
-        AttributeType atGN = schemaManager.lookupAttributeTypeRegistry( "givenname" );
-        AttributeType atStreet = schemaManager.lookupAttributeTypeRegistry( "2.5.4.9" );
+        MutableAttributeTypeImpl atGN = schemaManager.lookupAttributeTypeRegistry( "givenname" );
+        MutableAttributeTypeImpl atStreet = schemaManager.lookupAttributeTypeRegistry( "2.5.4.9" );
 
         EntryAttribute sa = new DefaultEntryAttribute( atL, "france" );
         entry.put( sa );
@@ -2660,7 +2660,7 @@
         assertEquals( "testStreet", entry.get( atStreet ).get().getString() );
 
         // test an ObjectClass replacement
-        AttributeType OBJECT_CLASS_AT = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OBJECT_CLASS_AT );
+        MutableAttributeTypeImpl OBJECT_CLASS_AT = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OBJECT_CLASS_AT );
         EntryAttribute oc = new DefaultEntryAttribute( "OBJECTCLASS", OBJECT_CLASS_AT, "person", "inetorgperson" );
         List<EntryAttribute> oldOc = entry.put( oc );
 
@@ -2697,7 +2697,7 @@
         // Check that we can't use invalid arguments
         try
         {
-            entry.put( ( AttributeType ) null, ( String ) null );
+            entry.put( ( MutableAttributeTypeImpl ) null, ( String ) null );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2754,7 +2754,7 @@
         // Check that we can't use invalid arguments
         try
         {
-            entry.put( ( AttributeType ) null, ( byte[] ) null );
+            entry.put( ( MutableAttributeTypeImpl ) null, ( byte[] ) null );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2817,7 +2817,7 @@
         // Check that we can't use invalid arguments
         try
         {
-            entry.put( ( AttributeType ) null, ( Value<?> ) null );
+            entry.put( ( MutableAttributeTypeImpl ) null, ( Value<?> ) null );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -2931,7 +2931,7 @@
         Dn dn = new Dn( schemaManager, "cn=test" );
         DefaultEntry entry = new DefaultEntry( schemaManager, dn );
 
-        AttributeType atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
+        MutableAttributeTypeImpl atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
 
         // Adding a null value should be possible
         entry.put( "userPassword", ( byte[] ) null );
@@ -2998,7 +2998,7 @@
         // Test that we get an error when the ID or AT are null
         try
         {
-            entry.put( null, ( AttributeType ) null, ( String ) null );
+            entry.put( null, ( MutableAttributeTypeImpl ) null, ( String ) null );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -3014,7 +3014,7 @@
         assertNull( entry.get( atDC ).get().get() );
 
         // Check that we can use a null AttributeType
-        entry.put( "domaincomponent", ( AttributeType ) null, ( String ) null );
+        entry.put( "domaincomponent", ( MutableAttributeTypeImpl ) null, ( String ) null );
         assertEquals( 1, entry.size() );
         assertEquals( "domaincomponent", entry.get( atDC ).getUpId() );
         assertTrue( entry.containsAttribute( "dc" ) );
@@ -3059,12 +3059,12 @@
         Dn dn = new Dn( schemaManager, "cn=test" );
         DefaultEntry entry = new DefaultEntry( schemaManager, dn );
 
-        AttributeType atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
+        MutableAttributeTypeImpl atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
 
         // Test that we get an error when the ID or AT are null
         try
         {
-            entry.put( null, ( AttributeType ) null, ( String ) null );
+            entry.put( null, ( MutableAttributeTypeImpl ) null, ( String ) null );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -3080,7 +3080,7 @@
         assertNull( entry.get( atPassword ).get().get() );
 
         // Check that we can use a null AttributeType
-        entry.put( "userPassword", ( AttributeType ) null, ( byte[] ) null );
+        entry.put( "userPassword", ( MutableAttributeTypeImpl ) null, ( byte[] ) null );
         assertEquals( 1, entry.size() );
         assertEquals( "userPassword", entry.get( atPassword ).getUpId() );
         assertTrue( entry.containsAttribute( "userPassword" ) );
@@ -3137,7 +3137,7 @@
         // Test that we get an error when the ID or AT are null
         try
         {
-            entry.put( null, ( AttributeType ) null, ( Value<?> ) null );
+            entry.put( null, ( MutableAttributeTypeImpl ) null, ( Value<?> ) null );
             fail();
         }
         catch ( IllegalArgumentException iae )
@@ -3153,7 +3153,7 @@
         assertNull( entry.get( atCN ).get().get() );
 
         // Check that we can use a null AttributeType
-        entry.put( "commonName", ( AttributeType ) null, ( Value<?> ) null );
+        entry.put( "commonName", ( MutableAttributeTypeImpl ) null, ( Value<?> ) null );
 
         assertEquals( 1, entry.size() );
         assertEquals( "commonName", entry.get( atCN ).getUpId() );
@@ -3390,7 +3390,7 @@
         assertFalse( entry.containsAttribute( "cn", "sn" ) );
         assertTrue( entry.containsAttribute( "objectclass", "userpassword" ) );
 
-        List<EntryAttribute> removed = entry.removeAttributes( ( AttributeType ) null );
+        List<EntryAttribute> removed = entry.removeAttributes( ( MutableAttributeTypeImpl ) null );
         assertNull( removed );
 
         removed = entry.removeAttributes( atC );
@@ -3541,7 +3541,7 @@
         Dn dn = new Dn( schemaManager, "cn=test" );
         DefaultEntry entry = new DefaultEntry( schemaManager, dn );
 
-        AttributeType atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
+        MutableAttributeTypeImpl atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
 
         byte[] b1 = Strings.getBytesUtf8("test1");
         byte[] b2 = Strings.getBytesUtf8("test2");
@@ -3571,7 +3571,7 @@
         assertNotNull( entry.get( atCN ) );
         assertNotNull( entry.get( atPassword ) );
 
-        AttributeType OBJECT_CLASS_AT = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OBJECT_CLASS_AT );
+        MutableAttributeTypeImpl OBJECT_CLASS_AT = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OBJECT_CLASS_AT );
 
         entry.removeAttributes( "cN", "UsErPaSsWoRd" );
         assertEquals( 0, entry.size() );
@@ -3604,7 +3604,7 @@
         List<EntryAttribute> result = null;
 
         // First check that this method fails if we pass an empty list of ATs
-        result = entry.set( ( AttributeType ) null );
+        result = entry.set( ( MutableAttributeTypeImpl ) null );
         assertNull( result );
 
         // Now, check what we get when adding one existing AT
@@ -3617,8 +3617,8 @@
         assertEquals( "sn", sa.getAttributeType().getName() );
 
         // Add two AT now
-        AttributeType atGN = schemaManager.lookupAttributeTypeRegistry( "givenname" );
-        AttributeType atStreet = schemaManager.lookupAttributeTypeRegistry( "2.5.4.9" );
+        MutableAttributeTypeImpl atGN = schemaManager.lookupAttributeTypeRegistry( "givenname" );
+        MutableAttributeTypeImpl atStreet = schemaManager.lookupAttributeTypeRegistry( "2.5.4.9" );
         result = entry.set( atL, atC, atGN, atStreet );
 
         assertNull( result );
@@ -3652,14 +3652,14 @@
         assertEquals( "test", entry.get( "sn" ).get().getString() );
 
         // Now add a new SN empty AT : it should replace the existing one.
-        AttributeType atSNEmpty = schemaManager.lookupAttributeTypeRegistry( "sn" );
+        MutableAttributeTypeImpl atSNEmpty = schemaManager.lookupAttributeTypeRegistry( "sn" );
         sa = entry.set( atSNEmpty ).get( 0 );
         assertEquals( "test", sa.get().getString() );
         assertNotNull( entry.get( "sn" ) );
         assertNull( entry.get( "sn" ).get() );
 
         // Last, not least, put an ObjectClass AT
-        AttributeType OBJECT_CLASS_AT = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OBJECT_CLASS_AT );
+        MutableAttributeTypeImpl OBJECT_CLASS_AT = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OBJECT_CLASS_AT );
 
         entry.set( OBJECT_CLASS_AT );
 
@@ -3710,8 +3710,8 @@
         assertEquals( "sn", sa.getId() );
 
         // Add different upIds now
-        AttributeType atGN = schemaManager.lookupAttributeTypeRegistry( "givenname" );
-        AttributeType atStreet = schemaManager.lookupAttributeTypeRegistry( "2.5.4.9" );
+        MutableAttributeTypeImpl atGN = schemaManager.lookupAttributeTypeRegistry( "givenname" );
+        MutableAttributeTypeImpl atStreet = schemaManager.lookupAttributeTypeRegistry( "2.5.4.9" );
 
         entry.set( "L" );
         entry.set( "CountryName" );
@@ -3751,7 +3751,7 @@
         assertEquals( "test", entry.get( "sn" ).get().getString() );
 
         // Now add a new SN empty AT : it should replace the existing one.
-        AttributeType atSNEmpty = schemaManager.lookupAttributeTypeRegistry( "sn" );
+        MutableAttributeTypeImpl atSNEmpty = schemaManager.lookupAttributeTypeRegistry( "sn" );
         sa = entry.set( atSNEmpty ).get( 0 );
         assertEquals( "test", sa.get().getString() );
         assertNotNull( entry.get( "sn" ) );
@@ -3863,7 +3863,7 @@
         Dn dn = new Dn( schemaManager, "cn=test" );
         DefaultEntry entry = new DefaultEntry( schemaManager, dn );
 
-        AttributeType OBJECT_CLASS_AT = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OBJECT_CLASS_AT );
+        MutableAttributeTypeImpl OBJECT_CLASS_AT = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OBJECT_CLASS_AT );
 
         entry.put( "objectClass", OBJECT_CLASS_AT, "top", "person", "inetOrgPerson", "organizationalPerson" );
         entry.put( "cn", schemaManager.lookupAttributeTypeRegistry( "cn" ), "test" );
diff --git a/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareModificationTest.java b/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareModificationTest.java
index 872f7f4..1e1bffb 100644
--- a/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareModificationTest.java
+++ b/core-api/src/test/java/org/apache/directory/server/core/entry/SchemaAwareModificationTest.java
@@ -42,7 +42,7 @@
 import org.apache.directory.shared.ldap.model.entry.ModificationOperation;
 import org.apache.directory.shared.ldap.model.entry.DefaultModification;
 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.schemaextractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schemaextractor.impl.DefaultSchemaLdifExtractor;
@@ -65,10 +65,10 @@
 {
     private static LdifSchemaLoader loader;
     private static SchemaManager schemaManager;
-    private static AttributeType atCN;
+    private static MutableAttributeTypeImpl atCN;
 
     // A SINGLE-VALUE attribute
-    private static AttributeType atC;
+    private static MutableAttributeTypeImpl atC;
 
 
     /**
diff --git a/core-integ/src/test/java/org/apache/directory/server/core/operations/add/PasswordHashingInterceptorTest.java b/core-integ/src/test/java/org/apache/directory/server/core/operations/add/PasswordHashingInterceptorTest.java
index 4587c22..d49bd4b 100644
--- a/core-integ/src/test/java/org/apache/directory/server/core/operations/add/PasswordHashingInterceptorTest.java
+++ b/core-integ/src/test/java/org/apache/directory/server/core/operations/add/PasswordHashingInterceptorTest.java
@@ -44,7 +44,7 @@
 import org.apache.directory.shared.ldap.model.entry.Modification;
 import org.apache.directory.shared.ldap.model.entry.ModificationOperation;
 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.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -89,7 +89,7 @@
         byte[] plainPwd = "newsecret".getBytes();
         Dn dn = new Dn( "cn=test,ou=system" );
 
-        AttributeType pwdAtType = getService().getSchemaManager().lookupAttributeTypeRegistry( SchemaConstants.USER_PASSWORD_AT );
+        MutableAttributeTypeImpl pwdAtType = getService().getSchemaManager().lookupAttributeTypeRegistry( SchemaConstants.USER_PASSWORD_AT );
         
         EntryAttribute pwdAt = new DefaultEntryAttribute( pwdAtType );
         pwdAt.add( plainPwd );
@@ -139,7 +139,7 @@
 
         Dn dn = new Dn( "cn=test,ou=system" );
 
-        AttributeType pwdAtType = getService().getSchemaManager().lookupAttributeTypeRegistry( SchemaConstants.USER_PASSWORD_AT );
+        MutableAttributeTypeImpl pwdAtType = getService().getSchemaManager().lookupAttributeTypeRegistry( SchemaConstants.USER_PASSWORD_AT );
         
         EntryAttribute pwdAt = new DefaultEntryAttribute( pwdAtType );
         pwdAt.add( hashedPwd );
diff --git a/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchIT.java b/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchIT.java
index 61bfc01..f59c4ee 100644
--- a/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchIT.java
+++ b/core-integ/src/test/java/org/apache/directory/server/core/operations/search/SearchIT.java
@@ -69,7 +69,7 @@
 import org.apache.directory.shared.ldap.model.message.Response;
 import org.apache.directory.shared.ldap.model.message.SearchResultEntry;
 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.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -1812,7 +1812,7 @@
         throws Exception
     {
         Value<String> val = new StringValue( filterCsnVal );
-        AttributeType entryCsnAt = getService().getSchemaManager().getAttributeType( SchemaConstants.ENTRY_CSN_AT );
+        MutableAttributeTypeImpl entryCsnAt = getService().getSchemaManager().getAttributeType( SchemaConstants.ENTRY_CSN_AT );
         ExprNode filter = null;
 
         if ( useCaseNum == 1 )
diff --git a/core-integ/src/test/java/org/apache/directory/server/core/schema/MetaAttributeTypeHandlerIT.java b/core-integ/src/test/java/org/apache/directory/server/core/schema/MetaAttributeTypeHandlerIT.java
index 958a19f..c68d281 100644
--- a/core-integ/src/test/java/org/apache/directory/server/core/schema/MetaAttributeTypeHandlerIT.java
+++ b/core-integ/src/test/java/org/apache/directory/server/core/schema/MetaAttributeTypeHandlerIT.java
@@ -44,7 +44,7 @@
 import org.apache.directory.shared.ldap.model.ldif.LdifUtils;
 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.util.JndiUtils;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -337,7 +337,7 @@
     {
         testAddAttributeTypeToEnabledSchema();
 
-        AttributeType at = getService().getSchemaManager().lookupAttributeTypeRegistry( OID );
+        MutableAttributeTypeImpl at = getService().getSchemaManager().lookupAttributeTypeRegistry( OID );
         assertEquals( at.getDescription(), DESCRIPTION0 );
         assertEquals( at.getSyntax().getOid(), SchemaConstants.INTEGER_SYNTAX );
 
@@ -369,7 +369,7 @@
     {
         testAddAttributeTypeToEnabledSchema();
 
-        AttributeType at = getService().getSchemaManager().lookupAttributeTypeRegistry( OID );
+        MutableAttributeTypeImpl at = getService().getSchemaManager().lookupAttributeTypeRegistry( OID );
         assertEquals( at.getDescription(), DESCRIPTION0 );
         assertEquals( at.getSyntax().getOid(), SchemaConstants.INTEGER_SYNTAX );
 
diff --git a/core-integ/src/test/java/org/apache/directory/server/core/schema/SchemaPersistenceIT.java b/core-integ/src/test/java/org/apache/directory/server/core/schema/SchemaPersistenceIT.java
index 037bd15..c68ac14 100644
--- a/core-integ/src/test/java/org/apache/directory/server/core/schema/SchemaPersistenceIT.java
+++ b/core-integ/src/test/java/org/apache/directory/server/core/schema/SchemaPersistenceIT.java
@@ -47,7 +47,7 @@
 import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
 import org.apache.directory.server.core.integ.FrameworkRunner;
 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.parsers.AttributeTypeDescriptionSchemaParser;
 import org.apache.directory.shared.ldap.util.JndiUtils;
 import org.junit.Test;
@@ -212,7 +212,7 @@
 
         Attributes attrs = getSubschemaSubentryAttributes();
         Attribute attrTypes = attrs.get( "attributeTypes" );
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         for ( int ii = 0; ii < attrTypes.size(); ii++ )
         {
diff --git a/core-integ/src/test/java/org/apache/directory/server/core/schema/SubschemaSubentryIT.java b/core-integ/src/test/java/org/apache/directory/server/core/schema/SubschemaSubentryIT.java
index 4794048..34b03dc 100644
--- a/core-integ/src/test/java/org/apache/directory/server/core/schema/SubschemaSubentryIT.java
+++ b/core-integ/src/test/java/org/apache/directory/server/core/schema/SubschemaSubentryIT.java
@@ -69,7 +69,7 @@
 import org.apache.directory.shared.ldap.model.message.ModifyResponse;
 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.MutableLdapSyntax;
 import org.apache.directory.shared.ldap.model.schema.MutableMatchingRule;
 import org.apache.directory.shared.ldap.model.schema.ObjectClass;
@@ -1114,7 +1114,7 @@
 
         Attributes attrs = getSubschemaSubentryAttributes();
         Attribute attrTypes = attrs.get( "attributeTypes" );
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         for ( int ii = 0; ii < attrTypes.size(); ii++ )
         {
@@ -1404,7 +1404,7 @@
 
         Attributes attrs = getSubschemaSubentryAttributes();
         Attribute attrTypes = attrs.get( "attributeTypes" );
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         for ( int ii = 0; ii < attrTypes.size(); ii++ )
         {
@@ -1426,7 +1426,7 @@
 
         Entry serverEntry = ServerEntryUtils.toServerEntry( attrs, Dn.ROOT_DSE, getService().getSchemaManager() );
 
-        AttributeType at = factory.getAttributeType( getService().getSchemaManager(), serverEntry, getService()
+        MutableAttributeTypeImpl at = factory.getAttributeType( getService().getSchemaManager(), serverEntry, getService()
             .getSchemaManager().getRegistries(), "nis" );
         assertEquals( "1.3.6.1.4.1.18060.0.4.0.2.10000", at.getOid() );
         assertEquals( "name", at.getSuperiorOid() );
@@ -1459,7 +1459,7 @@
 
         Attributes attrs = getSubschemaSubentryAttributes();
         Attribute attrTypes = attrs.get( "attributeTypes" );
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         for ( int ii = 0; ii < attrTypes.size(); ii++ )
         {
@@ -1489,7 +1489,7 @@
 
         Entry serverEntry = ServerEntryUtils.toServerEntry( attrs, Dn.ROOT_DSE, getService().getSchemaManager() );
 
-        AttributeType at = factory.getAttributeType( getService().getSchemaManager(), serverEntry, getService()
+        MutableAttributeTypeImpl at = factory.getAttributeType( getService().getSchemaManager(), serverEntry, getService()
             .getSchemaManager().getRegistries(), "nis" );
         assertEquals( "1.3.6.1.4.1.18060.0.4.0.2.10000", at.getOid() );
         assertEquals( "name", at.getSuperiorOid() );
@@ -1522,7 +1522,7 @@
         // Get back the list of attributes, and find the one we just added
         Attributes attrs = getSubschemaSubentryAttributes();
         Attribute attrTypes = attrs.get( "attributeTypes" );
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         for ( int ii = 0; ii < attrTypes.size(); ii++ )
         {
@@ -1553,7 +1553,7 @@
 
         Entry serverEntry = ServerEntryUtils.toServerEntry( attrs, Dn.ROOT_DSE, getService().getSchemaManager() );
 
-        AttributeType at = factory.getAttributeType( getService().getSchemaManager(), serverEntry, getService()
+        MutableAttributeTypeImpl at = factory.getAttributeType( getService().getSchemaManager(), serverEntry, getService()
             .getSchemaManager().getRegistries(), "nis" );
         assertEquals( "1.3.6.1.4.1.18060.0.4.0.2.10000", at.getOid() );
         assertEquals( "name", at.getSuperiorOid() );
diff --git a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/JavaLdapSupport.java b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/JavaLdapSupport.java
index ec61846..d83a85f 100644
--- a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/JavaLdapSupport.java
+++ b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/JavaLdapSupport.java
@@ -35,7 +35,7 @@
 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.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.SchemaManager;
 
 
@@ -197,7 +197,7 @@
 
         // Add all the class names this object can be cast to:
         Class<?>[] classes = obj.getClass().getClasses();
-        AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( JCLASSNAMES_ATTR );
+        MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( JCLASSNAMES_ATTR );
         EntryAttribute javaClassNames = new DefaultEntryAttribute( attributeType, JCLASSNAMES_ATTR );
 
         for ( int ii = 0; ii < classes.length; ii++ )
diff --git a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
index f78c13e..1f55f62 100644
--- a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
+++ b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
@@ -121,7 +121,7 @@
 import org.apache.directory.shared.ldap.model.name.Ava;
 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.util.JndiUtils;
 import org.apache.directory.shared.util.Strings;
@@ -147,7 +147,7 @@
     protected SchemaManager schemaManager;
 
     /** A reference to the ObjectClass AT */
-    protected AttributeType OBJECT_CLASS_AT;
+    protected MutableAttributeTypeImpl OBJECT_CLASS_AT;
 
     /** The cloned environment used by this Context */
     private final Hashtable<String, Object> env;
diff --git a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerLdapContext.java b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerLdapContext.java
index bf3f9ad..7b1d575 100644
--- a/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerLdapContext.java
+++ b/core-jndi/src/main/java/org/apache/directory/server/core/jndi/ServerLdapContext.java
@@ -46,7 +46,7 @@
 import org.apache.directory.shared.ldap.model.entry.StringValue;
 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.util.Strings;
 
 
@@ -190,7 +190,7 @@
     {
         Value<?> val = null;
 
-        AttributeType attributeType = null;
+        MutableAttributeTypeImpl attributeType = null;
 
         try
         {
diff --git a/core/src/main/java/org/apache/directory/server/core/DefaultCoreSession.java b/core/src/main/java/org/apache/directory/server/core/DefaultCoreSession.java
index f85531d..6eaec05 100644
--- a/core/src/main/java/org/apache/directory/server/core/DefaultCoreSession.java
+++ b/core/src/main/java/org/apache/directory/server/core/DefaultCoreSession.java
@@ -67,7 +67,7 @@
 import org.apache.directory.shared.ldap.model.message.UnbindRequest;
 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.AttributeTypeOptions;
 import org.apache.directory.shared.util.Strings;
 
@@ -198,7 +198,7 @@
     {
         Value<?> val = null;
 
-        AttributeType attributeType = directoryService.getSchemaManager().lookupAttributeTypeRegistry( oid );
+        MutableAttributeTypeImpl attributeType = directoryService.getSchemaManager().lookupAttributeTypeRegistry( oid );
 
         // make sure we add the request controls to operation
         if ( attributeType.getSyntax().isHumanReadable() )
diff --git a/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java b/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
index 3973131..b7af7ba 100644
--- a/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
+++ b/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
@@ -100,7 +100,7 @@
 import org.apache.directory.shared.ldap.model.ldif.LdifReader;
 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.util.tree.DnNode;
 import org.apache.directory.shared.util.DateUtils;
@@ -270,7 +270,7 @@
     private PpolicyConfigContainer pwdPolicyContainer;
 
     /** the pwdPolicySubentry AT */
-    private AttributeType pwdPolicySubentryAT;
+    private MutableAttributeTypeImpl pwdPolicySubentryAT;
 
     /** The Dn factory */
     private DnFactory dnFactory;
diff --git a/core/src/main/java/org/apache/directory/server/core/ReferralManagerImpl.java b/core/src/main/java/org/apache/directory/server/core/ReferralManagerImpl.java
index e23122d..ee99ced 100644
--- a/core/src/main/java/org/apache/directory/server/core/ReferralManagerImpl.java
+++ b/core/src/main/java/org/apache/directory/server/core/ReferralManagerImpl.java
@@ -37,7 +37,7 @@
 import org.apache.directory.shared.ldap.model.filter.ExprNode;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.util.tree.DnNode;
 
 
@@ -58,7 +58,7 @@
     private ReentrantReadWriteLock mutex = new ReentrantReadWriteLock();
 
     /** A storage for the ObjectClass attributeType */
-    private AttributeType OBJECT_CLASS_AT;
+    private MutableAttributeTypeImpl OBJECT_CLASS_AT;
 
 
     /**
diff --git a/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java b/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
index 20a50ea..a0df868 100644
--- a/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
+++ b/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationInterceptor.java
@@ -104,7 +104,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.util.DateUtils;
 import org.apache.directory.shared.util.StringConstants;
 import org.apache.directory.shared.util.Strings;
@@ -137,19 +137,19 @@
     private Set<Dn> pwdResetSet = new HashSet<Dn>();
 
     // pwdpolicy state attribute types
-    private AttributeType AT_PWD_RESET;
+    private MutableAttributeTypeImpl AT_PWD_RESET;
 
-    private AttributeType AT_PWD_CHANGED_TIME;
+    private MutableAttributeTypeImpl AT_PWD_CHANGED_TIME;
 
-    private AttributeType AT_PWD_HISTORY;
+    private MutableAttributeTypeImpl AT_PWD_HISTORY;
 
-    private AttributeType AT_PWD_FAILURE_TIME;
+    private MutableAttributeTypeImpl AT_PWD_FAILURE_TIME;
 
-    private AttributeType AT_PWD_ACCOUNT_LOCKED_TIME;
+    private MutableAttributeTypeImpl AT_PWD_ACCOUNT_LOCKED_TIME;
 
-    private AttributeType AT_PWD_LAST_SUCCESS;
+    private MutableAttributeTypeImpl AT_PWD_LAST_SUCCESS;
 
-    private AttributeType AT_PWD_GRACE_USE_TIME;
+    private MutableAttributeTypeImpl AT_PWD_GRACE_USE_TIME;
 
 
     /**
diff --git a/core/src/main/java/org/apache/directory/server/core/authz/AciAuthorizationInterceptor.java b/core/src/main/java/org/apache/directory/server/core/authz/AciAuthorizationInterceptor.java
index d5f8d58..1d57d70 100644
--- a/core/src/main/java/org/apache/directory/server/core/authz/AciAuthorizationInterceptor.java
+++ b/core/src/main/java/org/apache/directory/server/core/authz/AciAuthorizationInterceptor.java
@@ -82,7 +82,7 @@
 import org.apache.directory.shared.ldap.model.filter.OrNode;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.normalizers.ConcreteNameComponentNormalizer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1280,7 +1280,7 @@
 
         engine.checkPermission( aciContext );
 
-        AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
+        MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
 
         aciContext = new AciContext( schemaManager, compareContext );
         aciContext.setUserGroupNames( userGroups );
@@ -1341,9 +1341,9 @@
          * not allowed are removed from the attribute.  If the attribute has no more
          * values remaining then the entire attribute is removed.
          */
-        List<AttributeType> attributeToRemove = new ArrayList<AttributeType>();
+        List<MutableAttributeTypeImpl> attributeToRemove = new ArrayList<MutableAttributeTypeImpl>();
 
-        for ( AttributeType attributeType : clonedEntry.getAttributeTypes() )
+        for ( MutableAttributeTypeImpl attributeType : clonedEntry.getAttributeTypes() )
         {
             // if attribute type scope access is not allowed then remove the attribute and continue
             EntryAttribute attr = clonedEntry.get( attributeType );
@@ -1398,7 +1398,7 @@
             }
         }
 
-        for ( AttributeType attributeType : attributeToRemove )
+        for ( MutableAttributeTypeImpl attributeType : attributeToRemove )
         {
             clonedEntry.removeAttributes( attributeType );
         }
diff --git a/core/src/main/java/org/apache/directory/server/core/authz/GroupCache.java b/core/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
index 6ea70fa..09552c4 100644
--- a/core/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
+++ b/core/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
@@ -51,7 +51,7 @@
 import org.apache.directory.shared.ldap.model.filter.OrNode;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.SchemaManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -74,13 +74,13 @@
     private final PartitionNexus nexus;
 
     /** A storage for the ObjectClass attributeType */
-    private AttributeType OBJECT_CLASS_AT;
+    private MutableAttributeTypeImpl OBJECT_CLASS_AT;
 
     /** A storage for the member attributeType */
-    private AttributeType MEMBER_AT;
+    private MutableAttributeTypeImpl MEMBER_AT;
 
     /** A storage for the uniqueMember attributeType */
-    private AttributeType UNIQUE_MEMBER_AT;
+    private MutableAttributeTypeImpl UNIQUE_MEMBER_AT;
 
     /**
      * the schema manager
diff --git a/core/src/main/java/org/apache/directory/server/core/authz/TupleCache.java b/core/src/main/java/org/apache/directory/server/core/authz/TupleCache.java
index bc25739..d4adeec 100644
--- a/core/src/main/java/org/apache/directory/server/core/authz/TupleCache.java
+++ b/core/src/main/java/org/apache/directory/server/core/authz/TupleCache.java
@@ -54,7 +54,7 @@
 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.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.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.normalizers.ConcreteNameComponentNormalizer;
 import org.slf4j.Logger;
@@ -86,10 +86,10 @@
     private final ACIItemParser aciParser;
 
     /** A storage for the PrescriptiveACI attributeType */
-    private AttributeType PRESCRIPTIVE_ACI_AT;
+    private MutableAttributeTypeImpl PRESCRIPTIVE_ACI_AT;
 
     /** A storage for the ObjectClass attributeType */
-    private static AttributeType OBJECT_CLASS_AT;
+    private static MutableAttributeTypeImpl OBJECT_CLASS_AT;
 
 
     /**
diff --git a/core/src/main/java/org/apache/directory/server/core/authz/support/AciContext.java b/core/src/main/java/org/apache/directory/server/core/authz/support/AciContext.java
index 6a66020..0d0fe07 100644
--- a/core/src/main/java/org/apache/directory/server/core/authz/support/AciContext.java
+++ b/core/src/main/java/org/apache/directory/server/core/authz/support/AciContext.java
@@ -28,7 +28,7 @@
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.entry.Value;
 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.SchemaManager;
 
 /**
@@ -58,7 +58,7 @@
     private Dn entryDn;
     
     /** The AttributeType */
-    private AttributeType attributeType;
+    private MutableAttributeTypeImpl attributeType;
     
     /** The attribute's values */
     private Value<?> attrValue;
@@ -187,7 +187,7 @@
     /**
      * @return the attributeType
      */
-    public AttributeType getAttributeType()
+    public MutableAttributeTypeImpl getAttributeType()
     {
         return attributeType;
     }
@@ -195,7 +195,7 @@
     /**
      * @param attributeType the attributeType to set
      */
-    public void setAttributeType( AttributeType attributeType )
+    public void setAttributeType( MutableAttributeTypeImpl attributeType )
     {
         this.attributeType = attributeType;
     }
diff --git a/core/src/main/java/org/apache/directory/server/core/authz/support/MaxImmSubFilter.java b/core/src/main/java/org/apache/directory/server/core/authz/support/MaxImmSubFilter.java
index e7e86d9..6fb4424 100644
--- a/core/src/main/java/org/apache/directory/server/core/authz/support/MaxImmSubFilter.java
+++ b/core/src/main/java/org/apache/directory/server/core/authz/support/MaxImmSubFilter.java
@@ -51,7 +51,7 @@
 import org.apache.directory.shared.ldap.model.filter.PresenceNode;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.SchemaManager;
 
 
@@ -70,7 +70,7 @@
 
     public MaxImmSubFilter( SchemaManager schemaManager )
     {
-        AttributeType objectClassAt = null;
+        MutableAttributeTypeImpl objectClassAt = null;
 
         try
         {
diff --git a/core/src/main/java/org/apache/directory/server/core/authz/support/MaxValueCountFilter.java b/core/src/main/java/org/apache/directory/server/core/authz/support/MaxValueCountFilter.java
index 0ddbec2..28ff9eb 100644
--- a/core/src/main/java/org/apache/directory/server/core/authz/support/MaxValueCountFilter.java
+++ b/core/src/main/java/org/apache/directory/server/core/authz/support/MaxValueCountFilter.java
@@ -30,7 +30,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;
 
 
 /**
@@ -83,7 +83,7 @@
     }
 
 
-    private boolean isRemovable( MaxValueCountItem mvc, AttributeType attributeType, Entry entryView ) throws LdapException
+    private boolean isRemovable( MaxValueCountItem mvc, MutableAttributeTypeImpl attributeType, Entry entryView ) throws LdapException
     {
         for ( Iterator<MaxValueCountElem> k = mvc.iterator(); k.hasNext(); )
         {
diff --git a/core/src/main/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilter.java b/core/src/main/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilter.java
index fee2e35..073a977 100644
--- a/core/src/main/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilter.java
+++ b/core/src/main/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilter.java
@@ -45,7 +45,7 @@
 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.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.SchemaManager;
 
 
@@ -91,7 +91,7 @@
     }
 
 
-    private boolean isRelated( ACITuple tuple, OperationScope scope, Dn userName, Dn entryName, AttributeType attributeType,
+    private boolean isRelated( ACITuple tuple, OperationScope scope, Dn userName, Dn entryName, MutableAttributeTypeImpl attributeType,
                                Value<?> attrValue, Entry entry ) throws LdapException, InternalError
     {
         String oid = null;
@@ -139,9 +139,9 @@
 
                 AllAttributeValuesItem aav = ( AllAttributeValuesItem ) item;
 
-                for ( Iterator<AttributeType> iterator = aav.iterator(); iterator.hasNext(); )
+                for ( Iterator<MutableAttributeTypeImpl> iterator = aav.iterator(); iterator.hasNext(); )
                 {
-                    AttributeType attr = iterator.next();
+                    MutableAttributeTypeImpl attr = iterator.next();
                     
                     if ( oid.equals( attr.getOid() ) )
                     {
@@ -158,9 +158,9 @@
 
                 AttributeTypeItem at = ( AttributeTypeItem ) item;
                 
-                for ( Iterator<AttributeType> iterator = at.iterator(); iterator.hasNext(); )
+                for ( Iterator<MutableAttributeTypeImpl> iterator = at.iterator(); iterator.hasNext(); )
                 {
-                    AttributeType attr = iterator.next();
+                    MutableAttributeTypeImpl attr = iterator.next();
                     
                     if ( oid.equals( attr.getOid() ) )
                     {
@@ -181,7 +181,7 @@
                 {
                     EntryAttribute entryAttribute = j.next();
                     
-                    AttributeType attr =  entryAttribute.getAttributeType();
+                    MutableAttributeTypeImpl attr =  entryAttribute.getAttributeType();
                     String attrOid = null;
                     
                     if ( attr != null )
@@ -270,9 +270,9 @@
 
                 SelfValueItem sv = ( SelfValueItem ) item;
                 
-                for ( Iterator<AttributeType> iterator = sv.iterator(); iterator.hasNext(); )
+                for ( Iterator<MutableAttributeTypeImpl> iterator = sv.iterator(); iterator.hasNext(); )
                 {
-                    AttributeType attr = iterator.next();
+                    MutableAttributeTypeImpl attr = iterator.next();
                     
                     if ( oid.equals( attr.getOid() ) )
                     {
diff --git a/core/src/main/java/org/apache/directory/server/core/authz/support/RestrictedByFilter.java b/core/src/main/java/org/apache/directory/server/core/authz/support/RestrictedByFilter.java
index 1dde74e..090a8bb 100644
--- a/core/src/main/java/org/apache/directory/server/core/authz/support/RestrictedByFilter.java
+++ b/core/src/main/java/org/apache/directory/server/core/authz/support/RestrictedByFilter.java
@@ -31,7 +31,7 @@
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 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;
 
 
 /**
@@ -73,7 +73,7 @@
     }
 
 
-    public boolean isRemovable( ACITuple tuple, AttributeType attributeType, Value<?> attrValue, Entry entry ) throws LdapException
+    public boolean isRemovable( ACITuple tuple, MutableAttributeTypeImpl attributeType, Value<?> attrValue, Entry entry ) throws LdapException
     {
         for ( ProtectedItem item : tuple.getProtectedItems() )
         {
diff --git a/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java b/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java
index 432c42d..0330d6d 100644
--- a/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java
+++ b/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java
@@ -48,7 +48,7 @@
 import org.apache.directory.shared.ldap.model.ldif.LdifRevertor;
 import org.apache.directory.shared.ldap.model.message.controls.ManageDsaITImpl;
 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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,7 +64,7 @@
     private static final Logger LOG = LoggerFactory.getLogger( ChangeLogInterceptor.class );
     
     /** used to ignore modify operations to tombstone entries */
-    private AttributeType entryDeleted;
+    private MutableAttributeTypeImpl entryDeleted;
     
     /** the changelog service to log changes to */
     private ChangeLog changeLog;
@@ -119,9 +119,9 @@
         forward.setChangeType( ChangeType.Add );
         forward.setDn( addContext.getDn() );
 
-        Set<AttributeType> list = addEntry.getAttributeTypes();
+        Set<MutableAttributeTypeImpl> list = addEntry.getAttributeTypes();
         
-        for ( AttributeType attributeType:list )
+        for ( MutableAttributeTypeImpl attributeType:list )
         {
             forward.addAttribute( addEntry.get( attributeType).clone() );
         }
@@ -170,7 +170,7 @@
         for ( EntryAttribute attribute : serverEntry )
         {
             // filter collective attributes, they can't be added by the revert operation
-            AttributeType at = schemaService.getSchemaManager().getAttributeTypeRegistry().lookup( attribute.getId() );
+            MutableAttributeTypeImpl at = schemaService.getSchemaManager().getAttributeTypeRegistry().lookup( attribute.getId() );
             
             if ( !at.isCollective() || isCollectiveSubentry )
             {
diff --git a/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributeInterceptor.java b/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributeInterceptor.java
index 4072ca6..e8c4154 100644
--- a/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributeInterceptor.java
+++ b/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributeInterceptor.java
@@ -51,7 +51,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapSchemaViolationException;
 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.SchemaUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -251,7 +251,7 @@
         {
             // TODO: handle http://issues.apache.org/jira/browse/DIRSERVER-1198
             EntryAttribute attr = mod.getAttribute();
-            AttributeType attrType = attr.getAttributeType();
+            MutableAttributeTypeImpl attrType = attr.getAttributeType();
 
             // Defensive programming. Very unlikely to happen here...
             if ( attrType == null )
@@ -285,9 +285,9 @@
      */
     private boolean containsAnyCollectiveAttributes( Entry entry ) throws LdapException
     {
-        Set<AttributeType> attributeTypes = entry.getAttributeTypes();
+        Set<MutableAttributeTypeImpl> attributeTypes = entry.getAttributeTypes();
 
-        for ( AttributeType attributeType : attributeTypes )
+        for ( MutableAttributeTypeImpl attributeType : attributeTypes )
         {
             if ( attributeType.isCollective() )
             {
@@ -351,7 +351,7 @@
 
             for ( Value<?> value : collectiveExclusions )
             {
-                AttributeType attrType = schemaManager.lookupAttributeTypeRegistry( value.getString() );
+                MutableAttributeTypeImpl attrType = schemaManager.lookupAttributeTypeRegistry( value.getString() );
                 exclusions.add( attrType.getOid() );
             }
         }
@@ -403,7 +403,7 @@
 
             Entry subentry = opContext.lookup( subentryDn, ByPassConstants.LOOKUP_COLLECTIVE_BYPASS );
 
-            for ( AttributeType attributeType : subentry.getAttributeTypes() )
+            for ( MutableAttributeTypeImpl attributeType : subentry.getAttributeTypes() )
             {
                 String attrId = attributeType.getName();
 
@@ -421,7 +421,7 @@
                     continue;
                 }
 
-                Set<AttributeType> allSuperTypes = getAllSuperTypes( attributeType );
+                Set<MutableAttributeTypeImpl> allSuperTypes = getAllSuperTypes( attributeType );
 
                 for ( String retId : retIdsSet )
                 {
@@ -431,7 +431,7 @@
                         continue;
                     }
 
-                    AttributeType retType = schemaManager.lookupAttributeTypeRegistry( retId );
+                    MutableAttributeTypeImpl retType = schemaManager.lookupAttributeTypeRegistry( retId );
 
                     if ( allSuperTypes.contains( retType ) )
                     {
@@ -476,10 +476,10 @@
     }
 
 
-    private Set<AttributeType> getAllSuperTypes( AttributeType id ) throws LdapException
+    private Set<MutableAttributeTypeImpl> getAllSuperTypes( MutableAttributeTypeImpl id ) throws LdapException
     {
-        Set<AttributeType> allSuperTypes = new HashSet<AttributeType>();
-        AttributeType superType = id;
+        Set<MutableAttributeTypeImpl> allSuperTypes = new HashSet<MutableAttributeTypeImpl>();
+        MutableAttributeTypeImpl superType = id;
 
         while ( superType != null )
         {
diff --git a/core/src/main/java/org/apache/directory/server/core/event/LeafEvaluator.java b/core/src/main/java/org/apache/directory/server/core/event/LeafEvaluator.java
index 57d877a..bd7382a 100644
--- a/core/src/main/java/org/apache/directory/server/core/event/LeafEvaluator.java
+++ b/core/src/main/java/org/apache/directory/server/core/event/LeafEvaluator.java
@@ -39,7 +39,7 @@
 import org.apache.directory.shared.ldap.model.filter.SimpleNode;
 import org.apache.directory.shared.ldap.model.filter.SubstringNode;
 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.LdapComparator;
 import org.apache.directory.shared.ldap.model.schema.MatchingRule;
 import org.apache.directory.shared.ldap.model.schema.Normalizer;
@@ -154,7 +154,7 @@
     private boolean evalGreaterOrLesser( SimpleNode<?> node, Entry entry, boolean isGreaterOrLesser )
         throws LdapException
     {
-        AttributeType attributeType = node.getAttributeType();
+        MutableAttributeTypeImpl attributeType = node.getAttributeType();
 
         // get the attribute associated with the node
         EntryAttribute attr = entry.get( node.getAttribute() );
@@ -217,7 +217,7 @@
      * @param entry the perspective candidate
      * @return the ava evaluation on the perspective candidate
      */
-    private boolean evalPresence( AttributeType attributeType, Entry entry ) throws LdapException
+    private boolean evalPresence( MutableAttributeTypeImpl attributeType, Entry entry ) throws LdapException
     {
         if ( entry == null )
         {
@@ -252,7 +252,7 @@
         }
 
         // check if Ava value exists in attribute
-        AttributeType attributeType = node.getAttributeType();
+        MutableAttributeTypeImpl attributeType = node.getAttributeType();
         Value<?> value = null;
         
         if ( attributeType.getSyntax().isHumanReadable() )
@@ -312,7 +312,7 @@
      * @return the comparator for equality matching
      * @throws LdapException if there is a failure
      */
-    private LdapComparator<Object> getComparator( AttributeType attributeType ) throws LdapException
+    private LdapComparator<Object> getComparator( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         MatchingRule mrule = getMatchingRule( attributeType, EQUALITY_MATCH );
         
@@ -327,7 +327,7 @@
      * @return the normalizer for equality matching
      * @throws LdapException if there is a failure
      */
-    private Normalizer getNormalizer( AttributeType attributeType ) throws LdapException
+    private Normalizer getNormalizer( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         MatchingRule mrule = getMatchingRule( attributeType, EQUALITY_MATCH );
         
@@ -342,7 +342,7 @@
      * @return the matching rule
      * @throws LdapException if there is a failure
      */
-    private MatchingRule getMatchingRule( AttributeType attributeType, int matchType ) throws LdapException
+    private MatchingRule getMatchingRule( MutableAttributeTypeImpl attributeType, int matchType ) throws LdapException
     {
         MatchingRule mrule = null;
 
diff --git a/core/src/main/java/org/apache/directory/server/core/event/SubstringEvaluator.java b/core/src/main/java/org/apache/directory/server/core/event/SubstringEvaluator.java
index 5d7770f..81585d4 100644
--- a/core/src/main/java/org/apache/directory/server/core/event/SubstringEvaluator.java
+++ b/core/src/main/java/org/apache/directory/server/core/event/SubstringEvaluator.java
@@ -32,7 +32,7 @@
 import org.apache.directory.shared.ldap.model.filter.ExprNode;
 import org.apache.directory.shared.ldap.model.filter.SubstringNode;
 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;
 
@@ -59,7 +59,7 @@
     {
         Pattern regex = null;
         SubstringNode snode = (SubstringNode)node;
-        AttributeType attributeType = snode.getAttributeType();
+        MutableAttributeTypeImpl attributeType = snode.getAttributeType();
         MatchingRule matchingRule = attributeType.getSubstring();
         
         if ( matchingRule == null )
diff --git a/core/src/main/java/org/apache/directory/server/core/journal/JournalInterceptor.java b/core/src/main/java/org/apache/directory/server/core/journal/JournalInterceptor.java
index d1cb52a..a9507b6 100644
--- a/core/src/main/java/org/apache/directory/server/core/journal/JournalInterceptor.java
+++ b/core/src/main/java/org/apache/directory/server/core/journal/JournalInterceptor.java
@@ -36,7 +36,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.ldif.ChangeType;
 import org.apache.directory.shared.ldap.model.ldif.LdifEntry;
-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;
 
@@ -114,9 +114,9 @@
             ldif.setChangeType( ChangeType.Add );
             ldif.setDn( addContext.getDn() );
 
-            Set<AttributeType> list = addEntry.getAttributeTypes();
+            Set<MutableAttributeTypeImpl> list = addEntry.getAttributeTypes();
             
-            for ( AttributeType attributeType:list )
+            for ( MutableAttributeTypeImpl attributeType:list )
             {
                 ldif.addAttribute( addEntry.get( attributeType).clone() );
             }
diff --git a/core/src/main/java/org/apache/directory/server/core/normalization/ExpandingVisitor.java b/core/src/main/java/org/apache/directory/server/core/normalization/ExpandingVisitor.java
index d659ee4..7aaa05e 100644
--- a/core/src/main/java/org/apache/directory/server/core/normalization/ExpandingVisitor.java
+++ b/core/src/main/java/org/apache/directory/server/core/normalization/ExpandingVisitor.java
@@ -37,7 +37,7 @@
 import org.apache.directory.shared.ldap.model.filter.OrNode;
 import org.apache.directory.shared.ldap.model.filter.PresenceNode;
 import org.apache.directory.shared.ldap.model.filter.SubstringNode;
-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;
 
 
@@ -112,12 +112,12 @@
                         children.set( childNumber++, orNode );
 
                         // iterate through descendants adding them to the orNode
-                        Iterator<AttributeType> descendants = schemaManager.getAttributeTypeRegistry().descendants( leaf.getAttributeType() );
+                        Iterator<MutableAttributeTypeImpl> descendants = schemaManager.getAttributeTypeRegistry().descendants( leaf.getAttributeType() );
 
                         while ( descendants.hasNext() )
                         {
                             LeafNode newLeaf = null;
-                            AttributeType descendant = descendants.next();
+                            MutableAttributeTypeImpl descendant = descendants.next();
 
                             if ( leaf instanceof PresenceNode )
                             {
diff --git a/core/src/main/java/org/apache/directory/server/core/normalization/FilterNormalizingVisitor.java b/core/src/main/java/org/apache/directory/server/core/normalization/FilterNormalizingVisitor.java
index 4c0b300..62105bd 100644
--- a/core/src/main/java/org/apache/directory/server/core/normalization/FilterNormalizingVisitor.java
+++ b/core/src/main/java/org/apache/directory/server/core/normalization/FilterNormalizingVisitor.java
@@ -37,7 +37,7 @@
 import org.apache.directory.shared.ldap.model.filter.SimpleNode;
 import org.apache.directory.shared.ldap.model.filter.SubstringNode;
 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.SchemaManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -131,7 +131,7 @@
      * @param value The value to normalize
      * @return the normalized value
      */
-    private Value<?> normalizeValue( AttributeType attributeType, Value<?> value )
+    private Value<?> normalizeValue( MutableAttributeTypeImpl attributeType, Value<?> value )
     {
         try
         {
diff --git a/core/src/main/java/org/apache/directory/server/core/normalization/NormalizationInterceptor.java b/core/src/main/java/org/apache/directory/server/core/normalization/NormalizationInterceptor.java
index f1638ae..e6a6156 100644
--- a/core/src/main/java/org/apache/directory/server/core/normalization/NormalizationInterceptor.java
+++ b/core/src/main/java/org/apache/directory/server/core/normalization/NormalizationInterceptor.java
@@ -52,7 +52,7 @@
 import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.ldap.model.name.NameComponentNormalizer;
 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.normalizers.ConcreteNameComponentNormalizer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -352,7 +352,7 @@
         // Get the attributeType from the OID
         try
         {
-            AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( compareContext.getOid() );
+            MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( compareContext.getOid() );
 
             // Translate the value from binary to String if the AT is HR
             if ( attributeType.getSyntax().isHumanReadable() && ( compareContext.getValue().isBinary() ) )
@@ -420,7 +420,7 @@
                 // 2) The attribute exists
                 else
                 {
-                    AttributeType at = schemaManager.lookupAttributeTypeRegistry( upId );
+                    MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( upId );
 
                     // 2.1 if the attribute is single valued, replace the value
                     if ( at.isSingleValued() )
diff --git a/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java b/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java
index 1ca560f..8b8bbdb 100644
--- a/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java
+++ b/core/src/main/java/org/apache/directory/server/core/operational/OperationalAttributeInterceptor.java
@@ -60,7 +60,7 @@
 import org.apache.directory.shared.ldap.model.name.Ava;
 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.UsageEnum;
 import org.apache.directory.shared.util.DateUtils;
 import org.slf4j.Logger;
@@ -245,7 +245,7 @@
         
         for ( Modification modification : mods )
         {
-            AttributeType attributeType = modification.getAttribute().getAttributeType();
+            MutableAttributeTypeImpl attributeType = modification.getAttribute().getAttributeType();
 
             if ( attributeType.equals( MODIFIERS_NAME_AT ) )
             {
@@ -434,10 +434,10 @@
      */
     private boolean filterOperationalAttributes( Entry attributes ) throws LdapException
     {
-        Set<AttributeType> removedAttributes = new HashSet<AttributeType>();
+        Set<MutableAttributeTypeImpl> removedAttributes = new HashSet<MutableAttributeTypeImpl>();
 
         // Build a list of attributeType to remove
-        for ( AttributeType attributeType : attributes.getAttributeTypes() )
+        for ( MutableAttributeTypeImpl attributeType : attributes.getAttributeTypes() )
         {
             if ( attributeType.getUsage() != UsageEnum.USER_APPLICATIONS )
             {
@@ -446,7 +446,7 @@
         }
 
         // Now remove the attributes which are not USERs
-        for ( AttributeType attributeType : removedAttributes )
+        for ( MutableAttributeTypeImpl attributeType : removedAttributes )
         {
             attributes.removeAttributes( attributeType );
         }
@@ -467,11 +467,11 @@
             return;
         }
 
-        Set<AttributeType> attributeTypes = entry.getAttributeTypes();
+        Set<MutableAttributeTypeImpl> attributeTypes = entry.getAttributeTypes();
 
         if ( dn.size() == 0 )
         {
-            for ( AttributeType attributeType : attributeTypes )
+            for ( MutableAttributeTypeImpl attributeType : attributeTypes )
             {
                 if ( !ids.contains( attributeType.getOid() ) )
                 {
diff --git a/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java b/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java
index b0522c3..590aadf 100644
--- a/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java
+++ b/core/src/main/java/org/apache/directory/server/core/partition/DefaultPartitionNexus.java
@@ -89,7 +89,7 @@
 import org.apache.directory.shared.ldap.model.message.extended.NoticeOfDisconnect;
 import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.ldap.model.name.DnUtils;
-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.UsageEnum;
 import org.apache.directory.shared.ldap.util.tree.DnNode;
@@ -138,10 +138,10 @@
     private boolean initialized;
 
     /** A reference to the EntryCSN attributeType */
-    private static AttributeType ENTRY_CSN_AT;
+    private static MutableAttributeTypeImpl ENTRY_CSN_AT;
 
     /** A reference to the ObjectClass attributeType */
-    private static AttributeType OBJECT_CLASS_AT;
+    private static MutableAttributeTypeImpl OBJECT_CLASS_AT;
 
     final List<Modification> mods = new ArrayList<Modification>( 2 );
 
@@ -611,11 +611,11 @@
         if ( dn.size() == 0 )
         {
             ClonedServerEntry retval = new ClonedServerEntry( rootDSE );
-            Set<AttributeType> attributeTypes = rootDSE.getAttributeTypes();
+            Set<MutableAttributeTypeImpl> attributeTypes = rootDSE.getAttributeTypes();
 
             if ( lookupContext.getAttrsId() != null && !lookupContext.getAttrsId().isEmpty() )
             {
-                for ( AttributeType attributeType : attributeTypes )
+                for ( MutableAttributeTypeImpl attributeType : attributeTypes )
                 {
                     String oid = attributeType.getOid();
 
@@ -777,7 +777,7 @@
 
         for ( EntryAttribute attribute : rootDSE )
         {
-            AttributeType type = schemaManager.lookupAttributeTypeRegistry( attribute.getUpId() );
+            MutableAttributeTypeImpl type = schemaManager.lookupAttributeTypeRegistry( attribute.getUpId() );
 
             if ( realIds.contains( type.getOid() ) )
             {
diff --git a/core/src/main/java/org/apache/directory/server/core/prefs/ServerSystemPreferences.java b/core/src/main/java/org/apache/directory/server/core/prefs/ServerSystemPreferences.java
index 5163906..1d9995c 100644
--- a/core/src/main/java/org/apache/directory/server/core/prefs/ServerSystemPreferences.java
+++ b/core/src/main/java/org/apache/directory/server/core/prefs/ServerSystemPreferences.java
@@ -44,7 +44,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.util.PreferencesDictionary;
 
 
@@ -268,7 +268,7 @@
 
     protected void removeSpi( String key ) 
     {
-        AttributeType at;
+        MutableAttributeTypeImpl at;
         try
         {
             at = directoryService.getSchemaManager().lookupAttributeTypeRegistry( key );
@@ -342,7 +342,7 @@
 
     protected void putSpi( String key, String value )
     {
-        AttributeType at;
+        MutableAttributeTypeImpl at;
         try
         {
             at = directoryService.getSchemaManager().lookupAttributeTypeRegistry( key );
diff --git a/core/src/main/java/org/apache/directory/server/core/schema/AttributesFactory.java b/core/src/main/java/org/apache/directory/server/core/schema/AttributesFactory.java
index 603b6d4..80b31b6 100644
--- a/core/src/main/java/org/apache/directory/server/core/schema/AttributesFactory.java
+++ b/core/src/main/java/org/apache/directory/server/core/schema/AttributesFactory.java
@@ -30,7 +30,7 @@
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 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.DITContentRule;
 import org.apache.directory.shared.ldap.model.schema.DITStructureRule;
 import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator;
@@ -68,9 +68,9 @@
         {
             return getAttributes( ( MutableMatchingRuleImpl ) obj, schema, schemaManager );
         }
-        else if ( obj instanceof AttributeType )
+        else if ( obj instanceof MutableAttributeTypeImpl )
         {
-            return getAttributes( ( AttributeType ) obj, schema, schemaManager );
+            return getAttributes( ( MutableAttributeTypeImpl ) obj, schema, schemaManager );
         }
         else if ( obj instanceof ObjectClass )
         {
@@ -264,7 +264,7 @@
      * @return Attributes
      * @throws LdapException
      */
-    public Entry getAttributes( AttributeType attributeType, Schema schema, SchemaManager schemaManager ) throws LdapException
+    public Entry getAttributes( MutableAttributeTypeImpl attributeType, Schema schema, SchemaManager schemaManager ) throws LdapException
     {
         Entry entry = new DefaultEntry( schemaManager );
 
diff --git a/core/src/main/java/org/apache/directory/server/core/schema/DefaultSchemaService.java b/core/src/main/java/org/apache/directory/server/core/schema/DefaultSchemaService.java
index 45aaff3..282c81f 100644
--- a/core/src/main/java/org/apache/directory/server/core/schema/DefaultSchemaService.java
+++ b/core/src/main/java/org/apache/directory/server/core/schema/DefaultSchemaService.java
@@ -32,7 +32,7 @@
 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.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.DITContentRule;
 import org.apache.directory.shared.ldap.model.schema.DITStructureRule;
 import org.apache.directory.shared.ldap.model.schema.LdapComparator;
@@ -168,7 +168,7 @@
         EntryAttribute attr = new DefaultEntryAttribute( 
             getSchemaManager().getAttributeType( SchemaConstants.ATTRIBUTE_TYPES_AT ) );
 
-        for ( AttributeType attributeType : getSchemaManager().getAttributeTypeRegistry() )
+        for ( MutableAttributeTypeImpl attributeType : getSchemaManager().getAttributeTypeRegistry() )
         {
             attr.add( SchemaUtils.render( attributeType ).toString() );
         }
diff --git a/core/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java b/core/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java
index 3a076f0..ec395e1 100644
--- a/core/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java
+++ b/core/src/main/java/org/apache/directory/server/core/schema/PartitionSchemaLoader.java
@@ -45,7 +45,7 @@
 import org.apache.directory.shared.ldap.model.filter.SearchScope;
 import org.apache.directory.shared.ldap.model.name.Dn;
 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.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.normalizers.ConcreteNameComponentNormalizer;
 import org.apache.directory.shared.ldap.model.schema.registries.AbstractSchemaLoader;
@@ -71,7 +71,7 @@
     /** The attributeType registry */
     private SchemaManager schemaManager;
 
-    private final AttributeType cnAT;
+    private final MutableAttributeTypeImpl cnAT;
 
 
     public PartitionSchemaLoader( Partition partition, SchemaManager schemaManager ) throws Exception
diff --git a/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java b/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
index 732ba8d..4d02c38 100644
--- a/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
+++ b/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
@@ -86,7 +86,7 @@
 import org.apache.directory.shared.ldap.model.name.Ava;
 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.AttributeTypeOptions;
 import org.apache.directory.shared.ldap.model.schema.ObjectClass;
 import org.apache.directory.shared.ldap.model.schema.ObjectClassTypeEnum;
@@ -151,13 +151,13 @@
     private Map<String, List<ObjectClass>> superiors;
 
     /** A map used to store all the objectClasses may attributes */
-    private Map<String, List<AttributeType>> allMay;
+    private Map<String, List<MutableAttributeTypeImpl>> allMay;
 
     /** A map used to store all the objectClasses must */
-    private Map<String, List<AttributeType>> allMust;
+    private Map<String, List<MutableAttributeTypeImpl>> allMust;
 
     /** A map used to store all the objectClasses allowed attributes (may + must) */
-    private Map<String, List<AttributeType>> allowed;
+    private Map<String, List<MutableAttributeTypeImpl>> allowed;
 
 
     /**
@@ -218,8 +218,8 @@
     {
         List<ObjectClass> parents = superiors.get( objectClass.getOid() );
 
-        List<AttributeType> mustList = new ArrayList<AttributeType>();
-        List<AttributeType> allowedList = new ArrayList<AttributeType>();
+        List<MutableAttributeTypeImpl> mustList = new ArrayList<MutableAttributeTypeImpl>();
+        List<MutableAttributeTypeImpl> allowedList = new ArrayList<MutableAttributeTypeImpl>();
         Set<String> mustSeen = new HashSet<String>();
 
         allMust.put( objectClass.getOid(), mustList );
@@ -227,11 +227,11 @@
 
         for ( ObjectClass parent : parents )
         {
-            List<AttributeType> mustParent = parent.getMustAttributeTypes();
+            List<MutableAttributeTypeImpl> mustParent = parent.getMustAttributeTypes();
 
             if ( ( mustParent != null ) && ( mustParent.size() != 0 ) )
             {
-                for ( AttributeType attributeType : mustParent )
+                for ( MutableAttributeTypeImpl attributeType : mustParent )
                 {
                     String oid = attributeType.getOid();
 
@@ -262,19 +262,19 @@
     {
         List<ObjectClass> parents = superiors.get( objectClass.getOid() );
 
-        List<AttributeType> mayList = new ArrayList<AttributeType>();
+        List<MutableAttributeTypeImpl> mayList = new ArrayList<MutableAttributeTypeImpl>();
         Set<String> maySeen = new HashSet<String>();
-        List<AttributeType> allowedList = allowed.get( objectClass.getOid() );
+        List<MutableAttributeTypeImpl> allowedList = allowed.get( objectClass.getOid() );
 
         allMay.put( objectClass.getOid(), mayList );
 
         for ( ObjectClass parent : parents )
         {
-            List<AttributeType> mustParent = parent.getMustAttributeTypes();
+            List<MutableAttributeTypeImpl> mustParent = parent.getMustAttributeTypes();
 
             if ( ( mustParent != null ) && ( mustParent.size() != 0 ) )
             {
-                for ( AttributeType attributeType : mustParent )
+                for ( MutableAttributeTypeImpl attributeType : mustParent )
                 {
                     String oid = attributeType.getOid();
 
@@ -361,9 +361,9 @@
     {
         Iterator<ObjectClass> objectClasses = schemaManager.getObjectClassRegistry().iterator();
         superiors = new ConcurrentHashMap<String, List<ObjectClass>>();
-        allMust = new ConcurrentHashMap<String, List<AttributeType>>();
-        allMay = new ConcurrentHashMap<String, List<AttributeType>>();
-        allowed = new ConcurrentHashMap<String, List<AttributeType>>();
+        allMust = new ConcurrentHashMap<String, List<MutableAttributeTypeImpl>>();
+        allMay = new ConcurrentHashMap<String, List<MutableAttributeTypeImpl>>();
+        allowed = new ConcurrentHashMap<String, List<MutableAttributeTypeImpl>>();
 
         while ( objectClasses.hasNext() )
         {
@@ -515,7 +515,7 @@
     }
 
 
-    private Value<?> convert( AttributeType attributeType, Value<?> value ) throws LdapException
+    private Value<?> convert( MutableAttributeTypeImpl attributeType, Value<?> value ) throws LdapException
     {
         if ( attributeType.getSyntax().isHumanReadable() )
         {
@@ -698,7 +698,7 @@
                     return new BaseEntryFilteringCursor( new EmptyCursor<Entry>(), searchContext );
                 }
 
-                AttributeType nodeAt = node.getAttributeType();
+                MutableAttributeTypeImpl nodeAt = node.getAttributeType();
 
                 // see if node attribute is objectClass
                 if ( nodeAt.equals( OBJECT_CLASS_AT )
@@ -821,12 +821,12 @@
             String ocName = value.getString();
             ObjectClass oc = schemaManager.getObjectClassRegistry().lookup( ocName );
 
-            List<AttributeType> types = oc.getMustAttributeTypes();
+            List<MutableAttributeTypeImpl> types = oc.getMustAttributeTypes();
 
             // For each objectClass, loop on all MUST attributeTypes, if any
             if ( ( types != null ) && ( types.size() > 0 ) )
             {
-                for ( AttributeType type : types )
+                for ( MutableAttributeTypeImpl type : types )
                 {
                     must.add( type.getOid() );
                 }
@@ -850,12 +850,12 @@
             String ocName = objectClass.getString();
             ObjectClass oc = schemaManager.getObjectClassRegistry().lookup( ocName );
 
-            List<AttributeType> types = oc.getMayAttributeTypes();
+            List<MutableAttributeTypeImpl> types = oc.getMayAttributeTypes();
 
             // For each objectClass, loop on all MAY attributeTypes, if any
             if ( ( types != null ) && ( types.size() > 0 ) )
             {
-                for ( AttributeType type : types )
+                for ( MutableAttributeTypeImpl type : types )
                 {
                     String oid = type.getOid();
 
@@ -951,14 +951,14 @@
             // are still present in the entry.
             for ( Ava atav : oldRdn)
             {
-                AttributeType type = schemaManager.lookupAttributeTypeRegistry( atav.getUpType() );
+                MutableAttributeTypeImpl type = schemaManager.lookupAttributeTypeRegistry( atav.getUpType() );
                 entry.remove( type, atav.getUpValue() );
             }
 
             // Check that no operational attributes are removed
             for ( Ava atav : oldRdn)
             {
-                AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( atav.getUpType() );
+                MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( atav.getUpType() );
 
                 if ( !attributeType.isUserModifiable() )
                 {
@@ -969,7 +969,7 @@
 
         for ( Ava atav : newRdn )
         {
-            AttributeType type = schemaManager.lookupAttributeTypeRegistry( atav.getUpType() );
+            MutableAttributeTypeImpl type = schemaManager.lookupAttributeTypeRegistry( atav.getUpType() );
 
             if ( !entry.contains( type, atav.getNormValue() ) )
             {
@@ -991,7 +991,7 @@
      */
     private EntryAttribute createNewAttribute( EntryAttribute attribute )
     {
-        AttributeType attributeType = attribute.getAttributeType();
+        MutableAttributeTypeImpl attributeType = attribute.getAttributeType();
 
         // Create the new Attribute
         EntryAttribute newAttribute = new DefaultEntryAttribute( attribute.getUpId(), attributeType );
@@ -1021,7 +1021,7 @@
         for ( Modification mod : mods )
         {
             EntryAttribute attribute = mod.getAttribute();
-            AttributeType attributeType = attribute.getAttributeType();
+            MutableAttributeTypeImpl attributeType = attribute.getAttributeType();
 
             // We don't allow modification of operational attributes
             if ( !attributeType.isUserModifiable()
@@ -1215,7 +1215,7 @@
 
             for ( Modification mod : mods )
             {
-                AttributeType at = ( ( DefaultModification ) mod ).getAttribute().getAttributeType();
+                MutableAttributeTypeImpl at = ( ( DefaultModification ) mod ).getAttribute().getAttributeType();
 
                 if ( !MODIFIERS_NAME_AT.equals( at ) && !MODIFY_TIMESTAMP_AT.equals( at ) )
                 {
@@ -1355,7 +1355,7 @@
         // First, make sure all attributes are valid schema defined attributes
         // ---------------------------------------------------------------
 
-        for ( AttributeType attributeType : entry.getAttributeTypes() )
+        for ( MutableAttributeTypeImpl attributeType : entry.getAttributeTypes() )
         {
             if ( !schemaManager.getAttributeTypeRegistry().contains( attributeType.getName() ) )
             {
@@ -1572,7 +1572,7 @@
         {
             String attrOid = attribute.getAttributeType().getOid();
 
-            AttributeType attributeType = attribute.getAttributeType();
+            MutableAttributeTypeImpl attributeType = attribute.getAttributeType();
 
             if ( !attributeType.isCollective() && ( attributeType.getUsage() == UsageEnum.USER_APPLICATIONS )
                 && !allowed.contains( attrOid ) )
@@ -1727,7 +1727,7 @@
         // First, loop on all attributes
         for ( EntryAttribute attribute : entry )
         {
-            AttributeType attributeType = attribute.getAttributeType();
+            MutableAttributeTypeImpl attributeType = attribute.getAttributeType();
             SyntaxChecker syntaxChecker = attributeType.getSyntax().getSyntaxChecker();
 
             if ( syntaxChecker instanceof OctetStringSyntaxChecker )
@@ -1881,7 +1881,7 @@
         // Loops on all attributes
         for ( EntryAttribute attribute : entry )
         {
-            AttributeType attributeType = attribute.getAttributeType();
+            MutableAttributeTypeImpl attributeType = attribute.getAttributeType();
 
             // If the attributeType is H-R, check all of its values
             if ( attributeType.getSyntax().isHumanReadable() )
diff --git a/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryManager.java b/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryManager.java
index 936afe5..10a7327 100644
--- a/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryManager.java
+++ b/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryManager.java
@@ -34,7 +34,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 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.MutableLdapSyntax;
@@ -91,7 +91,7 @@
     private static final String CASCADING_ERROR =
             "Cascading has not yet been implemented: standard operation is in effect.";
 
-    private static AttributeType ENTRY_CSN_ATTRIBUTE_TYPE;
+    private static MutableAttributeTypeImpl ENTRY_CSN_ATTRIBUTE_TYPE;
     
     static 
     {
@@ -256,9 +256,9 @@
                 break;
                 
             case( ATTRIBUTE_TYPE_INDEX ):
-                AttributeType[] ats = parsers.parseAttributeTypes( mods );
+                MutableAttributeTypeImpl[] ats = parsers.parseAttributeTypes( mods );
                 
-                for ( AttributeType at : ats )
+                for ( MutableAttributeTypeImpl at : ats )
                 {
                     subentryModifier.deleteSchemaObject( modifyContext, at );
                 }
@@ -394,9 +394,9 @@
                 break;
                 
             case( ATTRIBUTE_TYPE_INDEX ):
-                AttributeType[] ats = parsers.parseAttributeTypes( mods );
+                MutableAttributeTypeImpl[] ats = parsers.parseAttributeTypes( mods );
                 
-                for ( AttributeType at : ats )
+                for ( MutableAttributeTypeImpl at : ats )
                 {
                     subentryModifier.addSchemaObject( modifyContext, at );
                 }
diff --git a/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryModifier.java b/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryModifier.java
index 37159ad..7b5e858 100644
--- a/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryModifier.java
+++ b/core/src/main/java/org/apache/directory/server/core/schema/SchemaSubentryModifier.java
@@ -38,7 +38,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.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.DITContentRule;
 import org.apache.directory.shared.ldap.model.schema.DITStructureRule;
 import org.apache.directory.shared.ldap.model.schema.LdapSyntax;
@@ -113,7 +113,7 @@
         {
             buf.append( SchemaConstants.MATCHING_RULES_AT );
         }
-        else if ( obj instanceof AttributeType )
+        else if ( obj instanceof MutableAttributeTypeImpl )
         {
             buf.append( SchemaConstants.ATTRIBUTE_TYPES_AT );
         }
diff --git a/core/src/main/java/org/apache/directory/server/core/sp/LdapClassLoader.java b/core/src/main/java/org/apache/directory/server/core/sp/LdapClassLoader.java
index addff20..da6aba5 100644
--- a/core/src/main/java/org/apache/directory/server/core/sp/LdapClassLoader.java
+++ b/core/src/main/java/org/apache/directory/server/core/sp/LdapClassLoader.java
@@ -40,7 +40,7 @@
 import org.apache.directory.shared.ldap.model.filter.SearchScope;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,7 +67,7 @@
     private DirectoryService directoryService;
 
     /** A storage for the ObjectClass attributeType */
-    private AttributeType OBJECT_CLASS_AT;
+    private MutableAttributeTypeImpl OBJECT_CLASS_AT;
 
     
     public LdapClassLoader( DirectoryService directoryService ) throws LdapException
@@ -84,7 +84,7 @@
     {
         // Set up the search filter
         BranchNode filter = new AndNode( );
-        AttributeType fqjcnAt = directoryService.getSchemaManager().getAttributeType( "fullyQualifiedJavaClassName" );
+        MutableAttributeTypeImpl fqjcnAt = directoryService.getSchemaManager().getAttributeType( "fullyQualifiedJavaClassName" );
         filter.addNode( new EqualityNode<String>( fqjcnAt, new StringValue( name ) ) );
         filter.addNode( new EqualityNode<String>( OBJECT_CLASS_AT,
             new StringValue( ApacheSchemaConstants.JAVA_CLASS_OC ) ) );
diff --git a/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java b/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java
index f91a57e..bff1505 100644
--- a/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java
+++ b/core/src/main/java/org/apache/directory/server/core/sp/StoredProcExecutionManager.java
@@ -39,7 +39,7 @@
 import org.apache.directory.shared.ldap.model.filter.SearchScope;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.AttributeTypeOptions;
 
 
@@ -86,7 +86,7 @@
         controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
         String spUnitName = StoredProcUtils.extractStoredProcUnitName( fullSPName );
         
-        AttributeType storeProcUnitNamAT = session.getDirectoryService()
+        MutableAttributeTypeImpl storeProcUnitNamAT = session.getDirectoryService()
             .getSchemaManager().lookupAttributeTypeRegistry( "storedProcUnitName" );
         ExprNode filter = new EqualityNode<String>( storeProcUnitNamAT, new StringValue( storeProcUnitNamAT, spUnitName ) );
         Dn dn = session.getDirectoryService().getDnFactory().create( storedProcContainer );
diff --git a/core/src/main/java/org/apache/directory/server/core/subtree/RefinementLeafEvaluator.java b/core/src/main/java/org/apache/directory/server/core/subtree/RefinementLeafEvaluator.java
index 81f5597..70a3320 100644
--- a/core/src/main/java/org/apache/directory/server/core/subtree/RefinementLeafEvaluator.java
+++ b/core/src/main/java/org/apache/directory/server/core/subtree/RefinementLeafEvaluator.java
@@ -28,7 +28,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.filter.EqualityNode;
 import org.apache.directory.shared.ldap.model.filter.SimpleNode;
-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;
 
 
@@ -45,7 +45,7 @@
     private final SchemaManager schemaManager;
 
     /** A storage for the ObjectClass attributeType */
-    private AttributeType OBJECT_CLASS_AT;
+    private MutableAttributeTypeImpl OBJECT_CLASS_AT;
 
 
     /**
diff --git a/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java b/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
index 561639b..5129d3c 100644
--- a/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
+++ b/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
@@ -78,7 +78,7 @@
 import org.apache.directory.shared.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.model.message.controls.Subentries;
 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.subtree.AdministrativeRole;
 import org.apache.directory.shared.ldap.model.subtree.SubtreeSpecification;
 import org.apache.directory.shared.ldap.model.subtree.SubtreeSpecificationParser;
@@ -101,7 +101,7 @@
     private static final String SUBENTRY_CONTROL = Subentries.OID;
 
     /** The set of Subentry operational attributes */
-    public static AttributeType[] SUBENTRY_OPATTRS;
+    public static MutableAttributeTypeImpl[] SUBENTRY_OPATTRS;
 
     /** the hash mapping the Dn of a subentry to its SubtreeSpecification/types */
     private final SubentryCache subentryCache = new SubentryCache();
@@ -180,7 +180,7 @@
 
         nexus = directoryService.getPartitionNexus();
 
-        SUBENTRY_OPATTRS = new AttributeType[]
+        SUBENTRY_OPATTRS = new MutableAttributeTypeImpl[]
             {
                 ACCESS_CONTROL_SUBENTRIES_AT,
                 SUBSCHEMA_SUBENTRY_AT,
@@ -503,7 +503,7 @@
             // need to remove references to the subentry
             if ( isOldNameSelected && !isNewNameSelected )
             {
-                for ( AttributeType operationalAttribute : SUBENTRY_OPATTRS )
+                for ( MutableAttributeTypeImpl operationalAttribute : SUBENTRY_OPATTRS )
                 {
                     ModificationOperation op = ModificationOperation.REPLACE_ATTRIBUTE;
                     EntryAttribute opAttr = entry.get( operationalAttribute );
@@ -525,7 +525,7 @@
             // need to add references to the subentry
             else if ( isNewNameSelected && !isOldNameSelected )
             {
-                for ( AttributeType operationalAttribute : SUBENTRY_OPATTRS )
+                for ( MutableAttributeTypeImpl operationalAttribute : SUBENTRY_OPATTRS )
                 {
                     ModificationOperation op = ModificationOperation.ADD_ATTRIBUTE;
                     EntryAttribute opAttr = new DefaultEntryAttribute( operationalAttribute );
@@ -587,7 +587,7 @@
      * Update the list of modifications with a modification associated with a specific
      * role, if it's requested.
      */
-    private void getOperationalModForReplace( boolean hasRole, AttributeType attributeType, Entry entry, Dn oldDn, Dn newDn, List<Modification> modifications )
+    private void getOperationalModForReplace( boolean hasRole, MutableAttributeTypeImpl attributeType, Entry entry, Dn oldDn, Dn newDn, List<Modification> modifications )
     {
         String oldDnStr = oldDn.getNormName();
         String newDnStr = newDn.getNormName();
@@ -683,7 +683,7 @@
         List<Modification> modifications = new ArrayList<Modification>();
         String dn = subentryDn.getNormName();
 
-        for ( AttributeType operationalAttribute : SUBENTRY_OPATTRS )
+        for ( MutableAttributeTypeImpl operationalAttribute : SUBENTRY_OPATTRS )
         {
             EntryAttribute opAttr = candidate.get( operationalAttribute );
 
@@ -758,7 +758,7 @@
             // need to remove references to the subentry
             if ( isOldEntrySelected && !isNewEntrySelected )
             {
-                for ( AttributeType operationalAttribute : SUBENTRY_OPATTRS )
+                for ( MutableAttributeTypeImpl operationalAttribute : SUBENTRY_OPATTRS )
                 {
                     ModificationOperation op = ModificationOperation.REPLACE_ATTRIBUTE;
                     EntryAttribute opAttr = oldEntry.get( operationalAttribute );
@@ -780,7 +780,7 @@
             // need to add references to the subentry
             else if ( isNewEntrySelected && !isOldEntrySelected )
             {
-                for ( AttributeType operationalAttribute : SUBENTRY_OPATTRS )
+                for ( MutableAttributeTypeImpl operationalAttribute : SUBENTRY_OPATTRS )
                 {
                     ModificationOperation op = ModificationOperation.ADD_ATTRIBUTE;
                     EntryAttribute opAttr = new DefaultEntryAttribute( operationalAttribute );
@@ -797,7 +797,7 @@
     /**
      * Update the Operational Attribute with the reference to the subentry
      */
-    private void setOperationalAttribute( Entry entry, Dn subentryDn, AttributeType opAttr) throws LdapException
+    private void setOperationalAttribute( Entry entry, Dn subentryDn, MutableAttributeTypeImpl opAttr) throws LdapException
     {
         EntryAttribute operational = entry.get( opAttr );
 
diff --git a/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java b/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java
index 3f49e7f..1a249e9 100644
--- a/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java
+++ b/core/src/main/java/org/apache/directory/server/core/trigger/TriggerSpecCache.java
@@ -55,7 +55,7 @@
 import org.apache.directory.shared.ldap.model.filter.ExprNode;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.NormalizerMappingResolver;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.normalizers.OidNormalizer;
@@ -118,7 +118,7 @@
         // add that subentry to the hash
         Set<String> suffixes = nexus.listSuffixes();
 
-        AttributeType objectClassAt = directoryService.getSchemaManager().
+        MutableAttributeTypeImpl objectClassAt = directoryService.getSchemaManager().
             getAttributeType( SchemaConstants.OBJECT_CLASS_AT );
 
         for ( String suffix:suffixes )
diff --git a/core/src/test/java/org/apache/directory/server/core/authz/support/DummyAttributeTypeRegistry.java b/core/src/test/java/org/apache/directory/server/core/authz/support/DummyAttributeTypeRegistry.java
index 5f9c958..ba461ae 100644
--- a/core/src/test/java/org/apache/directory/server/core/authz/support/DummyAttributeTypeRegistry.java
+++ b/core/src/test/java/org/apache/directory/server/core/authz/support/DummyAttributeTypeRegistry.java
@@ -26,7 +26,7 @@
 import java.util.Set;
 
 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;
@@ -44,7 +44,7 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  *
  */
-public class DummyAttributeTypeRegistry extends DefaultSchemaObjectRegistry<AttributeType>
+public class DummyAttributeTypeRegistry extends DefaultSchemaObjectRegistry<MutableAttributeTypeImpl>
 {
     private final boolean returnOperational;
 
@@ -56,14 +56,14 @@
     }
 
 
-    public AttributeType lookup( final String id ) throws LdapException
+    public MutableAttributeTypeImpl lookup( final String id ) throws LdapException
     {
         AbstractNormalizer normalizer = new DeepTrimToLowerNormalizer( "1.1.1" );
 
         MutableMatchingRuleImpl equality = new MutableMatchingRuleImpl( "1.1.1" );
         equality.setNormalizer( normalizer );
 
-        AttributeType attributeType = new AttributeType( id );
+        MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( id );
         attributeType.setEquality( equality );
         attributeType.setSingleValued( false );
         attributeType.setCollective( false );
@@ -98,9 +98,9 @@
     }
 
 
-    public Iterator<AttributeType> list()
+    public Iterator<MutableAttributeTypeImpl> list()
     {
-        return new ArrayList<AttributeType>().iterator();
+        return new ArrayList<MutableAttributeTypeImpl>().iterator();
     }
 
 
@@ -110,7 +110,7 @@
     }
 
 
-    public Iterator<AttributeType> descendants( String ancestorId ) throws LdapException
+    public Iterator<MutableAttributeTypeImpl> descendants( String ancestorId ) throws LdapException
     {
         return null;
     }
@@ -122,19 +122,19 @@
     }
 
 
-    public Iterator<AttributeType> iterator()
+    public Iterator<MutableAttributeTypeImpl> iterator()
     {
         return null;
     }
 
 
-    public AttributeType unregister( String numericOid ) throws LdapException
+    public MutableAttributeTypeImpl unregister( String numericOid ) throws LdapException
     {
         return null;
     }
 
 
-    public void register( AttributeType attributeType ) throws LdapException
+    public void register( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
     }
 
@@ -145,22 +145,22 @@
     }
 
 
-    public void unregisterDescendants( AttributeType attributeType, AttributeType ancestor ) throws LdapException
+    public void unregisterDescendants( MutableAttributeTypeImpl attributeType, MutableAttributeTypeImpl ancestor ) throws LdapException
     {
     }
 
 
-    public void registerDescendants( AttributeType attributeType, AttributeType ancestor ) throws LdapException
+    public void registerDescendants( MutableAttributeTypeImpl attributeType, MutableAttributeTypeImpl ancestor ) throws LdapException
     {
     }
 
 
-    public void addMappingFor( AttributeType attributeType ) throws LdapException
+    public void addMappingFor( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
     }
 
 
-    public SchemaObjectRegistry<AttributeType> copy()
+    public SchemaObjectRegistry<MutableAttributeTypeImpl> copy()
     {
         return null;
     }
diff --git a/core/src/test/java/org/apache/directory/server/core/authz/support/MaxValueCountFilterTest.java b/core/src/test/java/org/apache/directory/server/core/authz/support/MaxValueCountFilterTest.java
index 1c614d6..a623aee 100644
--- a/core/src/test/java/org/apache/directory/server/core/authz/support/MaxValueCountFilterTest.java
+++ b/core/src/test/java/org/apache/directory/server/core/authz/support/MaxValueCountFilterTest.java
@@ -38,7 +38,7 @@
 import org.apache.directory.shared.ldap.model.entry.DefaultEntry;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 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.SchemaManager;
 import org.apache.directory.shared.ldap.schemamanager.impl.DefaultSchemaManager;
 import org.junit.BeforeClass;
@@ -69,7 +69,7 @@
     private static Entry FULL_ENTRY;
 
     /** The CN attribute Type */
-    private static AttributeType CN_AT;
+    private static MutableAttributeTypeImpl CN_AT;
 
     /** A reference to the schemaManager */
     private static SchemaManager schemaManager;
@@ -87,7 +87,7 @@
         FULL_ENTRY.put( "cn", "1", "2", "3" );
 
         Set<MaxValueCountElem> mvcItems = new HashSet<MaxValueCountElem>();
-        AttributeType cn = schemaManager.lookupAttributeTypeRegistry( "cn" );
+        MutableAttributeTypeImpl cn = schemaManager.lookupAttributeTypeRegistry( "cn" );
         mvcItems.add( new MaxValueCountElem( cn, 2 ) );
         PROTECTED_ITEMS.add( new MaxValueCountItem( mvcItems ) );
         
diff --git a/core/src/test/java/org/apache/directory/server/core/authz/support/MostSpecificProtectedItemFilterTest.java b/core/src/test/java/org/apache/directory/server/core/authz/support/MostSpecificProtectedItemFilterTest.java
index b38df5a..5b2c1cb 100644
--- a/core/src/test/java/org/apache/directory/server/core/authz/support/MostSpecificProtectedItemFilterTest.java
+++ b/core/src/test/java/org/apache/directory/server/core/authz/support/MostSpecificProtectedItemFilterTest.java
@@ -44,7 +44,7 @@
 import org.apache.directory.shared.ldap.model.constants.AuthenticationLevel;
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.filter.PresenceNode;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -59,7 +59,7 @@
 @Concurrency()
 public class MostSpecificProtectedItemFilterTest
 {
-    private static final Set<AttributeType> EMPTY_STRING_COLLECTION = Collections.unmodifiableSet( new HashSet<AttributeType>() );
+    private static final Set<MutableAttributeTypeImpl> EMPTY_STRING_COLLECTION = Collections.unmodifiableSet( new HashSet<MutableAttributeTypeImpl>() );
 
     private static final Set<EntryAttribute> EMPTY_ATTRIBUTE_COLLECTION = Collections
         .unmodifiableSet( new HashSet<EntryAttribute>() );
diff --git a/core/src/test/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilterTest.java b/core/src/test/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilterTest.java
index 1903ea7..dd349db 100644
--- a/core/src/test/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilterTest.java
+++ b/core/src/test/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilterTest.java
@@ -51,7 +51,7 @@
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.entry.StringValue;
 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.SchemaManager;
 import org.apache.directory.shared.ldap.schemamanager.impl.DefaultSchemaManager;
 import org.junit.BeforeClass;
@@ -86,13 +86,13 @@
     private static RelatedProtectedItemFilter filterB;
     
     /** The CN attribute Type */
-    private static AttributeType CN_AT;
+    private static MutableAttributeTypeImpl CN_AT;
     
     /** The OU attribute Type */
-    private static AttributeType OU_AT;
+    private static MutableAttributeTypeImpl OU_AT;
     
     /** The SN attribute Type */
-    private static AttributeType SN_AT;
+    private static MutableAttributeTypeImpl SN_AT;
 
     
     @BeforeClass 
@@ -192,7 +192,7 @@
     @Test 
     public void testAllAttributeValues() throws Exception
     {
-        Set<AttributeType> attrTypes = new HashSet<AttributeType>();
+        Set<MutableAttributeTypeImpl> attrTypes = new HashSet<MutableAttributeTypeImpl>();
         attrTypes.add( CN_AT );
         Collection<ACITuple> tuples = getTuples( new AllAttributeValuesItem( attrTypes ) );
 
@@ -225,7 +225,7 @@
     @Test 
     public void testAttributeType() throws Exception
     {
-        Set<AttributeType> attrTypes = new HashSet<AttributeType>();
+        Set<MutableAttributeTypeImpl> attrTypes = new HashSet<MutableAttributeTypeImpl>();
         attrTypes.add( CN_AT );
         Collection<ACITuple> tuples = getTuples( new AttributeTypeItem( attrTypes ) );
 
@@ -434,7 +434,7 @@
     @Test 
     public void testSelfValue() throws Exception
     {
-        Set<AttributeType> attrTypes = new HashSet<AttributeType>();
+        Set<MutableAttributeTypeImpl> attrTypes = new HashSet<MutableAttributeTypeImpl>();
         attrTypes.add( CN_AT );
         Collection<ACITuple> tuples = getTuples( new SelfValueItem( attrTypes ) );
 
diff --git a/core/src/test/java/org/apache/directory/server/core/authz/support/RestrictedByFilterTest.java b/core/src/test/java/org/apache/directory/server/core/authz/support/RestrictedByFilterTest.java
index d0999e1..68227bd 100644
--- a/core/src/test/java/org/apache/directory/server/core/authz/support/RestrictedByFilterTest.java
+++ b/core/src/test/java/org/apache/directory/server/core/authz/support/RestrictedByFilterTest.java
@@ -40,7 +40,7 @@
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.entry.StringValue;
 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.SchemaManager;
 import org.apache.directory.shared.ldap.schemamanager.impl.DefaultSchemaManager;
 import org.junit.BeforeClass;
@@ -72,10 +72,10 @@
     private static SchemaManager schemaManager;
     
     /** The CN attribute Type */
-    private static AttributeType CN_AT;
+    private static MutableAttributeTypeImpl CN_AT;
 
     /** The SN attribute Type */
-    private static AttributeType SN_AT;
+    private static MutableAttributeTypeImpl SN_AT;
 
     
     @BeforeClass 
diff --git a/core/src/test/java/org/apache/directory/server/core/schema/SchemaServiceTest.java b/core/src/test/java/org/apache/directory/server/core/schema/SchemaServiceTest.java
index e758da9..00bef88 100644
--- a/core/src/test/java/org/apache/directory/server/core/schema/SchemaServiceTest.java
+++ b/core/src/test/java/org/apache/directory/server/core/schema/SchemaServiceTest.java
@@ -30,7 +30,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.SchemaManager;
 import org.apache.directory.shared.ldap.schemaextractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schemaextractor.impl.DefaultSchemaLdifExtractor;
@@ -89,12 +89,12 @@
     @Test
     public void testDescendants() throws Exception
     {
-        Iterator<AttributeType> list = schemaManager.getAttributeTypeRegistry().descendants( "name" );
+        Iterator<MutableAttributeTypeImpl> list = schemaManager.getAttributeTypeRegistry().descendants( "name" );
         Set<String> nameAttrs = new HashSet<String>();
 
         while ( list.hasNext() )
         {
-            AttributeType type = list.next();
+            MutableAttributeTypeImpl type = list.next();
             nameAttrs.add( type.getName() );
         }
 
diff --git a/core/src/test/java/org/apache/directory/server/core/subtree/RefinementEvaluatorTest.java b/core/src/test/java/org/apache/directory/server/core/subtree/RefinementEvaluatorTest.java
index 40eb87b..40a8c9f 100644
--- a/core/src/test/java/org/apache/directory/server/core/subtree/RefinementEvaluatorTest.java
+++ b/core/src/test/java/org/apache/directory/server/core/subtree/RefinementEvaluatorTest.java
@@ -32,7 +32,7 @@
 import org.apache.directory.shared.ldap.model.filter.ExprNode;
 import org.apache.directory.shared.ldap.model.filter.FilterParser;
 import org.apache.directory.shared.ldap.model.filter.NotNode;
-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.schemaloader.JarLdifSchemaLoader;
 import org.apache.directory.shared.ldap.schemamanager.impl.DefaultSchemaManager;
@@ -59,10 +59,10 @@
     private static RefinementEvaluator evaluator;
 
     /** The ObjectClass AttributeType */
-    private static AttributeType OBJECT_CLASS_AT;
+    private static MutableAttributeTypeImpl OBJECT_CLASS_AT;
 
     /** The CN_AT AttributeType */
-    private static AttributeType CN_AT;
+    private static MutableAttributeTypeImpl CN_AT;
     
     
     /**
diff --git a/core/src/test/java/org/apache/directory/server/core/subtree/RefinementLeafEvaluatorTest.java b/core/src/test/java/org/apache/directory/server/core/subtree/RefinementLeafEvaluatorTest.java
index e93e18c..128f6c4 100644
--- a/core/src/test/java/org/apache/directory/server/core/subtree/RefinementLeafEvaluatorTest.java
+++ b/core/src/test/java/org/apache/directory/server/core/subtree/RefinementLeafEvaluatorTest.java
@@ -33,7 +33,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.filter.EqualityNode;
 import org.apache.directory.shared.ldap.model.filter.GreaterEqNode;
-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.schemaloader.JarLdifSchemaLoader;
 import org.apache.directory.shared.ldap.schemamanager.impl.DefaultSchemaManager;
@@ -57,10 +57,10 @@
     private static SchemaManager schemaManager;
 
     /** The ObjectClass AttributeType */
-    private static AttributeType OBJECT_CLASS_AT;
+    private static MutableAttributeTypeImpl OBJECT_CLASS_AT;
     
     /** The CN AttributeType */
-    private static AttributeType CN_AT;
+    private static MutableAttributeTypeImpl CN_AT;
     
     /** the refinement leaf evaluator to test */
     private static RefinementLeafEvaluator evaluator;
diff --git a/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java b/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java
index 1040e4a..c185980 100644
--- a/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java
+++ b/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java
@@ -39,7 +39,7 @@
 import org.apache.directory.shared.ldap.model.cursor.Cursor;
 import org.apache.directory.shared.ldap.model.cursor.Tuple;
 import org.apache.directory.shared.ldap.model.entry.BinaryValue;
-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.MutableMatchingRule;
 import org.apache.directory.shared.ldap.model.schema.MutableMatchingRuleImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
@@ -153,7 +153,7 @@
      * @param attributeType The attributeType this index is created for
      * @throws IOException If the initialization failed
      */
-    public void init( SchemaManager schemaManager, AttributeType attributeType ) throws IOException
+    public void init( SchemaManager schemaManager, MutableAttributeTypeImpl attributeType ) throws IOException
     {
         LOG.debug( "Initializing an Index for attribute '{}'", attributeType.getName() );
         
diff --git a/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndex.java b/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndex.java
index 2f04e39..3622b8f 100644
--- a/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndex.java
+++ b/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndex.java
@@ -34,7 +34,7 @@
 import org.apache.directory.server.i18n.I18n;
 import org.apache.directory.server.xdbm.ParentIdAndRdn;
 import org.apache.directory.server.xdbm.ParentIdAndRdnComparator;
-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.SchemaManager;
 import org.apache.directory.shared.util.SynchronizedLRUMap;
@@ -67,7 +67,7 @@
     }
 
 
-    public void init( SchemaManager schemaManager, AttributeType attributeType ) throws IOException
+    public void init( SchemaManager schemaManager, MutableAttributeTypeImpl attributeType ) throws IOException
     {
         LOG.debug( "Initializing an Index for attribute '{}'", attributeType.getName() );
         
diff --git a/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java b/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
index 9ab2b8a..293e43f 100644
--- a/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
+++ b/jdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
@@ -40,7 +40,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.entry.Value;
-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.exception.MultiException;
 import org.slf4j.Logger;
@@ -387,7 +387,7 @@
      */
     public void buildUserIndex( Index userIdx ) throws Exception
     {
-        AttributeType atType = userIdx.getAttribute();
+        MutableAttributeTypeImpl atType = userIdx.getAttribute();
 
         LOG.info( "building the index for attribute type {}", atType );
         
diff --git a/jdbm-partition/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndexTest.java b/jdbm-partition/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndexTest.java
index 03efe35..339e6f5 100644
--- a/jdbm-partition/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndexTest.java
+++ b/jdbm-partition/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndexTest.java
@@ -35,7 +35,7 @@
 import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.model.cursor.Cursor;
 import org.apache.directory.shared.ldap.model.entry.Entry;
-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.schemaextractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schemaextractor.impl.DefaultSchemaLdifExtractor;
@@ -150,7 +150,7 @@
             jdbmIdx = new JdbmIndex<String, Entry>();
         }
         
-        AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OU_AT );
+        MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OU_AT );
 
         jdbmIdx.init( schemaManager, attributeType );
         this.idx = jdbmIdx;
@@ -575,7 +575,7 @@
 
         try
         {
-            AttributeType noEqMatchAttribute = new AttributeType( "1.1" );
+            MutableAttributeTypeImpl noEqMatchAttribute = new MutableAttributeTypeImpl( "1.1" );
             jdbmIndex.setWkDirPath( dbFileDir.toURI() );
             jdbmIndex.init( schemaManager, noEqMatchAttribute );
             fail( "should not get here" );
diff --git a/jdbm-partition/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java b/jdbm-partition/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
index 1e63739..a6120cd 100644
--- a/jdbm-partition/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
+++ b/jdbm-partition/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
@@ -57,7 +57,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapSchemaViolationException;
 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.schemaextractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schemaextractor.impl.DefaultSchemaLdifExtractor;
@@ -89,16 +89,16 @@
     private static Dn EXAMPLE_COM;
 
     /** The OU AttributeType instance */
-    private static AttributeType OU_AT;
+    private static MutableAttributeTypeImpl OU_AT;
 
     /** The ApacheAlias AttributeType instance */
-    private static AttributeType APACHE_ALIAS_AT;
+    private static MutableAttributeTypeImpl APACHE_ALIAS_AT;
 
     /** The DC AttributeType instance */
-    private static AttributeType DC_AT;
+    private static MutableAttributeTypeImpl DC_AT;
 
     /** The SN AttributeType instance */
-    private static AttributeType SN_AT;
+    private static MutableAttributeTypeImpl SN_AT;
 
 
     @BeforeClass
diff --git a/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/store/operations/StoreUtils.java b/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/store/operations/StoreUtils.java
index 649aa38..aa909b6 100644
--- a/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/store/operations/StoreUtils.java
+++ b/kerberos-codec/src/main/java/org/apache/directory/server/kerberos/shared/store/operations/StoreUtils.java
@@ -37,7 +37,7 @@
 import org.apache.directory.shared.ldap.model.filter.SearchScope;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.SchemaManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -106,7 +106,7 @@
      */
     private static ExprNode getFilter( SchemaManager schemaManager, String principal ) throws Exception
     {
-        AttributeType type = schemaManager.lookupAttributeTypeRegistry( KerberosAttribute.KRB5_PRINCIPAL_NAME_AT );
+        MutableAttributeTypeImpl type = schemaManager.lookupAttributeTypeRegistry( KerberosAttribute.KRB5_PRINCIPAL_NAME_AT );
         Value<String> value = new StringValue( type, principal );
         return new EqualityNode<String>( KerberosAttribute.KRB5_PRINCIPAL_NAME_AT, value );
     }
diff --git a/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/AbstractLdifPartition.java b/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/AbstractLdifPartition.java
index cf54a4f..b9f84a7 100644
--- a/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/AbstractLdifPartition.java
+++ b/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/AbstractLdifPartition.java
@@ -36,7 +36,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.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.SchemaManager;
 
 
@@ -226,7 +226,7 @@
      * {@inheritDoc}
      */
     @Override
-    public Index<?, Entry, Long> getSystemIndex( AttributeType attributeType ) throws Exception
+    public Index<?, Entry, Long> getSystemIndex( MutableAttributeTypeImpl attributeType ) throws Exception
     {
         return wrappedPartition.getSystemIndex( attributeType );
     }
@@ -246,7 +246,7 @@
      * {@inheritDoc}
      */
     @Override
-    public Index<?, Entry, Long> getUserIndex( AttributeType attributeType ) throws Exception
+    public Index<?, Entry, Long> getUserIndex( MutableAttributeTypeImpl attributeType ) throws Exception
     {
         return wrappedPartition.getUserIndex( attributeType );
     }
@@ -266,7 +266,7 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean hasSystemIndexOn( AttributeType attributeType ) throws Exception
+    public boolean hasSystemIndexOn( MutableAttributeTypeImpl attributeType ) throws Exception
     {
         return wrappedPartition.hasSystemIndexOn( attributeType );
     }
@@ -276,7 +276,7 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean hasUserIndexOn( AttributeType attributeType ) throws Exception
+    public boolean hasUserIndexOn( MutableAttributeTypeImpl attributeType ) throws Exception
     {
         return wrappedPartition.hasUserIndexOn( attributeType );
     }
diff --git a/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifPartition.java b/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifPartition.java
index ed80b2e..48f766d 100644
--- a/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifPartition.java
+++ b/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifPartition.java
@@ -52,7 +52,7 @@
 import org.apache.directory.shared.ldap.model.name.Ava;
 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.util.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -564,7 +564,7 @@
 
             // First, get the AT name, or OID
             String normAT = ava.getNormType();
-            AttributeType at = schemaManager.lookupAttributeTypeRegistry( normAT );
+            MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( normAT );
 
             String atName = at.getName();
 
@@ -598,7 +598,7 @@
         {
             // First, get the AT name, or OID
             String normAT = rdn.getNormType();
-            AttributeType at = schemaManager.lookupAttributeTypeRegistry( normAT );
+            MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( normAT );
 
             String atName = at.getName();
 
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolHandler.java
index 6b6bbd5..c1417a7 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/LdapProtocolHandler.java
@@ -33,7 +33,7 @@
 import org.apache.directory.shared.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.model.message.ResultResponse;
 import org.apache.directory.shared.ldap.model.message.ResultResponseRequest;
-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.mina.core.service.IoHandler;
@@ -100,7 +100,7 @@
     
                     try
                     {
-                        AttributeType type = schemaManager.lookupAttributeTypeRegistry( id );
+                        MutableAttributeTypeImpl type = schemaManager.lookupAttributeTypeRegistry( id );
                         return !type.getSyntax().isHumanReadable();
                     }
                     catch ( Exception e )
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java
index 799942e..dd2698d 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/SearchHandler.java
@@ -70,7 +70,7 @@
 import org.apache.directory.shared.ldap.model.message.controls.PagedResults;
 import org.apache.directory.shared.ldap.model.message.controls.PersistentSearch;
 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.util.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -89,7 +89,7 @@
     private static final boolean IS_DEBUG = LOG.isDebugEnabled();
 
     /** cached to save redundant lookups into registries */
-    private AttributeType OBJECT_CLASS_AT;
+    private MutableAttributeTypeImpl OBJECT_CLASS_AT;
 
     protected ReplicationProvider replicationProvider;
 
@@ -936,7 +936,7 @@
 
             if ( presenceNode.isSchemaAware() )
             {
-                AttributeType attributeType = presenceNode.getAttributeType();
+                MutableAttributeTypeImpl attributeType = presenceNode.getAttributeType();
 
                 if ( attributeType.equals( OBJECT_CLASS_AT ) )
                 {
@@ -1292,7 +1292,7 @@
 
             if ( filter.isSchemaAware() )
             {
-                AttributeType attributeType = ( (PresenceNode) req.getFilter() ).getAttributeType();
+                MutableAttributeTypeImpl attributeType = ( (PresenceNode) req.getFilter() ).getAttributeType();
                 isRootDSEFilter = attributeType.equals( OBJECT_CLASS_AT );
             }
             else
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/cramMD5/CramMd5CallbackHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/cramMD5/CramMd5CallbackHandler.java
index ce494fd..20aace6 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/cramMD5/CramMd5CallbackHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/cramMD5/CramMd5CallbackHandler.java
@@ -42,7 +42,7 @@
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 import org.apache.directory.shared.ldap.model.message.BindRequest;
 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.AttributeTypeOptions;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.slf4j.Logger;
@@ -85,7 +85,7 @@
             ExprNode filter = FilterParser.parse( schemaManager, "(uid=" + username + ")" );
             Set<AttributeTypeOptions> returningAttributes = new HashSet<AttributeTypeOptions>();
             
-            AttributeType passwordAT = adminSession.getDirectoryService().getSchemaManager().lookupAttributeTypeRegistry( SchemaConstants.USER_PASSWORD_AT );
+            MutableAttributeTypeImpl passwordAT = adminSession.getDirectoryService().getSchemaManager().lookupAttributeTypeRegistry( SchemaConstants.USER_PASSWORD_AT );
             returningAttributes.add( new AttributeTypeOptions( passwordAT) );
             bindDn = (String)ldapSession.getSaslProperty( SaslConstants.SASL_USER_BASE_DN );
             
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/digestMD5/DigestMd5CallbackHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/digestMD5/DigestMd5CallbackHandler.java
index 83fd733..b24bbd6 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/digestMD5/DigestMd5CallbackHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/digestMD5/DigestMd5CallbackHandler.java
@@ -42,7 +42,7 @@
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 import org.apache.directory.shared.ldap.model.message.BindRequest;
 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.AttributeTypeOptions;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.slf4j.Logger;
@@ -87,7 +87,7 @@
             ExprNode filter = FilterParser.parse( schemaManager, "(uid=" + username + ")" );
             Set<AttributeTypeOptions> returningAttributes = new HashSet<AttributeTypeOptions>();
             
-            AttributeType passwordAT = adminSession.getDirectoryService().getSchemaManager().lookupAttributeTypeRegistry( SchemaConstants.USER_PASSWORD_AT );
+            MutableAttributeTypeImpl passwordAT = adminSession.getDirectoryService().getSchemaManager().lookupAttributeTypeRegistry( SchemaConstants.USER_PASSWORD_AT );
             returningAttributes.add( new AttributeTypeOptions( passwordAT) );
             bindDn = (String)ldapSession.getSaslProperty( SaslConstants.SASL_USER_BASE_DN );
             
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/controls/PagedSearchContext.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/controls/PagedSearchContext.java
index b3152c1..b6e6103 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/controls/PagedSearchContext.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/controls/PagedSearchContext.java
@@ -29,7 +29,7 @@
 import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.message.SearchRequest;
-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;
 
@@ -120,7 +120,7 @@
         {
             try
             {
-                AttributeType at = schemaManager.lookupAttributeTypeRegistry( attribute );
+                MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( attribute );
                 requestSet.add( at.getOid() );
             }
             catch ( LdapException le )
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/ReplicaEventMessage.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/ReplicaEventMessage.java
index df27254..d14fb94 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/ReplicaEventMessage.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/ReplicaEventMessage.java
@@ -40,7 +40,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.ldap.model.name.DnSerializer;
-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;
@@ -169,7 +169,7 @@
 
             try
             {
-                AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
+                MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
 
                 // Create the attribute we will read
                 DefaultEntryAttribute attribute = new DefaultEntryAttribute( attributeType );
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplConsumer.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplConsumer.java
index 7f4608e..1c6b3e3 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplConsumer.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplConsumer.java
@@ -81,7 +81,7 @@
 import org.apache.directory.shared.ldap.model.message.controls.ManageDsaITImpl;
 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.AttributeTypeOptions;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.util.Strings;
@@ -140,7 +140,7 @@
     /** the cookie that was saved last time */
     private byte[] lastSavedCookie;
 
-    private static AttributeType ENTRY_UUID_AT;
+    private static MutableAttributeTypeImpl ENTRY_UUID_AT;
 
     private static final PresenceNode ENTRY_UUID_PRESENCE_FILTER = new PresenceNode( SchemaConstants.ENTRY_UUID_AT );
 
@@ -150,7 +150,7 @@
 
     private Dn configEntryDn;
 
-    private static AttributeType COOKIE_AT_TYPE;
+    private static MutableAttributeTypeImpl COOKIE_AT_TYPE;
 
 
     /**
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplProvider.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplProvider.java
index dcc31d2..d042452 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplProvider.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplProvider.java
@@ -87,7 +87,7 @@
 import org.apache.directory.shared.ldap.model.message.SearchResultReference;
 import org.apache.directory.shared.ldap.model.message.SearchResultReferenceImpl;
 import org.apache.directory.shared.ldap.model.message.controls.ManageDsaIT;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 import org.apache.directory.shared.util.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -113,7 +113,7 @@
     /** The reference on the Ldap server instance */
     protected LdapServer ldapServer;
 
-    private AttributeType objectClassAttributeType;
+    private MutableAttributeTypeImpl objectClassAttributeType;
 
     private Map<Integer, ReplicaEventLog> replicaLogMap = new HashMap<Integer, ReplicaEventLog>();
 
@@ -782,7 +782,7 @@
         {
             PresenceNode presenceNode = ( PresenceNode ) req.getFilter();
 
-            AttributeType at = session.getCoreSession().getDirectoryService().getSchemaManager()
+            MutableAttributeTypeImpl at = session.getCoreSession().getDirectoryService().getSchemaManager()
                 .lookupAttributeTypeRegistry( presenceNode.getAttribute() );
             if ( at.getOid().equals( SchemaConstants.OBJECT_CLASS_AT_OID ) )
             {
diff --git a/server-config/src/main/java/org/apache/directory/server/config/ConfigPartitionReader.java b/server-config/src/main/java/org/apache/directory/server/config/ConfigPartitionReader.java
index 0ce26a3..b76308f 100644
--- a/server-config/src/main/java/org/apache/directory/server/config/ConfigPartitionReader.java
+++ b/server-config/src/main/java/org/apache/directory/server/config/ConfigPartitionReader.java
@@ -55,7 +55,7 @@
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.slf4j.Logger;
@@ -481,10 +481,10 @@
     /**
      * Read all the required fields (AttributeTypes) for a given Entry.
      */
-    private void readFields( AdsBaseBean bean, Entry entry, Set<AttributeType> attributeTypes, boolean mandatory )
+    private void readFields( AdsBaseBean bean, Entry entry, Set<MutableAttributeTypeImpl> attributeTypes, boolean mandatory )
         throws NoSuchFieldException, IllegalAccessException, Exception
     {
-        for ( AttributeType attributeType : attributeTypes )
+        for ( MutableAttributeTypeImpl attributeType : attributeTypes )
         {
             String fieldName = attributeType.getName();
             String beanFieldName = fieldName;
@@ -513,10 +513,10 @@
             }
 
             // Get the associated AttributeType
-            AttributeType beanAT = schemaManager.getAttributeType( fieldName );
+            MutableAttributeTypeImpl beanAT = schemaManager.getAttributeType( fieldName );
 
             // Check if this AT has the ads-compositeElement as a superior
-            AttributeType superior = beanAT.getSuperior();
+            MutableAttributeTypeImpl superior = beanAT.getSuperior();
 
             if ( ( superior != null )
                 && superior.getOid().equals( ConfigSchemaConstants.ADS_COMPOSITE_ELEMENT_AT.getOid() ) )
@@ -624,9 +624,9 @@
     /**
      * Get the list of MUST AttributeTypes for an objectClass
      */
-    private Set<AttributeType> getAllMusts( ObjectClass objectClass )
+    private Set<MutableAttributeTypeImpl> getAllMusts( ObjectClass objectClass )
     {
-        Set<AttributeType> musts = new HashSet<AttributeType>();
+        Set<MutableAttributeTypeImpl> musts = new HashSet<MutableAttributeTypeImpl>();
 
         // First, gets the direct MUST
         musts.addAll( objectClass.getMustAttributeTypes() );
@@ -649,9 +649,9 @@
     /**
      * Get the list of MAY AttributeTypes for an objectClass
      */
-    private Set<AttributeType> getAllMays( ObjectClass objectClass )
+    private Set<MutableAttributeTypeImpl> getAllMays( ObjectClass objectClass )
     {
-        Set<AttributeType> mays = new HashSet<AttributeType>();
+        Set<MutableAttributeTypeImpl> mays = new HashSet<MutableAttributeTypeImpl>();
 
         // First, gets the direct MAY
         mays.addAll( objectClass.getMayAttributeTypes() );
@@ -674,7 +674,7 @@
     /**
      * Helper method to print a list of AT's names.
      */
-    private String dumpATs( Set<AttributeType> attributeTypes )
+    private String dumpATs( Set<MutableAttributeTypeImpl> attributeTypes )
     {
         if ( ( attributeTypes == null ) || ( attributeTypes.size() == 0 ) )
         {
@@ -685,7 +685,7 @@
         boolean isFirst = true;
         sb.append( '{' );
 
-        for ( AttributeType attributeType : attributeTypes )
+        for ( MutableAttributeTypeImpl attributeType : attributeTypes )
         {
             if ( isFirst )
             {
@@ -715,7 +715,7 @@
 
         // Search for the element starting at some point in the DIT
         // Prepare the search request
-        AttributeType adsdAt = schemaManager.getAttributeType( SchemaConstants.OBJECT_CLASS_AT );
+        MutableAttributeTypeImpl adsdAt = schemaManager.getAttributeType( SchemaConstants.OBJECT_CLASS_AT );
         EqualityNode<?> filter = new EqualityNode( adsdAt, new StringValue( name ) );
         SearchControls controls = new SearchControls();
         controls.setSearchScope( scope.ordinal() );
@@ -767,12 +767,12 @@
 
                 // Now, read the AttributeTypes and store the values into the bean fields
                 // The MAY
-                Set<AttributeType> mays = getAllMays( objectClass );
+                Set<MutableAttributeTypeImpl> mays = getAllMays( objectClass );
                 LOG.debug( "Fetching the following MAY attributes : {}", dumpATs( mays ) );
                 readFields( bean, entry, mays, OPTIONNAL );
 
                 // The MUST
-                Set<AttributeType> musts = getAllMusts( objectClass );
+                Set<MutableAttributeTypeImpl> musts = getAllMusts( objectClass );
                 LOG.debug( "Fetching the following MAY attributes : {}", dumpATs( musts ) );
                 readFields( bean, entry, musts, MANDATORY );
                 
diff --git a/service-builder/src/main/java/org/apache/directory/server/config/ServiceBuilder.java b/service-builder/src/main/java/org/apache/directory/server/config/ServiceBuilder.java
index 53c7ee8..58b51d3 100644
--- a/service-builder/src/main/java/org/apache/directory/server/config/ServiceBuilder.java
+++ b/service-builder/src/main/java/org/apache/directory/server/config/ServiceBuilder.java
@@ -99,7 +99,7 @@
 import org.apache.directory.shared.ldap.model.ldif.LdapLdifException;
 import org.apache.directory.shared.ldap.model.ldif.LdifEntry;
 import org.apache.directory.shared.ldap.model.ldif.LdifReader;
-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;
@@ -983,7 +983,7 @@
         
         try
         {
-            AttributeType indexAT = schemaManager.lookupAttributeTypeRegistry( indexFileName );
+            MutableAttributeTypeImpl indexAT = schemaManager.lookupAttributeTypeRegistry( indexFileName );
             indexFileName = indexAT.getOid();
         }
         catch ( LdapException le )
diff --git a/service/src/main/java/org/apache/directory/server/ApacheDsService.java b/service/src/main/java/org/apache/directory/server/ApacheDsService.java
index b073433..95dcaac 100644
--- a/service/src/main/java/org/apache/directory/server/ApacheDsService.java
+++ b/service/src/main/java/org/apache/directory/server/ApacheDsService.java
@@ -63,7 +63,7 @@
 import org.apache.directory.shared.ldap.model.filter.SearchScope;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.AttributeTypeOptions;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.registries.SchemaLoader;
@@ -278,19 +278,19 @@
 
         directoryService.startup();
 
-        AttributeType ocAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OBJECT_CLASS_AT );
+        MutableAttributeTypeImpl ocAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.OBJECT_CLASS_AT );
         MANDATORY_ENTRY_ATOP_MAP.put( ocAt.getName(), new AttributeTypeOptions( ocAt ) );
 
-        AttributeType uuidAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.ENTRY_UUID_AT );
+        MutableAttributeTypeImpl uuidAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.ENTRY_UUID_AT );
         MANDATORY_ENTRY_ATOP_MAP.put( uuidAt.getName(), new AttributeTypeOptions( uuidAt ) );
 
-        AttributeType csnAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.ENTRY_CSN_AT );
+        MutableAttributeTypeImpl csnAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.ENTRY_CSN_AT );
         MANDATORY_ENTRY_ATOP_MAP.put( csnAt.getName(), new AttributeTypeOptions( csnAt ) );
 
-        AttributeType creatorAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.CREATORS_NAME_AT );
+        MutableAttributeTypeImpl creatorAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.CREATORS_NAME_AT );
         MANDATORY_ENTRY_ATOP_MAP.put( creatorAt.getName(), new AttributeTypeOptions( creatorAt ) );
 
-        AttributeType createdTimeAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.CREATE_TIMESTAMP_AT );
+        MutableAttributeTypeImpl createdTimeAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.CREATE_TIMESTAMP_AT );
         MANDATORY_ENTRY_ATOP_MAP.put( createdTimeAt.getName(), new AttributeTypeOptions( createdTimeAt ) );
 
         if ( isConfigPartitionFirstExtraction )
@@ -642,7 +642,7 @@
         {
             ClonedServerEntry entry = cursor.get();
 
-            AttributeType atType = MANDATORY_ENTRY_ATOP_MAP.get( SchemaConstants.ENTRY_UUID_AT ).getAttributeType();
+            MutableAttributeTypeImpl atType = MANDATORY_ENTRY_ATOP_MAP.get( SchemaConstants.ENTRY_UUID_AT ).getAttributeType();
 
             EntryAttribute uuidAt = entry.get( atType );
             String uuid = ( uuidAt == null ? null : uuidAt.getString() );
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/BTreePartition.java b/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/BTreePartition.java
index 5fc9697..f504e4c 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/BTreePartition.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/BTreePartition.java
@@ -56,7 +56,7 @@
 import org.apache.directory.shared.ldap.model.filter.ExprNode;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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;
 
 
 /**
@@ -307,7 +307,7 @@
             return entry;
         }
 
-        for ( AttributeType attributeType : ( entry.getOriginalEntry() ).getAttributeTypes() )
+        for ( MutableAttributeTypeImpl attributeType : ( entry.getOriginalEntry() ).getAttributeTypes() )
         {
             if ( !lookupContext.getAttrsId().contains( attributeType.getOid() ) )
             {
@@ -347,10 +347,10 @@
     public abstract void addIndexOn( Index<?, Entry, ID> index ) throws Exception;
 
 
-    public abstract boolean hasUserIndexOn( AttributeType attributeType ) throws Exception;
+    public abstract boolean hasUserIndexOn( MutableAttributeTypeImpl attributeType ) throws Exception;
 
 
-    public abstract boolean hasSystemIndexOn( AttributeType attributeType ) throws Exception;
+    public abstract boolean hasSystemIndexOn( MutableAttributeTypeImpl attributeType ) throws Exception;
 
 
     public abstract Index<String, Entry, ID> getPresenceIndex();
@@ -426,10 +426,10 @@
     }
 
 
-    public abstract Index<?, Entry, ID> getUserIndex( AttributeType attributeType ) throws Exception;
+    public abstract Index<?, Entry, ID> getUserIndex( MutableAttributeTypeImpl attributeType ) throws Exception;
 
 
-    public abstract Index<?, Entry, ID> getSystemIndex( AttributeType attributeType ) throws Exception;
+    public abstract Index<?, Entry, ID> getSystemIndex( MutableAttributeTypeImpl attributeType ) throws Exception;
 
 
     public abstract ID getEntryId( Dn dn ) throws LdapException;
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/xdbm/AbstractXdbmPartition.java b/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/xdbm/AbstractXdbmPartition.java
index a2c51e5..71293d8 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/xdbm/AbstractXdbmPartition.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/xdbm/AbstractXdbmPartition.java
@@ -45,7 +45,7 @@
 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.name.Rdn;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -193,7 +193,7 @@
     /**
      * {@inheritDoc}
      */
-    public final boolean hasUserIndexOn( AttributeType attributeType ) throws Exception
+    public final boolean hasUserIndexOn( MutableAttributeTypeImpl attributeType ) throws Exception
     {
         return store.hasUserIndexOn( attributeType );
     }
@@ -202,7 +202,7 @@
     /**
      * {@inheritDoc}
      */
-    public final boolean hasSystemIndexOn( AttributeType attributeType ) throws Exception
+    public final boolean hasSystemIndexOn( MutableAttributeTypeImpl attributeType ) throws Exception
     {
         return store.hasSystemIndexOn( attributeType );
     }
@@ -211,7 +211,7 @@
     /**
      * {@inheritDoc}
      */
-    public final Index<?, Entry, ID> getUserIndex( AttributeType attributeType ) throws IndexNotFoundException
+    public final Index<?, Entry, ID> getUserIndex( MutableAttributeTypeImpl attributeType ) throws IndexNotFoundException
     {
         return store.getUserIndex( attributeType );
     }
@@ -220,7 +220,7 @@
     /**
      * {@inheritDoc}
      */
-    public final Index<?, Entry, ID> getSystemIndex( AttributeType attributeType ) throws IndexNotFoundException
+    public final Index<?, Entry, ID> getSystemIndex( MutableAttributeTypeImpl attributeType ) throws IndexNotFoundException
     {
         return store.getSystemIndex( attributeType );
     }
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/AbstractIndex.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/AbstractIndex.java
index 48ff108..69dde71 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/AbstractIndex.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/AbstractIndex.java
@@ -21,7 +21,7 @@
 
 
 import org.apache.directory.server.i18n.I18n;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -36,7 +36,7 @@
     protected String attributeId;
     
     /** the attribute type resolved for this JdbmIndex */
-    protected AttributeType attributeType;
+    protected MutableAttributeTypeImpl attributeType;
 
     /** the size (number of index entries) for the cache */
     protected int cacheSize = DEFAULT_INDEX_CACHE_SIZE;
@@ -74,7 +74,7 @@
     /**
      * {@inheritDoc}
      */
-    public AttributeType getAttribute()
+    public MutableAttributeTypeImpl getAttribute()
     {
         return attributeType;
     }
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/AbstractStore.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/AbstractStore.java
index 53f4983..952a1d2 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/AbstractStore.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/AbstractStore.java
@@ -51,7 +51,7 @@
 import org.apache.directory.shared.ldap.model.name.Ava;
 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.MatchingRule;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
 import org.slf4j.Logger;
@@ -72,10 +72,10 @@
     public static final int DEFAULT_CACHE_SIZE = 10000;
 
     /** Cached attributes types to avoid lookup all over the code */
-    protected AttributeType OBJECT_CLASS_AT;
-    protected AttributeType ENTRY_CSN_AT;
-    protected AttributeType ENTRY_UUID_AT;
-    protected AttributeType ALIASED_OBJECT_NAME_AT;
+    protected MutableAttributeTypeImpl OBJECT_CLASS_AT;
+    protected MutableAttributeTypeImpl ENTRY_CSN_AT;
+    protected MutableAttributeTypeImpl ENTRY_UUID_AT;
+    protected MutableAttributeTypeImpl ALIASED_OBJECT_NAME_AT;
 
     /** true if initialized */
     protected boolean initialized;
@@ -275,7 +275,7 @@
         for ( String oid : userIndices.keySet() )
         {
             // check that the attributeType has an EQUALITY matchingRule
-            AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
+            MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( oid );
             MatchingRule mr = attributeType.getEquality();
 
             if ( mr != null )
@@ -453,7 +453,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean hasIndexOn( AttributeType attributeType ) throws LdapException
+    public boolean hasIndexOn( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         return hasUserIndexOn( attributeType ) || hasSystemIndexOn( attributeType );
     }
@@ -471,7 +471,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean hasUserIndexOn( AttributeType attributeType ) throws LdapException
+    public boolean hasUserIndexOn( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         return userIndices.containsKey( attributeType.getOid() );
     }
@@ -489,7 +489,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean hasSystemIndexOn( AttributeType attributeType ) throws LdapException
+    public boolean hasSystemIndexOn( MutableAttributeTypeImpl attributeType ) throws LdapException
     {
         return systemIndices.containsKey( attributeType.getOid() );
     }
@@ -525,7 +525,7 @@
     /**
      * {@inheritDoc}
      */
-    public Index<?, E, ID> getIndex( AttributeType attributeType ) throws IndexNotFoundException
+    public Index<?, E, ID> getIndex( MutableAttributeTypeImpl attributeType ) throws IndexNotFoundException
     {
         String id = attributeType.getOid();
 
@@ -564,7 +564,7 @@
     /**
      * {@inheritDoc}
      */
-    public Index<?, E, ID> getUserIndex( AttributeType attributeType ) throws IndexNotFoundException
+    public Index<?, E, ID> getUserIndex( MutableAttributeTypeImpl attributeType ) throws IndexNotFoundException
     {
         String id = attributeType.getOid();
 
@@ -598,7 +598,7 @@
     /**
      * {@inheritDoc}
      */
-    public Index<?, E, ID> getSystemIndex( AttributeType attributeType ) throws IndexNotFoundException
+    public Index<?, E, ID> getSystemIndex( MutableAttributeTypeImpl attributeType ) throws IndexNotFoundException
     {
         String id = attributeType.getOid();
 
@@ -1033,7 +1033,7 @@
         ID id = getEntryId( dn );
         Entry entry = master.get( id );
 
-        for ( AttributeType attributeType : mods.getAttributeTypes() )
+        for ( MutableAttributeTypeImpl attributeType : mods.getAttributeTypes() )
         {
             EntryAttribute attr = mods.get( attributeType );
 
@@ -1195,7 +1195,7 @@
             String newNormType = newAtav.getNormType();
             Object newNormValue = newAtav.getNormValue().get();
 
-            AttributeType newRdnAttrType = schemaManager.lookupAttributeTypeRegistry( newNormType );
+            MutableAttributeTypeImpl newRdnAttrType = schemaManager.lookupAttributeTypeRegistry( newNormType );
 
             entry.add( newRdnAttrType, newAtav.getUpValue() );
 
@@ -1252,7 +1252,7 @@
                 {
                     String oldNormType = oldAtav.getNormType();
                     String oldNormValue = oldAtav.getNormValue().getString();
-                    AttributeType oldRdnAttrType = schemaManager.lookupAttributeTypeRegistry( oldNormType );
+                    MutableAttributeTypeImpl oldRdnAttrType = schemaManager.lookupAttributeTypeRegistry( oldNormType );
                     entry.remove( oldRdnAttrType, oldNormValue );
 
                     if ( hasUserIndexOn( oldNormType ) )
@@ -1728,7 +1728,7 @@
             }
         }
 
-        AttributeType attrType = schemaManager.lookupAttributeTypeRegistry( modsOid );
+        MutableAttributeTypeImpl attrType = schemaManager.lookupAttributeTypeRegistry( modsOid );
 
         /*
          * If there are no attribute values in the modifications then this
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/GenericIndex.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/GenericIndex.java
index a1c6acf..f5e8198 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/GenericIndex.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/GenericIndex.java
@@ -23,7 +23,7 @@
 import java.net.URI;
 
 import org.apache.directory.shared.ldap.model.cursor.Cursor;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -208,7 +208,7 @@
     }
 
 
-    public AttributeType getAttribute()
+    public MutableAttributeTypeImpl getAttribute()
     {
         throw new UnsupportedOperationException();
     }
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Index.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Index.java
index fbef8d4..59cc1d8 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Index.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Index.java
@@ -23,7 +23,7 @@
 import java.net.URI;
 
 import org.apache.directory.shared.ldap.model.cursor.Cursor;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -123,7 +123,7 @@
      *
      * @return the id of the Index's attribute
      */
-    AttributeType getAttribute();
+    MutableAttributeTypeImpl getAttribute();
 
 
     /**
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java
index 86928ba..19bd146 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/Store.java
@@ -35,7 +35,7 @@
 import org.apache.directory.shared.ldap.model.entry.ModificationOperation;
 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;
 
 
@@ -347,7 +347,7 @@
      * User's <strong>or</strong> System's index list 
      * @throws Exception If something went wrong
      */
-    boolean hasIndexOn( AttributeType attributeType ) throws Exception;
+    boolean hasIndexOn( MutableAttributeTypeImpl attributeType ) throws Exception;
 
 
     /**
@@ -367,7 +367,7 @@
      * User's index list 
      * @throws Exception If something went wrong
      */
-    boolean hasUserIndexOn( AttributeType attributeType ) throws Exception;
+    boolean hasUserIndexOn( MutableAttributeTypeImpl attributeType ) throws Exception;
 
 
     /**
@@ -387,7 +387,7 @@
      * System's index list 
      * @throws Exception If something went wrong
      */
-    boolean hasSystemIndexOn( AttributeType attributeType ) throws Exception;
+    boolean hasSystemIndexOn( MutableAttributeTypeImpl attributeType ) throws Exception;
 
 
     /**
@@ -405,7 +405,7 @@
      * @return The associated user <strong>or</strong> system index
      * @throws IndexNotFoundException If the index does not exist
      */
-    Index<?, E, ID> getIndex( AttributeType attributeType ) throws IndexNotFoundException;
+    Index<?, E, ID> getIndex( MutableAttributeTypeImpl attributeType ) throws IndexNotFoundException;
 
 
     /**
@@ -423,7 +423,7 @@
      * @return The associated user index
      * @throws IndexNotFoundException If the index does not exist
      */
-    Index<?, E, ID> getUserIndex( AttributeType attributeType ) throws IndexNotFoundException;
+    Index<?, E, ID> getUserIndex( MutableAttributeTypeImpl attributeType ) throws IndexNotFoundException;
 
 
     /**
@@ -441,7 +441,7 @@
      * @return The associated system index
      * @throws IndexNotFoundException If the index does not exist
      */
-    Index<?, E, ID> getSystemIndex( AttributeType attributeType ) throws IndexNotFoundException;
+    Index<?, E, ID> getSystemIndex( MutableAttributeTypeImpl attributeType ) throws IndexNotFoundException;
 
 
     /**
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/impl/avl/AvlIndex.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/impl/avl/AvlIndex.java
index c35d2a0..4a51244 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/impl/avl/AvlIndex.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/impl/avl/AvlIndex.java
@@ -30,7 +30,7 @@
 import org.apache.directory.shared.ldap.model.cursor.Cursor;
 import org.apache.directory.shared.ldap.model.cursor.Tuple;
 import org.apache.directory.shared.ldap.model.entry.BinaryValue;
-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;
@@ -61,7 +61,7 @@
     }
 
 
-    public void init( SchemaManager schemaManager, AttributeType attributeType ) throws Exception
+    public void init( SchemaManager schemaManager, MutableAttributeTypeImpl attributeType ) throws Exception
     {
         this.attributeType = attributeType;
 
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/impl/avl/AvlRdnIndex.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/impl/avl/AvlRdnIndex.java
index fff4c88..763efc9 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/impl/avl/AvlRdnIndex.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/impl/avl/AvlRdnIndex.java
@@ -24,7 +24,7 @@
 import org.apache.directory.server.i18n.I18n;
 import org.apache.directory.server.xdbm.ParentIdAndRdn;
 import org.apache.directory.server.xdbm.ParentIdAndRdnComparator;
-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.SchemaManager;
 
@@ -48,7 +48,7 @@
     }
 
 
-    public void init( SchemaManager schemaManager, AttributeType attributeType ) throws Exception
+    public void init( SchemaManager schemaManager, MutableAttributeTypeImpl attributeType ) throws Exception
     {
         this.attributeType = attributeType;
 
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/ApproximateCursor.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/ApproximateCursor.java
index 6cb8715..9ebe694 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/ApproximateCursor.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/ApproximateCursor.java
@@ -29,7 +29,7 @@
 import org.apache.directory.shared.ldap.model.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 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;
 
 
 /**
@@ -65,7 +65,7 @@
     {
         this.approximateEvaluator = approximateEvaluator;
 
-        AttributeType attributeType = approximateEvaluator.getExpression().getAttributeType();
+        MutableAttributeTypeImpl attributeType = approximateEvaluator.getExpression().getAttributeType();
         Value<V> value = approximateEvaluator.getExpression().getValue();
         
         if ( db.hasIndexOn( attributeType ) )
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/ApproximateEvaluator.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/ApproximateEvaluator.java
index 88183c0..51a2e86 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/ApproximateEvaluator.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/ApproximateEvaluator.java
@@ -30,7 +30,7 @@
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.entry.Value;
 import org.apache.directory.shared.ldap.model.filter.ApproximateNode;
-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.SchemaManager;
 
@@ -96,11 +96,11 @@
             // TODO check to see if descendant handling is necessary for the
             // index so we can match properly even when for example a name
             // attribute is used instead of more specific commonName
-            Iterator<AttributeType> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
+            Iterator<MutableAttributeTypeImpl> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
 
             while ( descendants.hasNext() )
             {
-                AttributeType descendant = descendants.next();
+                MutableAttributeTypeImpl descendant = descendants.next();
 
                 attr = entry.get( descendant );
 
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EqualityCursor.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EqualityCursor.java
index e276f75..708058e 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EqualityCursor.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EqualityCursor.java
@@ -29,7 +29,7 @@
 import org.apache.directory.shared.ldap.model.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 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 @@
     {
         this.equalityEvaluator = equalityEvaluator;
 
-        AttributeType attributeType = equalityEvaluator.getExpression().getAttributeType();
+        MutableAttributeTypeImpl attributeType = equalityEvaluator.getExpression().getAttributeType();
         Value<V> value = equalityEvaluator.getExpression().getValue();
         
         if ( db.hasIndexOn( attributeType ) )
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EqualityEvaluator.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EqualityEvaluator.java
index 5e314cd..865205f 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EqualityEvaluator.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/EqualityEvaluator.java
@@ -30,7 +30,7 @@
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.entry.Value;
 import org.apache.directory.shared.ldap.model.filter.EqualityNode;
-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.SchemaManager;
 import org.apache.directory.shared.ldap.model.schema.comparators.ByteArrayComparator;
@@ -131,11 +131,11 @@
             // TODO check to see if descendant handling is necessary for the
             // index so we can match properly even when for example a name
             // attribute is used instead of more specific commonName
-            Iterator<AttributeType> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
+            Iterator<MutableAttributeTypeImpl> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
 
             while ( descendants.hasNext() )
             {
-                AttributeType descendant = descendants.next();
+                MutableAttributeTypeImpl descendant = descendants.next();
 
                 attr = entry.get( descendant );
 
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/GreaterEqCursor.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/GreaterEqCursor.java
index fdf106a..df3909b 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/GreaterEqCursor.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/GreaterEqCursor.java
@@ -29,7 +29,7 @@
 import org.apache.directory.server.xdbm.Store;
 import org.apache.directory.shared.ldap.model.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.model.entry.Entry;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -70,7 +70,7 @@
     {
         this.greaterEqEvaluator = greaterEqEvaluator;
 
-        AttributeType attributeType = greaterEqEvaluator.getExpression().getAttributeType();
+        MutableAttributeTypeImpl attributeType = greaterEqEvaluator.getExpression().getAttributeType();
         
         if ( db.hasIndexOn( attributeType ) )
         {
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/GreaterEqEvaluator.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/GreaterEqEvaluator.java
index 1c1625d..07200d6 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/GreaterEqEvaluator.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/GreaterEqEvaluator.java
@@ -30,7 +30,7 @@
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.entry.Value;
 import org.apache.directory.shared.ldap.model.filter.GreaterEqNode;
-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.SchemaManager;
 
@@ -129,11 +129,11 @@
             // TODO check to see if descendant handling is necessary for the
             // index so we can match properly even when for example a name
             // attribute is used instead of more specific commonName
-            Iterator<AttributeType> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
+            Iterator<MutableAttributeTypeImpl> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
 
             while ( descendants.hasNext() )
             {
-                AttributeType descendant = descendants.next();
+                MutableAttributeTypeImpl descendant = descendants.next();
 
                 attr = entry.get( descendant );
 
@@ -180,11 +180,11 @@
             // TODO check to see if descendant handling is necessary for the
             // index so we can match properly even when for example a name
             // attribute is used instead of more specific commonName
-            Iterator<AttributeType> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
+            Iterator<MutableAttributeTypeImpl> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
 
             while ( descendants.hasNext() )
             {
-                AttributeType descendant = descendants.next();
+                MutableAttributeTypeImpl descendant = descendants.next();
 
                 attr = entry.get( descendant );
 
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LeafEvaluator.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LeafEvaluator.java
index 0cac4f6..fc43b3a 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LeafEvaluator.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LeafEvaluator.java
@@ -24,7 +24,7 @@
 import org.apache.directory.server.xdbm.search.Evaluator;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.filter.SimpleNode;
-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.Normalizer;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
@@ -48,7 +48,7 @@
     protected final SchemaManager schemaManager;
     
     /** The AttributeType we will use for the evaluation */
-    protected final AttributeType attributeType;
+    protected final MutableAttributeTypeImpl attributeType;
     
     /** The associated normalizer */
     protected Normalizer normalizer;
@@ -73,7 +73,7 @@
     /**
      * @return The AttributeType
      */
-    public AttributeType getAttributeType()
+    public MutableAttributeTypeImpl getAttributeType()
     {
         return attributeType;
     }
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LessEqCursor.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LessEqCursor.java
index 8bf9ced..7ecb53d 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LessEqCursor.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LessEqCursor.java
@@ -29,7 +29,7 @@
 import org.apache.directory.server.xdbm.Store;
 import org.apache.directory.shared.ldap.model.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.model.entry.Entry;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -70,7 +70,7 @@
     {
         this.lessEqEvaluator = lessEqEvaluator;
 
-        AttributeType attributeType = lessEqEvaluator.getExpression().getAttributeType();
+        MutableAttributeTypeImpl attributeType = lessEqEvaluator.getExpression().getAttributeType();
         
         if ( db.hasIndexOn( attributeType ) )
         {
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LessEqEvaluator.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LessEqEvaluator.java
index 34efd14..f4e6458 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LessEqEvaluator.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/LessEqEvaluator.java
@@ -30,7 +30,7 @@
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.entry.Value;
 import org.apache.directory.shared.ldap.model.filter.LessEqNode;
-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.SchemaManager;
 
@@ -137,11 +137,11 @@
             // TODO check to see if descendant handling is necessary for the
             // index so we can match properly even when for example a name
             // attribute is used instead of more specific commonName
-            Iterator<AttributeType> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
+            Iterator<MutableAttributeTypeImpl> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
 
             while ( descendants.hasNext() )
             {
-                AttributeType descendant = descendants.next();
+                MutableAttributeTypeImpl descendant = descendants.next();
 
                 attr = entry.get( descendant );
 
@@ -177,11 +177,11 @@
             // TODO check to see if descendant handling is necessary for the
             // index so we can match properly even when for example a name
             // attribute is used instead of more specific commonName
-            Iterator<AttributeType> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
+            Iterator<MutableAttributeTypeImpl> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
 
             while ( descendants.hasNext() )
             {
-                AttributeType descendant = descendants.next();
+                MutableAttributeTypeImpl descendant = descendants.next();
 
                 attr = entry.get( descendant );
 
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/PresenceCursor.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/PresenceCursor.java
index cc11564..4cea76f 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/PresenceCursor.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/PresenceCursor.java
@@ -27,7 +27,7 @@
 import org.apache.directory.server.xdbm.Store;
 import org.apache.directory.shared.ldap.model.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.model.entry.Entry;
-import org.apache.directory.shared.ldap.model.schema.AttributeType;
+import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl;
 
 
 /**
@@ -47,7 +47,7 @@
     public PresenceCursor( Store<Entry, ID> db, PresenceEvaluator<ID> presenceEvaluator ) throws Exception
     {
         this.presenceEvaluator = presenceEvaluator;
-        AttributeType type = presenceEvaluator.getAttributeType();
+        MutableAttributeTypeImpl type = presenceEvaluator.getAttributeType();
 
         // we don't maintain a presence index for objectClass, entryUUID, and entryCSN
         // as it doesn't make sense because every entry has such an attribute
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/PresenceEvaluator.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/PresenceEvaluator.java
index edf2039..8e19b9d 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/PresenceEvaluator.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/PresenceEvaluator.java
@@ -29,7 +29,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.filter.PresenceNode;
-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;
 
 
@@ -48,7 +48,7 @@
     private final Store<Entry, ID> db;
 
     /** The AttributeType we will use for the evaluation */
-    private final AttributeType attributeType;
+    private final MutableAttributeTypeImpl attributeType;
 
     /** The SchemaManager instance */
     private final SchemaManager schemaManager;
@@ -82,7 +82,7 @@
     }
 
 
-    public AttributeType getAttributeType()
+    public MutableAttributeTypeImpl getAttributeType()
     {
         return attributeType;
     }
@@ -151,11 +151,11 @@
             // TODO check to see if descendant handling is necessary for the
             // index so we can match properly even when for example a name
             // attribute is used instead of more specific commonName
-            Iterator<AttributeType> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
+            Iterator<MutableAttributeTypeImpl> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
 
             do
             {
-                AttributeType descendant = descendants.next();
+                MutableAttributeTypeImpl descendant = descendants.next();
 
                 attr = entry.get( descendant );
 
diff --git a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/SubstringEvaluator.java b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/SubstringEvaluator.java
index 00fd79d..48711ad 100644
--- a/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/SubstringEvaluator.java
+++ b/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/SubstringEvaluator.java
@@ -33,7 +33,7 @@
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.entry.Value;
 import org.apache.directory.shared.ldap.model.filter.SubstringNode;
-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;
@@ -60,7 +60,7 @@
     private final Pattern regex;
 
     /** The AttributeType we will use for the evaluation */
-    private final AttributeType attributeType;
+    private final MutableAttributeTypeImpl attributeType;
 
     /** The associated normalizer */
     private final Normalizer normalizer;
@@ -289,11 +289,11 @@
             // TODO check to see if descendant handling is necessary for the
             // index so we can match properly even when for example a name
             // attribute is used instead of more specific commonName
-            Iterator<AttributeType> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
+            Iterator<MutableAttributeTypeImpl> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
 
             while ( descendants.hasNext() )
             {
-                AttributeType descendant = descendants.next();
+                MutableAttributeTypeImpl descendant = descendants.next();
 
                 attr = entry.get( descendant );
 
@@ -406,11 +406,11 @@
             // TODO check to see if descendant handling is necessary for the
             // index so we can match properly even when for example a name
             // attribute is used instead of more specific commonName
-            Iterator<AttributeType> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
+            Iterator<MutableAttributeTypeImpl> descendants = schemaManager.getAttributeTypeRegistry().descendants( attributeType );
 
             while ( descendants.hasNext() )
             {
-                AttributeType descendant = descendants.next();
+                MutableAttributeTypeImpl descendant = descendants.next();
 
                 attr = entry.get( descendant );
 
diff --git a/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/AbstractStoreTest.java b/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/AbstractStoreTest.java
index 952c44d..bfa932b 100644
--- a/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/AbstractStoreTest.java
+++ b/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/AbstractStoreTest.java
@@ -44,7 +44,7 @@
 import org.apache.directory.shared.ldap.model.entry.Modification;
 import org.apache.directory.shared.ldap.model.entry.ModificationOperation;
 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.SchemaManager;
 import org.apache.directory.shared.ldap.schemaextractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schemaextractor.impl.DefaultSchemaLdifExtractor;
@@ -74,13 +74,13 @@
     private static Dn EXAMPLE_COM;
     
     /** The OU AttributType instance */
-    private static AttributeType OU_AT;
+    private static MutableAttributeTypeImpl OU_AT;
 
     /** The CN AttributType instance */
-    private static AttributeType CN_AT;
+    private static MutableAttributeTypeImpl CN_AT;
 
     /** The UID AttributType instance */
-    private static AttributeType UID_AT;
+    private static MutableAttributeTypeImpl UID_AT;
 
 
     @BeforeClass
@@ -332,7 +332,7 @@
         Dn dn = new Dn( schemaManager, "cn=JOhnny WAlkeR,ou=Sales,o=Good Times Co." );
 
         List<Modification> mods = new ArrayList<Modification>();
-        AttributeType csnAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.ENTRY_CSN_AT );
+        MutableAttributeTypeImpl csnAt = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.ENTRY_CSN_AT );
         EntryAttribute attrib = new DefaultEntryAttribute( csnAt );
         
         CsnFactory csnF = new CsnFactory( 0 );
diff --git a/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/impl/avl/AvlStoreTest.java b/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/impl/avl/AvlStoreTest.java
index 65daaac..7f9776e 100644
--- a/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/impl/avl/AvlStoreTest.java
+++ b/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/impl/avl/AvlStoreTest.java
@@ -57,7 +57,7 @@
 import org.apache.directory.shared.ldap.model.exception.LdapSchemaViolationException;
 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.schemaextractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schemaextractor.impl.DefaultSchemaLdifExtractor;
@@ -88,13 +88,13 @@
     private static Dn EXAMPLE_COM;
 
     /** The OU AttributeType instance */
-    private static AttributeType OU_AT;
+    private static MutableAttributeTypeImpl OU_AT;
 
     /** The DC AttributeType instance */
-    private static AttributeType DC_AT;
+    private static MutableAttributeTypeImpl DC_AT;
     
     /** The ApacheAlias AttributeType instance */
-    private static AttributeType APACHE_ALIAS_AT;
+    private static MutableAttributeTypeImpl APACHE_ALIAS_AT;
 
 
     @BeforeClass
diff --git a/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/FilterNormalizingVisitor.java b/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/FilterNormalizingVisitor.java
index b141640..6aaa79e 100644
--- a/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/FilterNormalizingVisitor.java
+++ b/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/FilterNormalizingVisitor.java
@@ -38,7 +38,7 @@
 import org.apache.directory.shared.ldap.model.filter.SimpleNode;
 import org.apache.directory.shared.ldap.model.filter.SubstringNode;
 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.SchemaManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -138,7 +138,7 @@
         {
             Value<?> normalized = null;
 
-            AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( attribute );
+            MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( attribute );
 
             if ( attributeType.getSyntax().isHumanReadable() )
             {
diff --git a/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java b/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java
index 2e5c7bf..3bb9f3e 100644
--- a/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java
+++ b/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java
@@ -48,7 +48,7 @@
 import org.apache.directory.shared.ldap.model.entry.StringValue;
 import org.apache.directory.shared.ldap.model.filter.GreaterEqNode;
 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.MutableLdapSyntaxImpl;
 import org.apache.directory.shared.ldap.model.schema.MutableMatchingRuleImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
@@ -164,7 +164,7 @@
     @Test
     public void testCursorIndexed() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTALCODE_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTALCODE_AT_OID );
         GreaterEqNode node = new GreaterEqNode( at, new StringValue( at, "3" ) );
         GreaterEqEvaluator evaluator = new GreaterEqEvaluator( node, store, schemaManager );
         GreaterEqCursor<String, Long> cursor = new GreaterEqCursor<String, Long>( store, evaluator );
@@ -401,7 +401,7 @@
     @Test
     public void testCursorNotIndexed() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTOFFICEBOX_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTOFFICEBOX_AT_OID );
         GreaterEqNode node = new GreaterEqNode( at, new StringValue( at, "3" ) );
         GreaterEqEvaluator evaluator = new GreaterEqEvaluator( node, store, schemaManager );
         GreaterEqCursor<String, Long> cursor = new GreaterEqCursor<String, Long>( store, evaluator );
@@ -551,7 +551,7 @@
     @Test
     public void testEvaluatorIndexed() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTALCODE_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTALCODE_AT_OID );
         GreaterEqNode node = new GreaterEqNode( at, new StringValue( at, "3" ) );
         GreaterEqEvaluator evaluator = new GreaterEqEvaluator( node, store, schemaManager );
         ForwardIndexEntry<String, Entry, Long> indexEntry = new ForwardIndexEntry<String, Entry, Long>();
@@ -596,7 +596,7 @@
     @Test
     public void testEvaluatorWithDescendantValue() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.STREET_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.STREET_AT_OID );
         GreaterEqNode node = new GreaterEqNode( at, new StringValue( at, "2" ) );
         GreaterEqEvaluator evaluator = new GreaterEqEvaluator( node, store, schemaManager );
         ForwardIndexEntry<String, Entry, Long> indexEntry = new ForwardIndexEntry<String, Entry, Long>();
@@ -623,7 +623,7 @@
     @Test
     public void testEvaluatorWithoutDescendants() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.C_POSTALCODE_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.C_POSTALCODE_AT_OID );
         GreaterEqNode node = new GreaterEqNode( at, new StringValue( at, "2" ) );
 
         GreaterEqEvaluator evaluator = new GreaterEqEvaluator( node, store, schemaManager );
@@ -641,7 +641,7 @@
     @Test
     public void testEvaluatorNotIndexed() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTOFFICEBOX_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTOFFICEBOX_AT_OID );
         GreaterEqNode node = new GreaterEqNode( at, new StringValue( at, "3" ) );
 
         GreaterEqEvaluator evaluator = new GreaterEqEvaluator( node, store, schemaManager );
@@ -688,7 +688,7 @@
     public void testEvaluatorAttributeNoMatchingRule() throws Exception
     {
         MutableLdapSyntaxImpl syntax = new BogusSyntax( 1 );
-        AttributeType at = new AttributeType( SchemaConstants.ATTRIBUTE_TYPES_AT_OID + ".2000" );
+        MutableAttributeTypeImpl at = new MutableAttributeTypeImpl( SchemaConstants.ATTRIBUTE_TYPES_AT_OID + ".2000" );
         at.addName( "bogus" );
         at.setSchemaName( "other" );
         at.setSyntax( syntax );
@@ -717,7 +717,7 @@
         mr.setSyntax( syntax );
         mr.setLdapComparator( new StringComparator( "1.1" ) );
 
-        AttributeType at = new AttributeType( SchemaConstants.ATTRIBUTE_TYPES_AT_OID + ".5000" );
+        MutableAttributeTypeImpl at = new MutableAttributeTypeImpl( SchemaConstants.ATTRIBUTE_TYPES_AT_OID + ".5000" );
         at.addName( "bogus" );
         at.setSchemaName( "other" );
         at.setSyntax( syntax );
diff --git a/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java b/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java
index e71ca02..6c06cce 100644
--- a/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java
+++ b/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java
@@ -48,7 +48,7 @@
 import org.apache.directory.shared.ldap.model.entry.StringValue;
 import org.apache.directory.shared.ldap.model.filter.LessEqNode;
 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.MutableLdapSyntaxImpl;
 import org.apache.directory.shared.ldap.model.schema.MutableMatchingRuleImpl;
 import org.apache.directory.shared.ldap.model.schema.SchemaManager;
@@ -164,7 +164,7 @@
     @Test
     public void testCursorIndexed() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTALCODE_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTALCODE_AT_OID );
         LessEqNode node = new LessEqNode( at, new StringValue( at, "3" ) );
         LessEqEvaluator evaluator = new LessEqEvaluator( node, store, schemaManager );
         LessEqCursor<String, Long> cursor = new LessEqCursor<String, Long>( store, evaluator );
@@ -421,7 +421,7 @@
     @Test
     public void testCursorNotIndexed() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTOFFICEBOX_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTOFFICEBOX_AT_OID );
         LessEqNode node = new LessEqNode( at, new StringValue( at, "3" ) );
         LessEqEvaluator evaluator = new LessEqEvaluator( node, store, schemaManager );
         LessEqCursor<String, Long> cursor = new LessEqCursor<String, Long>( store, evaluator );
@@ -575,7 +575,7 @@
     @Test
     public void testEvaluatorIndexed() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTALCODE_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTALCODE_AT_OID );
         LessEqNode node = new LessEqNode( at, new StringValue( at, "3" ) );
 
         LessEqEvaluator evaluator = new LessEqEvaluator( node, store, schemaManager );
@@ -621,7 +621,7 @@
     @Test
     public void testEvaluatorWithDescendantValue() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.STREET_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.STREET_AT_OID );
         LessEqNode node = new LessEqNode( at, new StringValue( at, "2" ) );
 
         LessEqEvaluator evaluator = new LessEqEvaluator( node, store, schemaManager );
@@ -649,7 +649,7 @@
     @Test
     public void testEvaluatorWithoutDescendants() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.C_POSTALCODE_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.C_POSTALCODE_AT_OID );
         LessEqNode node = new LessEqNode( at, new StringValue( at, "2" ) );
 
         LessEqEvaluator evaluator = new LessEqEvaluator( node, store, schemaManager );
@@ -667,7 +667,7 @@
     @Test
     public void testEvaluatorNotIndexed() throws Exception
     {
-        AttributeType at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTOFFICEBOX_AT_OID );
+        MutableAttributeTypeImpl at = schemaManager.lookupAttributeTypeRegistry( SchemaConstants.POSTOFFICEBOX_AT_OID );
         LessEqNode node = new LessEqNode( at, new StringValue( at, "3" ) );
 
         LessEqEvaluator evaluator = new LessEqEvaluator( node, store, schemaManager );
@@ -714,7 +714,7 @@
     public void testEvaluatorAttributeNoMatchingRule() throws Exception
     {
         MutableLdapSyntaxImpl syntax = new BogusSyntax( 1 );
-        AttributeType at = new AttributeType( SchemaConstants.ATTRIBUTE_TYPES_AT_OID + ".2000" );
+        MutableAttributeTypeImpl at = new MutableAttributeTypeImpl( SchemaConstants.ATTRIBUTE_TYPES_AT_OID + ".2000" );
         at.addName( "bogus" );
         at.setSchemaName( "other" );
         at.setSyntax( syntax );
@@ -745,7 +745,7 @@
         mr.setSyntax( syntax );
         mr.setLdapComparator( new StringComparator( "1.1" ) );
 
-        AttributeType at = new AttributeType( SchemaConstants.ATTRIBUTE_TYPES_AT_OID + ".3000" );
+        MutableAttributeTypeImpl at = new MutableAttributeTypeImpl( SchemaConstants.ATTRIBUTE_TYPES_AT_OID + ".3000" );
         at.addName( "bogus" );
         at.setSchemaName( "other" );
         at.setSyntax( syntax );
diff --git a/xdbm-tools/src/main/java/org/apache/directory/server/core/partition/impl/btree/gui/PartitionFrame.java b/xdbm-tools/src/main/java/org/apache/directory/server/core/partition/impl/btree/gui/PartitionFrame.java
index c47612c..9b8f5b7 100644
--- a/xdbm-tools/src/main/java/org/apache/directory/server/core/partition/impl/btree/gui/PartitionFrame.java
+++ b/xdbm-tools/src/main/java/org/apache/directory/server/core/partition/impl/btree/gui/PartitionFrame.java
@@ -73,7 +73,7 @@
 import org.apache.directory.shared.ldap.model.ldif.LdifReader;
 import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
 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.SchemaManager;
 import org.apache.directory.shared.util.Strings;
 import org.slf4j.Logger;
@@ -790,7 +790,7 @@
      */
     public void showIndexDialog( String idxAttr ) throws Exception
     {
-        AttributeType attributeType = schemaManager.lookupAttributeTypeRegistry( idxAttr );
+        MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( idxAttr );
         
         Index index;
         boolean isSystem = partition.hasSystemIndexOn( attributeType );