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 fb038d5..7a25ee0 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
@@ -21,12 +21,14 @@
 
 
 import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.decorators.MessageDecorator;
 import org.apache.directory.shared.ldap.message.extended.NoticeOfDisconnect;
 import org.apache.directory.shared.ldap.message.spi.BinaryAttributeDetector;
 import org.apache.directory.shared.ldap.model.exception.ResponseCarryingMessageException;
 import org.apache.directory.shared.ldap.model.message.Control;
 import org.apache.directory.shared.ldap.model.message.ExtendedRequest;
 import org.apache.directory.shared.ldap.model.message.ExtendedRequestImpl;
+import org.apache.directory.shared.ldap.model.message.Message;
 import org.apache.directory.shared.ldap.model.message.Request;
 import org.apache.directory.shared.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.model.message.ResultResponse;
@@ -87,7 +89,9 @@
         session.setAttribute( "maxPDUSize", ldapServer.getDirectoryService().getMaxPDUSize() );
         
         // Last, store the message container
-        LdapMessageContainer ldapMessageContainer = new LdapMessageContainer( 
+        LdapMessageContainer<? extends MessageDecorator<Message>> ldapMessageContainer = 
+            new LdapMessageContainer<MessageDecorator<Message>>( 
+            ldapServer.getDirectoryService().getLdapCodecService(),
             new BinaryAttributeDetector()
             {
                 public boolean isBinary( String id )
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 d59f697..81f80c3 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
@@ -460,7 +460,8 @@
                 }
             }
 
-            pagedResultsControl = new PagedResultsDecorator();
+            pagedResultsControl = new PagedResultsDecorator( ldapServer.getDirectoryService()
+                .getLdapCodecService() );
             pagedResultsControl.setCritical( true );
             pagedResultsControl.setSize( 0 );
             req.getResultResponse().addControl( pagedResultsControl );
@@ -517,7 +518,8 @@
             // cursor stored into the session (if any)
             int cookieValue = pagedSearchControl.getCookieValue();
             PagedSearchContext psCookie = session.removePagedSearchContext( cookieValue );
-            pagedResultsControl = new PagedResultsDecorator();
+            pagedResultsControl = new PagedResultsDecorator( ldapServer.getDirectoryService()
+                .getLdapCodecService() );
             pagedResultsControl.setCookie( psCookie.getCookie() );
             pagedResultsControl.setSize( 0 );
             pagedResultsControl.setCritical( true );
@@ -532,7 +534,8 @@
         }
         else
         {
-            pagedResultsControl = new PagedResultsDecorator();
+            pagedResultsControl = new PagedResultsDecorator( ldapServer.getDirectoryService()
+                .getLdapCodecService() );
             pagedResultsControl.setSize( 0 );
             pagedResultsControl.setCritical( true );
         }
@@ -649,7 +652,8 @@
 
                 session.addPagedSearchContext( pagedContext );
                 cookie = pagedContext.getCookie();
-                pagedResultsControl = new PagedResultsDecorator();
+                pagedResultsControl = new PagedResultsDecorator( ldapServer.getDirectoryService()
+                    .getLdapCodecService() );
                 pagedResultsControl.setCookie( cookie );
                 pagedResultsControl.setSize( 0 );
                 pagedResultsControl.setCritical( true );
@@ -688,7 +692,8 @@
 
                 // get the cookie
                 cookie = pagedContext.getCookie();
-                pagedResultsControl = new PagedResultsDecorator();
+                pagedResultsControl = new PagedResultsDecorator( ldapServer.getDirectoryService()
+                    .getLdapCodecService() );
                 pagedResultsControl.setCookie( cookie );
                 pagedResultsControl.setSize( 0 );
                 pagedResultsControl.setCritical( true );
@@ -711,7 +716,8 @@
                 session.addPagedSearchContext( pagedContext );
 
                 cookie = pagedContext.getCookie();
-                pagedResultsControl = new PagedResultsDecorator();
+                pagedResultsControl = new PagedResultsDecorator( ldapServer.getDirectoryService()
+                    .getLdapCodecService() );
                 pagedResultsControl.setCookie( cookie );
                 pagedResultsControl.setSize( 0 );
                 pagedResultsControl.setCritical( true );
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/AbstractSaslCallbackHandler.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/AbstractSaslCallbackHandler.java
index 784bfff..d1b1d93 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/AbstractSaslCallbackHandler.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/bind/AbstractSaslCallbackHandler.java
@@ -240,7 +240,8 @@
         {
             Control[] connCtls = bindRequest.getControls().values().toArray( EMPTY );
             env.put( DirectoryService.JNDI_KEY, directoryService );
-            ctx = new InitialLdapContext( env, JndiUtils.toJndiControls( connCtls ) );
+            ctx = new InitialLdapContext( env, JndiUtils.toJndiControls( directoryService.getLdapCodecService(), 
+                connCtls ) );
         }
         catch ( Exception e )
         {
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 d8c1c83..f1cf752 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
@@ -29,6 +29,8 @@
 
 import org.apache.directory.server.core.event.EventType;
 import org.apache.directory.shared.i18n.I18n;
+import org.apache.directory.shared.ldap.codec.DefaultLdapCodecService;
+import org.apache.directory.shared.ldap.codec.ILdapCodecService;
 import org.apache.directory.shared.ldap.codec.controls.replication.syncmodifydn.SyncModifyDnDecorator;
 import org.apache.directory.shared.ldap.model.entry.DefaultEntry;
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
@@ -59,11 +61,14 @@
     private static final Logger LOG = LoggerFactory.getLogger( ReplicaEventMessage.class );
 
     private static SchemaManager schemaManager;
+    
+    private transient ILdapCodecService codec;
 
 
     public ReplicaEventMessage()
     {
         // used by deserializer
+        codec = new DefaultLdapCodecService();
     }
 
 
@@ -76,6 +81,7 @@
 
     public ReplicaEventMessage( SyncModifyDnDecorator modDnControl, Entry entry )
     {
+        codec = new DefaultLdapCodecService();
         this.modDnControl = modDnControl;
         this.entry = entry;
     }
@@ -107,7 +113,7 @@
         {
             SyncModifyDnType modDnType = SyncModifyDnType.getModifyDnType( in.readShort() );
             
-            modDnControl = new SyncModifyDnDecorator();
+            modDnControl = new SyncModifyDnDecorator( codec );
             modDnControl.setModDnType( modDnType );
             
             modDnControl.setEntryDn( Unicode.readUTF(in) );
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 d04259a..660d200 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
@@ -42,16 +42,12 @@
 import org.apache.directory.shared.ldap.codec.controls.ManageDsaITDecorator;
 import org.apache.directory.shared.ldap.codec.controls.replication.syncDoneValue.ISyncDoneValue;
 import org.apache.directory.shared.ldap.codec.controls.replication.syncDoneValue.SyncDoneValueDecorator;
-import org.apache.directory.shared.ldap.codec.controls.replication.syncDoneValue.SyncDoneValueControlDecoder;
 import org.apache.directory.shared.ldap.codec.controls.replication.syncInfoValue.ISyncInfoValue;
-import org.apache.directory.shared.ldap.codec.controls.replication.syncInfoValue.SyncInfoValueControlDecoder;
+import org.apache.directory.shared.ldap.codec.controls.replication.syncInfoValue.SyncInfoValueDecorator;
 import org.apache.directory.shared.ldap.codec.controls.replication.syncRequestValue.SyncRequestValueDecorator;
-import org.apache.directory.shared.ldap.codec.controls.replication.syncStateValue.ISyncStateValue;
 import org.apache.directory.shared.ldap.codec.controls.replication.syncStateValue.SyncStateValueDecorator;
-import org.apache.directory.shared.ldap.codec.controls.replication.syncStateValue.SyncStateValueControlDecoder;
 import org.apache.directory.shared.ldap.codec.controls.replication.syncmodifydn.ISyncModifyDn;
 import org.apache.directory.shared.ldap.codec.controls.replication.syncmodifydn.SyncModifyDnDecorator;
-import org.apache.directory.shared.ldap.codec.controls.replication.syncmodifydn.SyncModifyDnDecorator;
 import org.apache.directory.shared.ldap.message.control.replication.SyncModifyDnType;
 import org.apache.directory.shared.ldap.message.control.replication.SyncStateTypeEnum;
 import org.apache.directory.shared.ldap.message.control.replication.SynchronizationModeEnum;
@@ -125,9 +121,6 @@
     /** the schema manager */
     private SchemaManager schemaManager;
 
-    /** the decoder for syncinfovalue control */
-    private SyncInfoValueControlDecoder decoder = new SyncInfoValueControlDecoder();
-
     /** the cookie file */
     private File cookieFile;
 
@@ -137,12 +130,6 @@
     /** the core session */
     private CoreSession session;
 
-    private SyncDoneValueControlDecoder syncDoneControlDecoder = new SyncDoneValueControlDecoder();
-
-    private SyncStateValueControlDecoder syncStateControlDecoder = new SyncStateValueControlDecoder();
-
-    private SyncModifyDnControlDecoder syncModifyDnControlDecoder = new SyncModifyDnControlDecoder();
-
     /** attributes on which modification should be ignored */
     private static final String[] MOD_IGNORE_AT = new String[]
         { SchemaConstants.ENTRY_UUID_AT, SchemaConstants.ENTRY_CSN_AT, SchemaConstants.MODIFIERS_NAME_AT,
@@ -278,7 +265,7 @@
 
         if ( !config.isChaseReferrals() )
         {
-            searchRequest.addControl( new ManageDsaITDecorator() );
+            searchRequest.addControl( new ManageDsaITDecorator( directoryService.getLdapCodecService() ) );
         }
     }
 
@@ -288,18 +275,8 @@
         LOG.debug( "///////////////// handleSearchDone //////////////////" );
 
         Control ctrl = searchDone.getControls().get( ISyncDoneValue.OID );
-        SyncDoneValueDecorator syncDoneCtrl = new SyncDoneValueDecorator();
-        try
-        {
-            if ( ctrl != null )
-            {
-                syncDoneCtrl = ( SyncDoneValueDecorator ) syncDoneControlDecoder.decode( ctrl.getValue(), syncDoneCtrl );
-            }
-        }
-        catch ( Exception e )
-        {
-            LOG.error( "Failed to decode the syncDoneControlCodec", e );
-        }
+        SyncDoneValueDecorator syncDoneCtrl = new SyncDoneValueDecorator( directoryService.getLdapCodecService() );
+        syncDoneCtrl.setDecorated( ( ISyncDoneValue ) ctrl );
 
         if ( syncDoneCtrl.getCookie() != null )
         {
@@ -326,23 +303,13 @@
 
         LOG.debug( "------------- starting handleSearchResult ------------" );
 
-        SyncStateValueDecorator syncStateCtrl = new SyncStateValueDecorator();
+        SyncStateValueDecorator syncStateCtrl = new SyncStateValueDecorator( directoryService.getLdapCodecService() );
 
         try
         {
             Entry remoteEntry = syncResult.getEntry();
 
-            Control ctrl = syncResult.getControls().get( ISyncStateValue.OID );
-
-            try
-            {
-                syncStateCtrl = ( SyncStateValueDecorator ) syncStateControlDecoder.decode( ctrl.getValue(),
-                    syncStateCtrl );
-            }
-            catch ( Exception e )
-            {
-                LOG.error( "Failed to decode syncStateControl", e );
-            }
+            syncStateCtrl.setDecorated( syncStateCtrl );
 
             if ( syncStateCtrl.getCookie() != null )
             {
@@ -386,12 +353,9 @@
                 case MODDN:
                     Control adsModDnControl = syncResult.getControls().get( ISyncModifyDn.OID );
                     //Apache Directory Server's special control
-                    SyncModifyDnDecorator syncModDnControl = new SyncModifyDnDecorator();
-
-                    LOG.debug( "decoding the SyncModifyDnControl.." );
-                    syncModDnControl = ( SyncModifyDnDecorator ) syncModifyDnControlDecoder.decode( adsModDnControl
-                        .getValue(), syncModDnControl );
-
+                    SyncModifyDnDecorator syncModDnControl = 
+                        new SyncModifyDnDecorator( directoryService.getLdapCodecService() );
+                    syncModDnControl.setDecorated( ( ISyncModifyDn ) adsModDnControl );
                     applyModDnOperation( syncModDnControl );
                     break;
 
@@ -432,8 +396,10 @@
         {
             LOG.debug( "............... inside handleSyncInfo ..............." );
 
+            SyncInfoValueDecorator decorator = new SyncInfoValueDecorator( directoryService.getLdapCodecService() );
             byte[] syncinfo = syncInfoResp.getResponseValue();
-            ISyncInfoValue syncInfoValue = ( ISyncInfoValue ) decoder.decode( syncinfo, null );
+            decorator.setValue( syncinfo );
+            ISyncInfoValue syncInfoValue = decorator.getDecorated();
 
             byte[] cookie = syncInfoValue.getCookie();
 
@@ -537,7 +503,7 @@
      */
     private void doSyncSearch( SynchronizationModeEnum syncType, boolean reloadHint ) throws Exception
     {
-        SyncRequestValueDecorator syncReq = new SyncRequestValueDecorator();
+        SyncRequestValueDecorator syncReq = new SyncRequestValueDecorator( directoryService.getLdapCodecService() );
 
         syncReq.setMode( syncType );
         syncReq.setReloadHint( reloadHint );
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 11668f7..ba68de2 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
@@ -328,7 +328,9 @@
             IntermediateResponse intermResp = new IntermediateResponseImpl( req.getMessageId() );
             intermResp.setResponseName( ISyncInfoValue.OID );
 
-            SyncInfoValueDecorator syncInfo = new SyncInfoValueDecorator( SynchronizationInfoEnum.NEW_COOKIE );
+            SyncInfoValueDecorator syncInfo = new SyncInfoValueDecorator( ldapServer.getDirectoryService()
+                .getLdapCodecService(),
+                SynchronizationInfoEnum.NEW_COOKIE );
             syncInfo.setCookie( cookie );
             intermResp.setResponseValue( syncInfo.getValue() );
 
@@ -340,7 +342,8 @@
         {
             SearchResultDone searchDoneResp = ( SearchResultDone ) req.getResultResponse();
             searchDoneResp.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
-            SyncDoneValueDecorator syncDone = new SyncDoneValueDecorator();
+            SyncDoneValueDecorator syncDone = new SyncDoneValueDecorator( 
+                ldapServer.getDirectoryService().getLdapCodecService() );
             syncDone.setCookie( cookie );
             searchDoneResp.addControl( syncDone );
 
@@ -421,7 +424,8 @@
                 IntermediateResponse intermResp = new IntermediateResponseImpl( req.getMessageId() );
                 intermResp.setResponseName( ISyncInfoValue.OID );
 
-                SyncInfoValueDecorator syncInfo = new SyncInfoValueDecorator( SynchronizationInfoEnum.NEW_COOKIE );
+                SyncInfoValueDecorator syncInfo = new SyncInfoValueDecorator( 
+                    ldapServer.getDirectoryService().getLdapCodecService(), SynchronizationInfoEnum.NEW_COOKIE );
                 syncInfo.setCookie( cookie );
                 intermResp.setResponseValue( syncInfo.getValue() );
 
@@ -433,7 +437,8 @@
             else
             {
                 // no need to send from the log, that will be done in the next refreshOnly session
-                SyncDoneValueDecorator syncDone = new SyncDoneValueDecorator();
+                SyncDoneValueDecorator syncDone = new SyncDoneValueDecorator(
+                    ldapServer.getDirectoryService().getLdapCodecService() );
                 syncDone.setCookie( cookie );
                 searchDoneResp.addControl( syncDone );
                 session.getIoSession().write( searchDoneResp );
@@ -561,7 +566,8 @@
     {
 
         EntryAttribute uuid = entry.get( SchemaConstants.ENTRY_UUID_AT );
-        SyncStateValueDecorator syncStateControl = new SyncStateValueDecorator();
+        SyncStateValueDecorator syncStateControl = new SyncStateValueDecorator(
+            ldapServer.getDirectoryService().getLdapCodecService() );
         syncStateControl.setSyncStateType( syncStateType );
         syncStateControl.setEntryUUID( Strings.uuidToBytes(uuid.getString()) );
 
@@ -585,7 +591,8 @@
     {
 
         EntryAttribute uuid = entry.get( SchemaConstants.ENTRY_UUID_AT );
-        SyncStateValueDecorator syncStateControl = new SyncStateValueDecorator();
+        SyncStateValueDecorator syncStateControl = new SyncStateValueDecorator(
+            ldapServer.getDirectoryService().getLdapCodecService() );
         syncStateControl.setSyncStateType( SyncStateTypeEnum.MODDN );
         syncStateControl.setEntryUUID( Strings.uuidToBytes(uuid.getString()) );
 
@@ -986,7 +993,8 @@
     {
         SearchResultDone searchDoneResp = ( SearchResultDone ) req.getResultResponse();
         searchDoneResp.getLdapResult().setResultCode( ResultCodeEnum.E_SYNC_REFRESH_REQUIRED );
-        SyncDoneValueDecorator syncDone = new SyncDoneValueDecorator();
+        SyncDoneValueDecorator syncDone = new SyncDoneValueDecorator(
+            ldapServer.getDirectoryService().getLdapCodecService() );
         searchDoneResp.addControl( syncDone );
 
         session.getIoSession().write( searchDoneResp );
diff --git a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplSearchListener.java b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplSearchListener.java
index 7b4f7b2..4121ec3 100644
--- a/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplSearchListener.java
+++ b/protocol-ldap/src/main/java/org/apache/directory/server/ldap/replication/SyncReplSearchListener.java
@@ -145,7 +145,8 @@
                 respEntry.setObjectName( entry.getDn() );
                 respEntry.setEntry( entry );
 
-                SyncStateValueDecorator syncAdd = new SyncStateValueDecorator();
+                SyncStateValueDecorator syncAdd = new SyncStateValueDecorator( 
+                    session.getLdapServer().getDirectoryService().getLdapCodecService() );
                 syncAdd.setSyncStateType( SyncStateTypeEnum.ADD );
                 syncAdd
                     .setEntryUUID( Strings.uuidToBytes(entry.get(SchemaConstants.ENTRY_UUID_AT).getString()) );
@@ -186,7 +187,8 @@
                 respEntry.setObjectName( entry.getDn() );
                 respEntry.setEntry( entry );
 
-                SyncStateValueDecorator syncDelete = new SyncStateValueDecorator();
+                SyncStateValueDecorator syncDelete = new SyncStateValueDecorator( 
+                    session.getLdapServer().getDirectoryService().getLdapCodecService() );
                 syncDelete.setSyncStateType( SyncStateTypeEnum.DELETE );
                 syncDelete.setEntryUUID( Strings.uuidToBytes(entry.get(SchemaConstants.ENTRY_UUID_AT)
                         .getString()) );
@@ -225,7 +227,8 @@
                 respEntry.setObjectName( modifyContext.getDn() );
                 respEntry.setEntry( alteredEntry );
 
-                SyncStateValueDecorator syncModify = new SyncStateValueDecorator();
+                SyncStateValueDecorator syncModify = new SyncStateValueDecorator( 
+                    session.getLdapServer().getDirectoryService().getLdapCodecService() );
                 syncModify.setSyncStateType( SyncStateTypeEnum.MODIFY );
                 syncModify.setEntryUUID( Strings.uuidToBytes(alteredEntry.get(SchemaConstants.ENTRY_UUID_AT)
                         .getString()) );
@@ -263,7 +266,9 @@
                 return;
             }
 
-            SyncModifyDnDecorator modDnControl = new SyncModifyDnDecorator( SyncModifyDnType.MOVE );
+            SyncModifyDnDecorator modDnControl = new SyncModifyDnDecorator( 
+                session.getLdapServer().getDirectoryService().getLdapCodecService(),
+                SyncModifyDnType.MOVE );
             modDnControl.setEntryDn( moveContext.getDn().getNormName() );
             modDnControl.setNewSuperiorDn( moveContext.getNewSuperior().getNormName() );
 
@@ -273,7 +278,8 @@
                 respEntry.setObjectName( moveContext.getDn() );
                 respEntry.setEntry( entry );
 
-                SyncStateValueDecorator syncModify = new SyncStateValueDecorator();
+                SyncStateValueDecorator syncModify = new SyncStateValueDecorator(
+                    session.getLdapServer().getDirectoryService().getLdapCodecService() );
                 syncModify.setSyncStateType( SyncStateTypeEnum.MODDN );
                 syncModify.setEntryUUID( Strings.uuidToBytes(entry.get(SchemaConstants.ENTRY_UUID_AT)
                         .getString()) );
@@ -310,7 +316,9 @@
                 return;
             }
 
-            SyncModifyDnDecorator modDnControl = new SyncModifyDnDecorator( SyncModifyDnType.MOVEANDRENAME );
+            SyncModifyDnDecorator modDnControl = new SyncModifyDnDecorator( 
+                session.getLdapServer().getDirectoryService().getLdapCodecService(),
+                SyncModifyDnType.MOVEANDRENAME );
             modDnControl.setEntryDn( moveAndRenameContext.getDn().getNormName() );
             modDnControl.setNewSuperiorDn( moveAndRenameContext.getNewSuperiorDn().getNormName() );
             modDnControl.setNewRdn( moveAndRenameContext.getNewRdn().getNormName() );
@@ -324,7 +332,8 @@
                 respEntry.setObjectName( moveAndRenameContext.getModifiedEntry().getDn() );
                 respEntry.setEntry( alteredEntry );
 
-                SyncStateValueDecorator syncModify = new SyncStateValueDecorator();
+                SyncStateValueDecorator syncModify = new SyncStateValueDecorator(
+                    session.getLdapServer().getDirectoryService().getLdapCodecService() );
                 syncModify.setSyncStateType( SyncStateTypeEnum.MODDN );
                 syncModify.setEntryUUID( Strings.uuidToBytes(alteredEntry.get(SchemaConstants.ENTRY_UUID_AT)
                         .getString()) );
@@ -356,7 +365,8 @@
 
         try
         {
-            SyncModifyDnDecorator modDnControl = new SyncModifyDnDecorator();
+            SyncModifyDnDecorator modDnControl = new SyncModifyDnDecorator(
+                session.getLdapServer().getDirectoryService().getLdapCodecService() );
             modDnControl.setModDnType( SyncModifyDnType.RENAME );
             modDnControl.setEntryDn( renameContext.getDn().getName() );
             modDnControl.setNewRdn( renameContext.getNewRdn().getName() );
@@ -368,7 +378,8 @@
                 respEntry.setObjectName( entry.getDn() );
                 respEntry.setEntry( entry );
 
-                SyncStateValueDecorator syncModify = new SyncStateValueDecorator();
+                SyncStateValueDecorator syncModify = new SyncStateValueDecorator(
+                    session.getLdapServer().getDirectoryService().getLdapCodecService() );
                 syncModify.setSyncStateType( SyncStateTypeEnum.MODDN );
                 syncModify.setEntryUUID( Strings.uuidToBytes(entry.get(SchemaConstants.ENTRY_UUID_AT)
                         .getString()) );
diff --git a/server-annotations/src/test/java/org/apache/directory/server/factory/DirectoryServiceAnnotationTest.java b/server-annotations/src/test/java/org/apache/directory/server/factory/DirectoryServiceAnnotationTest.java
index 513f87b..5f02540 100644
--- a/server-annotations/src/test/java/org/apache/directory/server/factory/DirectoryServiceAnnotationTest.java
+++ b/server-annotations/src/test/java/org/apache/directory/server/factory/DirectoryServiceAnnotationTest.java
@@ -46,6 +46,7 @@
 import org.apache.directory.server.core.factory.DSAnnotationProcessor;
 import org.apache.directory.server.core.partition.Partition;
 import org.apache.directory.server.ldap.LdapServer;
+import org.apache.directory.shared.ldap.codec.DefaultLdapCodecService;
 import org.apache.directory.shared.ldap.model.message.Control;
 import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.ldap.util.JndiUtils;
@@ -80,7 +81,7 @@
         env.put( Context.SECURITY_PRINCIPAL, ServerDNConstants.ADMIN_SYSTEM_DN );
         env.put( Context.SECURITY_CREDENTIALS, "secret" );
         env.put( Context.SECURITY_AUTHENTICATION, "simple" );
-        return new InitialLdapContext( env, JndiUtils.toJndiControls( controls ) );
+        return new InitialLdapContext( env, JndiUtils.toJndiControls( new DefaultLdapCodecService(), controls ) );
     }
     
 
diff --git a/server-integ/src/main/java/org/apache/directory/server/integ/ServerIntegrationUtils.java b/server-integ/src/main/java/org/apache/directory/server/integ/ServerIntegrationUtils.java
index 2ea47ff..654172a 100644
--- a/server-integ/src/main/java/org/apache/directory/server/integ/ServerIntegrationUtils.java
+++ b/server-integ/src/main/java/org/apache/directory/server/integ/ServerIntegrationUtils.java
@@ -106,7 +106,8 @@
         env.put( Context.SECURITY_PRINCIPAL, ServerDNConstants.ADMIN_SYSTEM_DN );
         env.put( Context.SECURITY_CREDENTIALS, "secret" );
         env.put( Context.SECURITY_AUTHENTICATION, "simple" );
-        return new InitialLdapContext( env, JndiUtils.toJndiControls( controls ) );
+        return new InitialLdapContext( env, JndiUtils.toJndiControls( 
+            ldapServer.getDirectoryService().getLdapCodecService(), controls ) );
     }
 
 
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/bind/MiscBindIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/bind/MiscBindIT.java
index 9ec924c..bad2f3a 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/bind/MiscBindIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/bind/MiscBindIT.java
@@ -65,9 +65,9 @@
 import org.apache.directory.server.ldap.handlers.bind.ntlm.NtlmMechanismHandler;
 import org.apache.directory.server.ldap.handlers.extended.StoredProcedureExtendedOperationHandler;
 import org.apache.directory.shared.asn1.util.Asn1StringUtils;
-import org.apache.directory.shared.ldap.codec.controls.ControlImpl;
 import org.apache.directory.shared.ldap.model.constants.SupportedSaslMechanisms;
 import org.apache.directory.shared.ldap.model.message.Control;
+import org.apache.directory.shared.ldap.model.message.controls.BasicControl;
 import org.apache.directory.shared.ldap.util.JndiUtils;
 import org.junit.After;
 import org.junit.Before;
@@ -354,47 +354,8 @@
     @Test
     public void testFailureWithUnsupportedControl() throws Exception
     {
-        Control unsupported = new ControlImpl( "1.1.1.1" )
-        {
-            boolean isCritical = true;
-            private static final long serialVersionUID = 1L;
-
-
-            @SuppressWarnings("unused")
-            public String getType()
-            {
-                return "1.1.1.1";
-            }
-
-
-            public byte[] getValue()
-            {
-                return new byte[0];
-            }
-
-
-            public void setValue( byte[] value )
-            {
-            }
-
-
-            public boolean isCritical()
-            {
-                return isCritical;
-            }
-
-
-            public void setCritical( boolean isCritical )
-            {
-                this.isCritical = isCritical;
-            }
-
-
-            public String getOid()
-            {
-                return "1.1.1.1";
-            }
-        };
+        Control unsupported = new BasicControl( "1.1.1.1" );
+        unsupported.setCritical( true );
         
         ldapServer.getDirectoryService().setAllowAnonymousAccess( true );
         
@@ -417,8 +378,8 @@
         user.put( oc );
         user.put( "sn", "Bush" );
         user.put( "userPassword", "Aerial" );
-        ctx.setRequestControls( JndiUtils.toJndiControls( new Control[]
-                {unsupported} ) );
+        ctx.setRequestControls( JndiUtils.toJndiControls( ldapServer.getDirectoryService().getLdapCodecService(),
+            new Control[] {unsupported} ) );
 
         try
         {
@@ -430,7 +391,8 @@
         }
 
         unsupported.setCritical( false );
-        ctx.setRequestControls( JndiUtils.toJndiControls( new Control[]{unsupported} ) );
+        ctx.setRequestControls( JndiUtils.toJndiControls( ldapServer.getDirectoryService().getLdapCodecService(),
+            new Control[]{unsupported} ) );
         
         DirContext kate = ctx.createSubcontext( "cn=Kate Bush", user );
         assertNotNull( kate );
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/bind/SaslBindIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/bind/SaslBindIT.java
index c128996..5e64e77 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/bind/SaslBindIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/bind/SaslBindIT.java
@@ -536,7 +536,8 @@
             }
 
             // Retrieve the response back from server to my last request.
-            LdapMessageContainer container = new LdapMessageContainer();
+            LdapMessageContainer container = new LdapMessageContainer( 
+                ldapServer.getDirectoryService().getLdapCodecService() );
             decoder.setLdapMessageContainer( container );
             return (BindResponse) decoder.decode( null, _input_ );
         }
@@ -574,7 +575,8 @@
             }
 
             // Retrieve the response back from server to my last request.
-            LdapMessageContainer container = new LdapMessageContainer();
+            LdapMessageContainer container = new LdapMessageContainer(
+                ldapServer.getDirectoryService().getLdapCodecService() );
             decoder.setLdapMessageContainer( container );
             return ( BindResponse ) decoder.decode( null, _input_ );
         }
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/lookup/LookupPerfIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/lookup/LookupPerfIT.java
index d18fd12..c8f8615 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/lookup/LookupPerfIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/lookup/LookupPerfIT.java
@@ -99,7 +99,9 @@
         env.put( Context.SECURITY_CREDENTIALS, "secret" );
         env.put( Context.SECURITY_AUTHENTICATION, "simple" );
 
-        return new InitialLdapContext( env, JndiUtils.toJndiControls( controls ) );
+        return new InitialLdapContext( env, JndiUtils.toJndiControls( 
+            ldapServer.getDirectoryService().getLdapCodecService(),
+            controls ) );
     }
 
 
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchIT.java
index 7de519c..608c492 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchIT.java
@@ -44,6 +44,9 @@
 import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
 import org.apache.directory.server.core.integ.FrameworkRunner;
 import org.apache.directory.server.ldap.LdapServer;
+import org.apache.directory.shared.asn1.EncoderException;
+import org.apache.directory.shared.ldap.codec.DefaultLdapCodecService;
+import org.apache.directory.shared.ldap.codec.ILdapCodecService;
 import org.apache.directory.shared.ldap.codec.search.controls.pagedSearch.PagedResultsDecorator;
 import org.apache.directory.shared.ldap.model.message.Control;
 import org.apache.directory.shared.ldap.util.JndiUtils;
@@ -197,19 +200,23 @@
     @Rule
     public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.THREADSAFE );
 
+    private ILdapCodecService codec = new DefaultLdapCodecService();
+    
+    
     /**
      * Create the searchControls with a paged size
+     * @throws EncoderException on codec failures
      */
     private SearchControls createSearchControls( DirContext ctx, int sizeLimit, int pagedSize ) 
-        throws NamingException
+        throws NamingException, EncoderException
     {
         SearchControls controls = new SearchControls();
         controls.setCountLimit( sizeLimit );
         controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
-        PagedResultsDecorator pagedSearchControl = new PagedResultsDecorator();
+        PagedResultsDecorator pagedSearchControl = new PagedResultsDecorator( codec );
         pagedSearchControl.setSize( pagedSize );
         
-        ((LdapContext)ctx).setRequestControls( JndiUtils.toJndiControls( new Control[] {pagedSearchControl} ) );
+        ((LdapContext)ctx).setRequestControls( JndiUtils.toJndiControls(  codec, new Control[] {pagedSearchControl} ) );
         
         return controls;
     }
@@ -217,14 +224,15 @@
     
     /**
      * Create the searchControls with a paged size
+     * @throws EncoderException on codec failures
      */
     private void createNextSearchControls( DirContext ctx, byte[] cookie, int pagedSize ) 
-        throws NamingException
+        throws NamingException, EncoderException
     {
-        PagedResultsDecorator pagedSearchControl = new PagedResultsDecorator();
+        PagedResultsDecorator pagedSearchControl = new PagedResultsDecorator( codec );
         pagedSearchControl.setCookie( cookie );
         pagedSearchControl.setSize( pagedSize );
-        ((LdapContext)ctx).setRequestControls( JndiUtils.toJndiControls( new Control[] {pagedSearchControl} ) );
+        ((LdapContext)ctx).setRequestControls( JndiUtils.toJndiControls( codec, new Control[] {pagedSearchControl} ) );
     }
     
     
@@ -247,9 +255,10 @@
     /**
      * Do the loop over the entries, until we can't get any more, or until we
      * reach a limit. It will check that we have got all the expected entries.
+     * @throws EncoderException  on codec failures
      */
     private void doLoop( DirContext ctx, SearchControls controls, int pagedSizeLimit, 
-        int expectedLoop, int expectedNbEntries, boolean expectedException ) throws NamingException
+        int expectedLoop, int expectedNbEntries, boolean expectedException ) throws NamingException, EncoderException
     {
         // Loop over all the elements
         int loop = 0;
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java
index c2c3c6d..8c5c4c3 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/search/PersistentSearchIT.java
@@ -53,8 +53,11 @@
 import org.apache.directory.shared.ldap.model.message.controls.PersistentSearchImpl;
 import org.apache.directory.shared.ldap.model.message.controls.ChangeType;
 import org.apache.directory.shared.ldap.model.message.controls.EntryChange;
+import org.apache.directory.shared.ldap.codec.DefaultLdapCodecService;
+import org.apache.directory.shared.ldap.codec.ICodecControl;
+import org.apache.directory.shared.ldap.codec.ILdapCodecService;
 import org.apache.directory.shared.ldap.codec.search.controls.entryChange.EntryChangeDecorator;
-import org.apache.directory.shared.ldap.codec.search.controls.entryChange.EntryChangeDecoder;
+import org.apache.directory.shared.ldap.codec.search.controls.persistentSearch.PersistentSearchDecorator;
 import org.apache.directory.shared.ldap.model.message.controls.PersistentSearch;
 import org.apache.directory.shared.ldap.model.exception.LdapException;
 import org.apache.directory.shared.ldap.model.ldif.LdifUtils;
@@ -95,8 +98,8 @@
     private static final String BASE = "ou=system";
     private static final String PERSON_DESCRIPTION = "an American singer-songwriter";
     private static final String RDN = "cn=Tori Amos";
-
-
+    
+    
     /**
      * Creation of required attributes of a person entry.
      */
@@ -522,19 +525,21 @@
     {
         boolean isReady = false;
         PSearchNotification result;
-        final PersistentSearch persistentSearch;
+        final PersistentSearchDecorator persistentSearch;
         LdapContext ctx;
         NamingEnumeration<SearchResult> list;
         
         PSearchListener()
         {
-            persistentSearch = new PersistentSearchImpl();
+            persistentSearch = new PersistentSearchDecorator( ldapServer.getDirectoryService().getLdapCodecService() );
         }
 
 
         PSearchListener( PersistentSearch persistentSearch )
         {
-            this.persistentSearch = persistentSearch;
+            ICodecControl<? extends Control> wrapped = 
+                ldapServer.getDirectoryService().getLdapCodecService().decorate( persistentSearch );
+            this.persistentSearch = ( PersistentSearchDecorator ) wrapped;
         }
 
         
@@ -571,8 +576,8 @@
         public void run()
         {
             LOG.debug( "PSearchListener.run() called." );
+            ILdapCodecService codec = ldapServer.getDirectoryService().getLdapCodecService();
             persistentSearch.setCritical( true );
-            
             persistentSearch.setValue( persistentSearch.getValue() );
 
             Control[] ctxCtls = new Control[] { persistentSearch };
@@ -580,7 +585,7 @@
             try
             {
                 ctx = ( LdapContext ) getWiredContext( ldapServer).lookup( BASE );
-                ctx.setRequestControls( JndiUtils.toJndiControls(ctxCtls) );
+                ctx.setRequestControls( JndiUtils.toJndiControls( codec, ctxCtls) );
                 isReady = true;
                 LOG.debug( "PSearchListener is ready and about to issue persistent search request." );
                 list = ctx.search( "", "objectClass=*", null );
@@ -604,9 +609,7 @@
                                 if ( control.getID().equals(
                                     EntryChange.OID ) )
                                 {
-                                    EntryChangeDecoder decoder = new EntryChangeDecoder();
-                                    ecControl = ( EntryChangeDecorator ) decoder.decode( control.getEncodedValue(), 
-                                            new EntryChangeDecorator() );
+                                    ecControl.setValue( control.getEncodedValue() );
                                 }
                             }
                         }
diff --git a/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java b/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java
index 70ed0a6..da62993 100644
--- a/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java
+++ b/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java
@@ -743,7 +743,8 @@
         SearchControls searchControls = new SearchControls();
         searchControls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
 
-        ctx.setRequestControls( JndiUtils.toJndiControls( reqControls ) );
+        ctx.setRequestControls( JndiUtils.toJndiControls( ldapServer.getDirectoryService().getLdapCodecService(),
+            reqControls ) );
         NamingEnumeration<SearchResult> enm = ctx.search( "", "(objectClass=*)", searchControls );
         Set<String> results = new HashSet<String>();
 
