From 20396bec93ad0de9b6cefee7c7b1ad628d6ea1ae Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 18 Sep 2013 15:17:14 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB

---
 opendj-sdk/opends/src/server/org/opends/server/replication/common/MultiDomainServerState.java                                    |   32 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java                      |   97 +-
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java                  |   14 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java                                  |    9 
 opendj-sdk/opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java                                     |  190 ++---
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java        |    9 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java                                    |    3 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandler.java                             |   18 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java                                   |  125 ++-
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java                                        |   15 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java                                  |   14 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java                         |  385 ++++-------
 opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java                                  |    3 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java                                |   82 +-
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java                             |   72 +-
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java                                         |   73 +-
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DbHandler.java                                    |   24 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java                           |   37 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/FakeStressReplicationDomain.java      |    3 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/StatusAnalyzer.java                                            |    4 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/CNIndexRecord.java                               |    7 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java                                |   24 
 opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java                                        |  166 ++---
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java      |    5 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ChangelogState.java                                            |   27 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java             |  125 +--
 opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java                                         |   13 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java                                            |   23 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java                                 |   67 +-
 opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java                         |    4 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/FakeReplicationDomain.java            |   15 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java         |   10 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ReplicationDomainTest.java            |   13 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitoringPublisher.java                                       |    4 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java                                          |   43 
 opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java                                        |   82 +-
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java |   16 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDomainMonitor.java                                  |   13 
 38 files changed, 844 insertions(+), 1,022 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/common/MultiDomainServerState.java b/opendj-sdk/opends/src/server/org/opends/server/replication/common/MultiDomainServerState.java
index 2bbda8a..f0b1a1e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/common/MultiDomainServerState.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/common/MultiDomainServerState.java
@@ -27,8 +27,6 @@
  */
 package org.opends.server.replication.common;
 
-import static org.opends.messages.ReplicationMessages.*;
-
 import java.util.Iterator;
 import java.util.Map;
 import java.util.TreeMap;
@@ -36,9 +34,12 @@
 import org.opends.messages.Category;
 import org.opends.messages.Message;
 import org.opends.messages.Severity;
+import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.ResultCode;
 
+import static org.opends.messages.ReplicationMessages.*;
+
 /**
  * This object is used to store a list of ServerState object, one by replication
  * domain. Globally, it is the generalization of ServerState (that applies to
@@ -47,19 +48,19 @@
  * MultiDomainServerState is also known as "cookie" and is used with the
  * cookie-based changelog.
  */
-public class MultiDomainServerState implements Iterable<String>
+public class MultiDomainServerState implements Iterable<DN>
 {
   /**
    * The list of (domain service id, ServerState).
    */
-  private Map<String, ServerState> list;
+  private Map<DN, ServerState> list;
 
   /**
    * Creates a new empty object.
    */
   public MultiDomainServerState()
   {
-    list = new TreeMap<String, ServerState>();
+    list = new TreeMap<DN, ServerState>();
   }
 
   /**
@@ -96,7 +97,7 @@
    *
    * @return a boolean indicating if the update was meaningful.
    */
-  public boolean update(String baseDN, CSN csn)
+  public boolean update(DN baseDN, CSN csn)
   {
     if (csn == null)
       return false;
@@ -125,9 +126,9 @@
    * @param baseDN       The provided baseDN.
    * @param serverState  The provided serverState.
    */
-  public void update(String baseDN, ServerState serverState)
+  public void update(DN baseDN, ServerState serverState)
   {
-    list.put(baseDN,serverState.duplicate());
+    list.put(baseDN, serverState.duplicate());
   }
 
   /**
@@ -140,7 +141,7 @@
     String res = "";
     if ((list != null) && (!list.isEmpty()))
     {
-      for (String baseDN  : list.keySet())
+      for (DN baseDN : list.keySet())
       {
         ServerState ss = list.get(baseDN);
         res += baseDN + ":" + ss + ";";
@@ -173,7 +174,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Iterator<String> iterator()
+  public Iterator<DN> iterator()
   {
     return list.keySet().iterator();
   }
@@ -195,7 +196,7 @@
    */
   public boolean cover(MultiDomainServerState covered)
   {
-    for (String baseDN : covered.list.keySet())
+    for (DN baseDN : covered.list.keySet())
     {
       ServerState state = list.get(baseDN);
       ServerState coveredState = covered.list.get(baseDN);
@@ -215,11 +216,10 @@
    * @exception DirectoryException when an error occurs
    * @return the split state.
    */
-  public static Map<String,ServerState> splitGenStateToServerStates(
-      String multidomainserverstate)
-      throws DirectoryException
+  public static Map<DN, ServerState> splitGenStateToServerStates(
+      String multidomainserverstate) throws DirectoryException
   {
-    Map<String, ServerState> startStates = new TreeMap<String, ServerState>();
+    Map<DN, ServerState> startStates = new TreeMap<DN, ServerState>();
     if ((multidomainserverstate != null)
         && (multidomainserverstate.length() > 0))
     {
@@ -250,7 +250,7 @@
               serverStateByDomain.update(fromCSN);
             }
           }
-          startStates.put(domainBaseDN, serverStateByDomain);
+          startStates.put(DN.decode(domainBaseDN), serverStateByDomain);
         }
       }
       catch (DirectoryException de)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
index 955c034..0dd16d7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
@@ -159,8 +159,8 @@
   /**
    * The fully-qualified name of this class.
    */
-  private static final String CLASS_NAME =
-       "org.opends.server.replication.plugin.LDAPReplicationDomain";
+  private static final String CLASS_NAME = LDAPReplicationDomain.class
+      .getName();
 
   /**
    * The attribute used to mark conflicting entries.
@@ -209,17 +209,12 @@
    */
   private final RemotePendingChanges remotePendingChanges;
 
-  private final int serverId;
-
-  private final DN baseDn;
-
-  private volatile boolean shutdown = false;
-
   private final InternalClientConnection conn =
       InternalClientConnection.getRootConnection();
 
   private boolean solveConflictFlag = true;
 
+  private volatile boolean shutdown = false;
   private volatile boolean disabled = false;
   private volatile boolean stateSavingDisabled = false;
 
@@ -371,8 +366,8 @@
   {
     protected ServerStateFlush()
     {
-      super("Replica DS(" + serverId
-          + ") state checkpointer for domain \"" + baseDn + "\"");
+      super("Replica DS(" + getServerId()
+          + ") state checkpointer for domain \"" + getBaseDN() + "\"");
     }
 
     /**
@@ -418,8 +413,8 @@
 
     protected RSUpdater(CSN replServerMaxCSN)
     {
-      super("Replica DS(" + serverId
-          + ") missing change publisher for domain \"" + baseDn + "\"");
+      super("Replica DS(" + getServerId()
+          + ") missing change publisher for domain \"" + getBaseDN() + "\"");
       this.startCSN = replServerMaxCSN;
     }
 
@@ -458,7 +453,7 @@
            * Log an error for the repair tool
            * that will need to re-synchronize the servers.
            */
-          message = ERR_CANNOT_RECOVER_CHANGES.get(baseDn.toNormalizedString());
+          message = ERR_CANNOT_RECOVER_CHANGES.get(getBaseDNString());
           logError(message);
         }
       } catch (Exception e)
@@ -470,7 +465,7 @@
          * Log an error for the repair tool
          * that will need to re-synchronize the servers.
          */
-        message = ERR_CANNOT_RECOVER_CHANGES.get(baseDn.toNormalizedString());
+        message = ERR_CANNOT_RECOVER_CHANGES.get(getBaseDNString());
         logError(message);
       }
       finally
@@ -492,15 +487,13 @@
     BlockingQueue<UpdateToReplay> updateToReplayQueue)
     throws ConfigException
   {
-    super(configuration.getBaseDN().toNormalizedString(),
+    super(configuration.getBaseDN(),
           configuration.getServerId(),
           configuration.getInitializationWindowSize());
 
     // Read the configuration parameters.
     Set<String> replicationServers = configuration.getReplicationServer();
 
-    this.serverId = configuration.getServerId();
-    this.baseDn = configuration.getBaseDN();
     int window  = configuration.getWindowSize();
     /**
      * The time in milliseconds between heartbeats from the replication
@@ -519,7 +512,7 @@
     readAssuredConfig(configuration, false);
 
     // Get fractional configuration
-    fractionalConfig = new FractionalConfig(baseDn);
+    fractionalConfig = new FractionalConfig(getBaseDN());
     readFractionalConfig(configuration, false);
 
     setGroupId((byte)configuration.getGroupId());
@@ -529,11 +522,11 @@
 
     solveConflictFlag = isSolveConflict(configuration);
 
-    Backend backend = retrievesBackend(baseDn);
+    Backend backend = retrievesBackend(getBaseDN());
     if (backend == null)
     {
       throw new ConfigException(ERR_SEARCHING_DOMAIN_BACKEND.get(
-                                  baseDn.toNormalizedString()));
+                                  getBaseDNString()));
     }
 
     try
@@ -543,14 +536,15 @@
     catch (DirectoryException e)
     {
       logError(ERR_LOADING_GENERATION_ID.get(
-          baseDn.toNormalizedString(), e.getLocalizedMessage()));
+          getBaseDNString(), e.getLocalizedMessage()));
     }
 
     /*
      * Create a new Persistent Server State that will be used to store
      * the last CSN seen from all LDAP servers in the topology.
      */
-    state = new PersistentServerState(baseDn, serverId, getServerState());
+    state = new PersistentServerState(getBaseDN(), getServerId(),
+        getServerState());
     flushThread = new ServerStateFlush();
 
     /*
@@ -583,7 +577,7 @@
    */
   private boolean isSolveConflict(ReplicationDomainCfg cfg)
   {
-    return !baseDn.equals(DirectoryServer.getSchemaDN())
+    return !getBaseDN().equals(DirectoryServer.getSchemaDN())
         && cfg.isSolveConflicts();
   }
 
@@ -698,7 +692,7 @@
       // Should not happen as normally already called without problem in
       // isConfigurationChangeAcceptable or isConfigurationAcceptable
       // if we come up to this method
-      Message message = NOTE_ERR_FRACTIONAL.get(baseDn.toString(),
+      Message message = NOTE_ERR_FRACTIONAL.get(getBaseDNString(),
         e.getLocalizedMessage());
       logError(message);
       return;
@@ -718,7 +712,7 @@
     catch  (ConfigException e)
     {
       // Should not happen
-      Message message = NOTE_ERR_FRACTIONAL.get(baseDn.toString(),
+      Message message = NOTE_ERR_FRACTIONAL.get(getBaseDNString(),
         e.getLocalizedMessage());
       logError(message);
       return;
@@ -767,7 +761,7 @@
     if (debugEnabled())
       TRACER.debugInfo(
           "Attempt to read the potential fractional config in domain root "
-              + "entry " + baseDn);
+              + "entry " + getBaseDN());
 
     LDAPFilter filter;
     try
@@ -780,7 +774,7 @@
     }
 
     // Search the domain root entry that is used to save the generation id
-    ByteString asn1BaseDn = ByteString.valueOf(baseDn.toString());
+    ByteString asn1BaseDn = ByteString.valueOf(getBaseDNString());
     Set<String> attributes = new LinkedHashSet<String>(3);
     attributes.add(REPLICATION_GENERATION_ID);
     attributes.add(REPLICATION_FRACTIONAL_EXCLUDE);
@@ -795,7 +789,7 @@
       Message message = ERR_SEARCHING_GENERATION_ID.get(
         search.getResultCode().getResultCodeName() + " " +
         search.getErrorMessage(),
-        baseDn.toString());
+        getBaseDNString());
       logError(message);
       return false;
     }
@@ -846,7 +840,7 @@
         }
         if (attr.size() > 1)
         {
-          Message message = ERR_LOADING_GENERATION_ID.get(baseDn.toString(),
+          Message message = ERR_LOADING_GENERATION_ID.get(getBaseDNString(),
               "#Values=" + attr.size() + " Must be exactly 1 in entry "
               + resultEntry.toLDIFString());
           logError(message);
@@ -1559,7 +1553,7 @@
     }
     catch(DirectoryException e)
     {
-      Message message = NOTE_ERR_FRACTIONAL.get(baseDn.toString(),
+      Message message = NOTE_ERR_FRACTIONAL.get(getBaseDNString(),
         e.getLocalizedMessage());
       logError(message);
       return FRACTIONAL_HAS_NO_FRACTIONAL_FILTERED_ATTRIBUTES;
@@ -1638,11 +1632,11 @@
     {
     case IMPORT_ERROR_MESSAGE_BAD_REMOTE:
       msg = NOTE_ERR_FULL_UPDATE_IMPORT_FRACTIONAL_BAD_REMOTE.get(
-          baseDn.toString(), Integer.toString(ieContext.getImportSource()));
+          getBaseDNString(), Integer.toString(ieContext.getImportSource()));
       break;
     case IMPORT_ERROR_MESSAGE_REMOTE_IS_FRACTIONAL:
       msg = NOTE_ERR_FULL_UPDATE_IMPORT_FRACTIONAL_REMOTE_IS_FRACTIONAL.get(
-          baseDn.toString(), Integer.toString(ieContext.getImportSource()));
+          getBaseDNString(), Integer.toString(ieContext.getImportSource()));
       break;
     }
     ieContext.setException(new DirectoryException(UNWILLING_TO_PERFORM, msg));
@@ -1664,7 +1658,7 @@
     if (target == RoutableMsg.ALL_SERVERS && fractionalConfig.isFractional())
     {
       Message msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_FULL_UPDATE_FRACTIONAL.get(
-            baseDn.toString(), Integer.toString(getServerId()));
+            getBaseDNString(), Integer.toString(getServerId()));
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, msg);
     }
 
@@ -1672,16 +1666,6 @@
   }
 
   /**
-   * Returns the base DN of this ReplicationDomain.
-   *
-   * @return The base DN of this ReplicationDomain
-   */
-  public DN getBaseDN()
-  {
-    return baseDn;
-  }
-
-  /**
    * Implement the  handleConflictResolution phase of the deleteOperation.
    *
    * @param deleteOperation The deleteOperation.
@@ -1693,7 +1677,7 @@
   {
     if (!deleteOperation.isSynchronizationOperation() && !brokerIsConnected())
     {
-      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(baseDn.toString());
+      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
       return new SynchronizationProviderResult.StopProcessing(
           ResultCode.UNWILLING_TO_PERFORM, msg);
     }
@@ -1768,7 +1752,7 @@
   {
     if (!addOperation.isSynchronizationOperation() && !brokerIsConnected())
     {
-      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(baseDn.toString());
+      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
       return new SynchronizationProviderResult.StopProcessing(
           ResultCode.UNWILLING_TO_PERFORM, msg);
     }
@@ -1798,7 +1782,7 @@
           StringBuilder sb = new StringBuilder();
           addOperation.toString(sb);
           Message msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_OPERATION.get(
-            baseDn.toString(), sb.toString());
+            getBaseDNString(), sb.toString());
           return new SynchronizationProviderResult.StopProcessing(
             ResultCode.UNWILLING_TO_PERFORM, msg);
         }
@@ -1899,7 +1883,7 @@
   {
     if (!modifyDNOperation.isSynchronizationOperation() && !brokerIsConnected())
     {
-      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(baseDn.toString());
+      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
       return new SynchronizationProviderResult.StopProcessing(
           ResultCode.UNWILLING_TO_PERFORM, msg);
     }
@@ -1927,7 +1911,7 @@
           StringBuilder sb = new StringBuilder();
           modifyDNOperation.toString(sb);
           Message msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_OPERATION.get(
-            baseDn.toString(), sb.toString());
+            getBaseDNString(), sb.toString());
           return new SynchronizationProviderResult.StopProcessing(
             ResultCode.UNWILLING_TO_PERFORM, msg);
         }
@@ -2019,7 +2003,7 @@
   {
     if (!modifyOperation.isSynchronizationOperation() && !brokerIsConnected())
     {
-      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(baseDn.toString());
+      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
       return new SynchronizationProviderResult.StopProcessing(
           ResultCode.UNWILLING_TO_PERFORM, msg);
     }
@@ -2062,7 +2046,7 @@
             StringBuilder sb = new StringBuilder();
             modifyOperation.toString(sb);
             Message msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_OPERATION.get(
-              baseDn.toString(), sb.toString());
+              getBaseDNString(), sb.toString());
             return new SynchronizationProviderResult.StopProcessing(
               ResultCode.UNWILLING_TO_PERFORM, msg);
         }
@@ -2243,7 +2227,8 @@
       // that is replicated, the generation is now lost because the
       // DB is empty. We need to save it again the next time we add an entry.
       if (op.getOperationType().equals(OperationType.DELETE)
-          && ((PostOperationDeleteOperation) op).getEntryDN().equals(baseDn))
+          && ((PostOperationDeleteOperation) op)
+                .getEntryDN().equals(getBaseDN()))
       {
         generationIdSavedStatus = false;
       }
@@ -2302,7 +2287,7 @@
         ByteString.valueOf(freedDN.toString()));
 
      InternalSearchOperation searchOp =  conn.processSearch(
-       ByteString.valueOf(baseDn.toString()),
+       ByteString.valueOf(getBaseDNString()),
        SearchScope.WHOLE_SUBTREE,
        DereferencePolicy.NEVER_DEREF_ALIASES,
        0, 0, false, filter,
@@ -2756,7 +2741,7 @@
   {
     try
     {
-      InternalSearchOperation search = conn.processSearch(baseDn,
+      InternalSearchOperation search = conn.processSearch(getBaseDN(),
             SearchScope.WHOLE_SUBTREE,
             SearchFilter.createFilterFromString("entryuuid="+uuid));
       if (search.getResultCode() == ResultCode.SUCCESS)
@@ -3114,8 +3099,7 @@
         addConflict(msg);
 
         msg.setDn(generateConflictRDN(entryUUID,
-                    op.getEntryDN().getRDN().toString()) + ","
-                    + baseDn);
+                    op.getEntryDN().getRDN().toString()) + "," + getBaseDN());
         // reset the parent entryUUID so that the check done is the
         // handleConflict phase does not fail.
         msg.setParentEntryUUID(null);
@@ -3257,8 +3241,8 @@
     DirectoryServer.sendAlertNotification(this,
         ALERT_TYPE_REPLICATION_UNRESOLVED_CONFLICT, alertMessage);
 
-    ModifyDNOperation newOp =
-      renameEntry(dn, generateDeleteConflictDn(entryUUID, dn), baseDn, true);
+    RDN newRDN = generateDeleteConflictDn(entryUUID, dn);
+    ModifyDNOperation newOp = renameEntry(dn, newRDN, getBaseDN(), true);
 
     if (newOp.getResultCode() != ResultCode.SUCCESS)
     {
@@ -3449,7 +3433,7 @@
     state.clearInMemory();
     state.loadState();
 
-    generator.adjust(state.getMaxCSN(serverId));
+    generator.adjust(state.getMaxCSN(getServerId()));
     // Retrieves the generation ID associated with the data imported
 
     generationId = loadGenerationId();
@@ -3476,7 +3460,7 @@
        * should we stop the modifications ?
        */
       logError(ERR_LOADING_GENERATION_ID.get(
-          baseDn.toNormalizedString(), e.getLocalizedMessage()));
+          getBaseDNString(), e.getLocalizedMessage()));
       return;
     }
 
@@ -3550,7 +3534,7 @@
    */
   public ResultCode saveGenerationId(long generationId)
   {
-    ResultCode result = runSaveGenerationId(baseDn, generationId);
+    ResultCode result = runSaveGenerationId(getBaseDN(), generationId);
 
     if (result != ResultCode.SUCCESS)
     {
@@ -3565,8 +3549,7 @@
       if (result != ResultCode.SUCCESS)
       {
         Message message = ERR_UPDATING_GENERATION_ID.get(
-            result.getResultCodeName() + " " ,
-            baseDn.toString());
+            result.getResultCodeName() + " " , getBaseDNString());
         logError(message);
       }
     }
@@ -3589,7 +3572,7 @@
   private long loadGenerationId() throws DirectoryException
   {
     if (debugEnabled())
-      TRACER.debugInfo("Attempt to read generation ID from DB " + baseDn);
+      TRACER.debugInfo("Attempt to read generation ID from DB " + getBaseDN());
 
     /*
      * Search the database entry that is used to periodically
@@ -3598,7 +3581,7 @@
     final Set<String> attributes = new LinkedHashSet<String>(1);
     attributes.add(REPLICATION_GENERATION_ID);
     final String filter = "(objectclass=*)";
-    InternalSearchOperation search = conn.processSearch(baseDn.toString(),
+    InternalSearchOperation search = conn.processSearch(getBaseDNString(),
         SearchScope.BASE_OBJECT,
         DereferencePolicy.DEREF_ALWAYS, 0, 0, false,
         filter,attributes);
@@ -3621,7 +3604,7 @@
         Message message = ERR_SEARCHING_GENERATION_ID.get(
             search.getResultCode().getResultCodeName() + " " +
             search.getErrorMessage(),
-            baseDn.toString());
+            getBaseDNString());
         logError(message);
       }
     }
@@ -3641,9 +3624,8 @@
           if (attr.size()>1)
           {
             Message message = ERR_LOADING_GENERATION_ID.get(
-                baseDn.toString(), "#Values=" + attr.size() +
-                " Must be exactly 1 in entry " +
-                resultEntry.toLDIFString());
+                getBaseDNString(), "#Values=" + attr.size() +
+                " Must be exactly 1 in entry " + resultEntry.toLDIFString());
             logError(message);
           }
           else if (attr.size() == 1)
@@ -3656,7 +3638,7 @@
             catch(Exception e)
             {
               Message message = ERR_LOADING_GENERATION_ID.get(
-                baseDn.toString(), e.getLocalizedMessage());
+                getBaseDNString(), e.getLocalizedMessage());
               logError(message);
             }
           }
@@ -3670,15 +3652,15 @@
       saveGenerationId(aGenerationId);
 
       if (debugEnabled())
-        TRACER.debugInfo("Generation ID created for domain base DN="
-            + baseDn + " generationId=" + aGenerationId);
+        TRACER.debugInfo("Generation ID created for domain baseDN="
+            + getBaseDN() + " generationId=" + aGenerationId);
     }
     else
     {
       generationIdSavedStatus = true;
       if (debugEnabled())
-        TRACER.debugInfo("Generation ID successfully read from domain base DN="
-            + baseDn + " generationId=" + aGenerationId);
+        TRACER.debugInfo("Generation ID successfully read from domain baseDN="
+            + getBaseDN() + " generationId=" + aGenerationId);
     }
     return aGenerationId;
   }
@@ -3733,7 +3715,7 @@
   private long exportBackend(OutputStream output, boolean checksumOutput)
       throws DirectoryException
   {
-    Backend backend = retrievesBackend(this.baseDn);
+    Backend backend = retrievesBackend(getBaseDN());
 
     //  Acquire a shared lock for the backend.
     try
@@ -3757,7 +3739,7 @@
       throw new DirectoryException(ResultCode.OTHER, message, null);
     }
 
-    long numberOfEntries = backend.numSubordinates(baseDn, true) + 1;
+    long numberOfEntries = backend.numSubordinates(getBaseDN(), true) + 1;
     long entryCount = Math.min(numberOfEntries, 1000);
     OutputStream os;
     ReplLDIFOutputStream ros = null;
@@ -3781,7 +3763,7 @@
 
     // baseDn branch is the only one included in the export
     List<DN> includeBranches = new ArrayList<DN>(1);
-    includeBranches.add(this.baseDn);
+    includeBranches.add(getBaseDN());
     LDIFExportConfig exportConfig = new LDIFExportConfig(os);
     exportConfig.setIncludeBranches(includeBranches);
 
@@ -3866,12 +3848,12 @@
    * Retrieves the backend related to the domain.
    *
    * @return The backend of that domain.
-   * @param baseDn The baseDn to retrieve the backend
+   * @param baseDN The baseDN to retrieve the backend
    */
-  protected static Backend retrievesBackend(DN baseDn)
+  protected static Backend retrievesBackend(DN baseDN)
   {
     // Retrieves the backend related to this domain
-    return DirectoryServer.getBackend(baseDn);
+    return DirectoryServer.getBackend(baseDN);
   }
 
   /**
@@ -3911,7 +3893,7 @@
   {
     LDIFImportConfig importConfig = null;
 
-    Backend backend = retrievesBackend(baseDn);
+    Backend backend = retrievesBackend(getBaseDN());
 
     try
     {
@@ -3924,10 +3906,9 @@
       }
       else
       {
-        importConfig =
-          new LDIFImportConfig(input);
+        importConfig = new LDIFImportConfig(input);
         List<DN> includeBranches = new ArrayList<DN>();
-        includeBranches.add(this.baseDn);
+        includeBranches.add(getBaseDN());
         importConfig.setIncludeBranches(includeBranches);
         importConfig.setAppendToExistingData(false);
         importConfig.setSkipDNValidation(true);
@@ -3968,7 +3949,7 @@
         {
           importConfig.close();
           closeBackendImport(backend); // Re-enable backend
-          backend = retrievesBackend(baseDn);
+          backend = retrievesBackend(getBaseDN());
         }
 
         loadDataState();
@@ -4076,7 +4057,7 @@
    */
   public Backend getBackend()
   {
-    return retrievesBackend(baseDn);
+    return retrievesBackend(getBaseDN());
   }
 
   /*
@@ -4124,9 +4105,9 @@
       ReplicationDomainCfg configuration, List<Message> unacceptableReasons)
   {
     // Check that there is not already a domain with the same DN
-    DN dn = configuration.getBaseDN();
+    final DN dn = configuration.getBaseDN();
     LDAPReplicationDomain domain = MultimasterReplication.findDomain(dn, null);
-    if (domain != null && domain.baseDn.equals(dn))
+    if (domain != null && domain.getBaseDN().equals(dn))
     {
       Message message = ERR_SYNC_INVALID_DN.get();
       unacceptableReasons.add(message);
@@ -4348,7 +4329,7 @@
     {
       throw new ConfigException(
             NOTE_ERR_UNABLE_TO_ENABLE_ECL.get(
-                "Replication Domain on" + baseDn,
+                "Replication Domain on" + getBaseDN(),
                 de.getMessage() + " " + de.getCause().getMessage()), de);
     }
   }
@@ -4398,7 +4379,7 @@
       {
         Message message =
           NOTE_ERR_UNABLE_TO_ENABLE_ECL.get(
-              "Replication Domain on" + baseDn,
+              "Replication Domain on" + getBaseDN(),
               de.getMessage() + " " + de.getCause().getMessage());
         logError(message);
         // and go on
@@ -4412,7 +4393,7 @@
       setNewStatus(StatusMachineEvent.TO_BAD_GEN_ID_STATUS_EVENT);
       broker.signalStatusChange(status);
       Message message = NOTE_FRACTIONAL_BAD_DATA_SET_NEED_RESYNC.get(
-        baseDn.toString());
+        getBaseDNString());
       logError(message);
       return; // Do not send changes to the replication server
     }
@@ -4426,7 +4407,7 @@
        * Check that the ReplicationServer has seen all our previous
        * changes.
        */
-      CSN replServerMaxCSN = replicationServerState.getCSN(serverId);
+      CSN replServerMaxCSN = replicationServerState.getCSN(getServerId());
 
       // we don't want to update from here (a DS) an empty RS because
       // normally the RS should have been updated by other RSes except for
@@ -4436,7 +4417,7 @@
       // and we don't want to update it with our changes that could be huge.
       if (replServerMaxCSN != null && replServerMaxCSN.getSeqnum() != 0)
       {
-        CSN ourMaxCSN = state.getMaxCSN(serverId);
+        CSN ourMaxCSN = state.getMaxCSN(getServerId());
         if (ourMaxCSN != null && !ourMaxCSN.olderOrEqual(replServerMaxCSN))
         {
           pendingChanges.setRecovering(true);
@@ -4446,7 +4427,7 @@
       }
     } catch (Exception e)
     {
-      Message message = ERR_PUBLISHING_FAKE_OPS.get(baseDn.toNormalizedString(),
+      Message message = ERR_PUBLISHING_FAKE_OPS.get(getBaseDNString(),
           e.getLocalizedMessage() + " " + stackTraceToSingleLineString(e));
       logError(message);
     }
@@ -4493,11 +4474,12 @@
       // So we search by interval of 10 seconds and store the results in the
       // replayOperations list so that they are sorted before sending them.
       long missingChangesDelta = currentStartCSN.getTime() + 10000;
-      CSN endCSN = new CSN(missingChangesDelta, 0xffffffff, serverId);
+      CSN endCSN = new CSN(missingChangesDelta, 0xffffffff, getServerId());
 
       ScanSearchListener listener =
         new ScanSearchListener(currentStartCSN, endCSN);
-      op = searchForChangedEntries(baseDn, currentStartCSN, endCSN, listener);
+      op = searchForChangedEntries(getBaseDN(), currentStartCSN, endCSN,
+              listener);
 
       // Publish and remove all the changes from the replayOperations list
       // that are older than the endCSN.
@@ -4624,7 +4606,7 @@
   @Override
   public long countEntries() throws DirectoryException
   {
-    Backend backend = retrievesBackend(baseDn);
+    Backend backend = retrievesBackend(getBaseDN());
     if (!backend.supportsLDIFExport())
     {
       Message message = ERR_INIT_EXPORT_NOT_SUPPORTED.get(
@@ -4633,7 +4615,7 @@
       throw new DirectoryException(ResultCode.OTHER, message);
     }
 
-    return backend.numSubordinates(baseDn, true) + 1;
+    return backend.numSubordinates(getBaseDN(), true) + 1;
   }
 
   /**
@@ -4724,7 +4706,7 @@
     try
     {
       source = Integer.decode(sourceString);
-      if (source >= -1 && source != serverId)
+      if (source >= -1 && source != getServerId())
       {
         // TODO Verifies serverID is in the domain
         // We should check here that this is a server implied
@@ -4741,13 +4723,12 @@
     if (cause != null)
     {
       Message message = ERR_INVALID_IMPORT_SOURCE.get(
-          baseDn.toNormalizedString(), Integer.toString(serverId),
+          getBaseDNString(), Integer.toString(getServerId()),
           Integer.toString(source),"Details:" + cause.getLocalizedMessage());
       throw new DirectoryException(resultCode, message, cause);
     }
-    Message message = ERR_INVALID_IMPORT_SOURCE.get(
-        baseDn.toNormalizedString(), Integer.toString(serverId),
-        Integer.toString(source),"");
+    Message message = ERR_INVALID_IMPORT_SOURCE.get(getBaseDNString(),
+        Integer.toString(getServerId()), Integer.toString(source), "");
     throw new DirectoryException(resultCode, message);
   }
 
@@ -5345,7 +5326,7 @@
       long endDate) throws DirectoryException
   {
      TRACER.debugInfo("[PURGE] purgeConflictsHistorical "
-         + "on domain: " + baseDn
+         + "on domain: " + getBaseDN()
          + "endDate:" + new Date(endDate)
          + "lastCSNPurgedFromHist: "
          + lastCSNPurgedFromHist.toStringUI());
@@ -5363,7 +5344,7 @@
      }
 
      InternalSearchOperation searchOp = conn.processSearch(
-         ByteString.valueOf(baseDn.toString()),
+         ByteString.valueOf(getBaseDNString()),
          SearchScope.WHOLE_SUBTREE,
          DereferencePolicy.NEVER_DEREF_ALIASES,
          0, 0, false, filter,
@@ -5415,4 +5396,5 @@
        }
      }
   }
+
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ChangelogState.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ChangelogState.java
index 18ea636..9ce9082 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ChangelogState.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ChangelogState.java
@@ -31,6 +31,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.opends.server.types.DN;
+
 /**
  * This is the changelog state stored in the changelogStateDB. For each
  * replication domain, it contains:
@@ -45,22 +47,21 @@
 public class ChangelogState
 {
 
-  private final Map<String, Long> domainToGenerationId =
-      new HashMap<String, Long>();
-  private final Map<String, List<Integer>> domainToServerIds =
-      new HashMap<String, List<Integer>>();
+  private final Map<DN, Long> domainToGenerationId = new HashMap<DN, Long>();
+  private final Map<DN, List<Integer>> domainToServerIds =
+      new HashMap<DN, List<Integer>>();
 
   /**
    * Sets the generationId for the supplied replication domain.
    *
-   * @param baseDn
+   * @param baseDN
    *          the targeted replication domain baseDN
    * @param generationId
    *          the generation Id to set
    */
-  public void setDomainGenerationId(String baseDn, long generationId)
+  public void setDomainGenerationId(DN baseDN, long generationId)
   {
-    domainToGenerationId.put(baseDn, generationId);
+    domainToGenerationId.put(baseDN, generationId);
   }
 
   /**
@@ -68,16 +69,16 @@
    *
    * @param serverId
    *          the serverId to add
-   * @param baseDn
+   * @param baseDN
    *          the targeted replication domain baseDN
    */
-  public void addServerIdToDomain(int serverId, String baseDn)
+  public void addServerIdToDomain(int serverId, DN baseDN)
   {
-    List<Integer> serverIds = domainToServerIds.get(baseDn);
+    List<Integer> serverIds = domainToServerIds.get(baseDN);
     if (serverIds == null)
     {
       serverIds = new LinkedList<Integer>();
-      domainToServerIds.put(baseDn, serverIds);
+      domainToServerIds.put(baseDN, serverIds);
     }
     serverIds.add(serverId);
   }
@@ -87,7 +88,7 @@
    *
    * @return a Map of domainBaseDN => generationId
    */
-  public Map<String, Long> getDomainToGenerationId()
+  public Map<DN, Long> getDomainToGenerationId()
   {
     return domainToGenerationId;
   }
@@ -97,7 +98,7 @@
    *
    * @return a Map of domainBaseDN => List&lt;serverId&gt;.
    */
-  public Map<String, List<Integer>> getDomainToServerIds()
+  public Map<DN, List<Integer>> getDomainToServerIds()
   {
     return domainToServerIds;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java
index 26db6f2..ffaa1f4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java
@@ -136,7 +136,7 @@
       if (debugEnabled())
       {
         TRACER.debugInfo("In RS " + replicationServer.getServerId()
-            + ", DS " + getServerId() + " for baseDn " + getBaseDN()
+            + ", DS " + getServerId() + " for baseDN=" + getBaseDN()
             + " has already generation id " + newGenId
             + " so no ChangeStatusMsg sent to him.");
       }
@@ -150,7 +150,7 @@
     if (debugEnabled())
     {
       TRACER.debugInfo("In RS " + replicationServer.getServerId()
-          + ", closing connection to DS " + getServerId() + " for baseDn "
+          + ", closing connection to DS " + getServerId() + " for baseDN="
           + getBaseDN() + " to force reconnection as new local"
           + " generationId and remote one match and DS is in bad gen id: "
           + newGenId);
@@ -220,7 +220,7 @@
     {
       TRACER.debugInfo("In RS " + replicationServer.getServerId()
           + " Sending change status " + origin + " to " + getServerId()
-          + " for baseDn " + getBaseDN() + ":\n" + csMsg);
+          + " for baseDN=" + getBaseDN() + ":\n" + csMsg);
     }
 
     session.publish(csMsg);
@@ -361,7 +361,8 @@
     heartbeatInterval = serverStartMsg.getHeartbeatInterval();
 
     // generic stuff
-    setBaseDNAndDomain(serverStartMsg.getBaseDn(), true);
+    DN baseDN = DN.decode(serverStartMsg.getBaseDn());
+    setBaseDNAndDomain(baseDN, true);
     setInitialServerState(serverStartMsg.getServerState());
     setSendWindowSize(serverStartMsg.getWindowSize());
 
@@ -477,7 +478,7 @@
 
       Message message = INFO_REPLICATION_SERVER_CONNECTION_FROM_DS
           .get(getReplicationServerId(), getServerId(),
-              replicationServerDomain.getBaseDn(),
+              replicationServerDomain.getBaseDN().toNormalizedString(),
               session.getReadableRemoteAddress());
       logError(message);
 
@@ -550,7 +551,7 @@
     if (serverId != 0)
     {
       return "Replica DS(" + serverId + ") for domain \""
-          + replicationServerDomain.getBaseDn() + "\"";
+          + replicationServerDomain.getBaseDN() + "\"";
     }
     return "Unknown server";
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index 8621480..afaebbf 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -391,7 +391,8 @@
     super(session, queueSize, replicationServer, rcvWindowSize);
     try
     {
-      setBaseDNAndDomain(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT, true);
+      DN baseDN = DN.decode(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
+      setBaseDNAndDomain(baseDN, true);
     }
     catch(DirectoryException de)
     {
@@ -665,8 +666,8 @@
     Depending on allowUnknownDomains provided flag, a non empty map will
     be considered as an error when allowUnknownDomains is false.
     */
-    Map<String,ServerState> startStatesFromProvidedCookie =
-      new HashMap<String,ServerState>();
+    Map<DN, ServerState> startStatesFromProvidedCookie =
+        new HashMap<DN, ServerState>();
 
     ReplicationServer rs = this.replicationServer;
 
@@ -691,11 +692,11 @@
           continue;
 
         // skip the excluded domains
-        if (excludedBaseDNs.contains(rsd.getBaseDn()))
+        if (excludedBaseDNs.contains(rsd.getBaseDN().toNormalizedString()))
         {
           // this is an excluded domain
           if (allowUnknownDomains)
-            startStatesFromProvidedCookie.remove(rsd.getBaseDn());
+            startStatesFromProvidedCookie.remove(rsd.getBaseDN());
           continue;
         }
 
@@ -713,14 +714,14 @@
         if (isPersistent == PERSISTENT_CHANGES_ONLY)
         {
           newDomainCtxt.startState = rsd.getEligibleState(eligibleCSN);
-          startStatesFromProvidedCookie.remove(rsd.getBaseDn());
+          startStatesFromProvidedCookie.remove(rsd.getBaseDN());
         }
         else
         {
           // let's take the start state for this domain from the provided
           // cookie
           newDomainCtxt.startState =
-              startStatesFromProvidedCookie.remove(rsd.getBaseDn());
+              startStatesFromProvidedCookie.remove(rsd.getBaseDN());
 
           if (providedCookie == null
               || providedCookie.length() == 0
@@ -742,7 +743,7 @@
             // when there is a cookie provided in the request,
             if (newDomainCtxt.startState == null)
             {
-              missingDomains += (rsd.getBaseDn() + ":;");
+              missingDomains += (rsd.getBaseDN() + ":;");
               continue;
             }
             else if (!newDomainCtxt.startState.isEmpty())
@@ -750,8 +751,8 @@
               if (hasCookieBeenTrimmedFromDB(rsd, newDomainCtxt.startState))
               {
                 throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                    ERR_RESYNC_REQUIRED_TOO_OLD_DOMAIN_IN_PROVIDED_COOKIE
-                        .get(newDomainCtxt.rsd.getBaseDn()));
+                    ERR_RESYNC_REQUIRED_TOO_OLD_DOMAIN_IN_PROVIDED_COOKIE.get(
+                        newDomainCtxt.rsd.getBaseDN().toNormalizedString()));
               }
             }
           }
@@ -764,12 +765,12 @@
         // Creates an unconnected SH for the domain
         MessageHandler mh = new MessageHandler(maxQueueSize, replicationServer);
         mh.setInitialServerState(newDomainCtxt.startState);
-        mh.setBaseDNAndDomain(rsd.getBaseDn(), false);
+        mh.setBaseDNAndDomain(rsd.getBaseDN(), false);
         // register the unconnected into the domain
         rsd.registerHandler(mh);
         newDomainCtxt.mh = mh;
 
-        previousCookie.update(newDomainCtxt.rsd.getBaseDn(),
+        previousCookie.update(newDomainCtxt.rsd.getBaseDN(),
                               newDomainCtxt.startState);
 
         // store the new context
@@ -799,7 +800,7 @@
       if (!startStatesFromProvidedCookie.isEmpty())
       {
         if (allowUnknownDomains)
-          for (String providedDomain : startStatesFromProvidedCookie.keySet())
+          for (DN providedDomain : startStatesFromProvidedCookie.keySet())
             if (rs.getReplicationServerDomain(providedDomain) == null)
               // the domain provided in the cookie is not replicated
               startStatesFromProvidedCookie.remove(providedDomain);
@@ -816,7 +817,7 @@
         */
         StringBuilder sb = new StringBuilder();
         for (DomainContext domainCtxt : domainCtxts) {
-          sb.append(domainCtxt.rsd.getBaseDn()).append(":")
+          sb.append(domainCtxt.rsd.getBaseDN()).append(":")
             .append(domainCtxt.startState).append(";");
         }
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -1235,7 +1236,7 @@
         final ECLUpdateMsg change = new ECLUpdateMsg(
             (LDAPUpdateMsg) oldestContext.nextMsg,
             null, // cookie will be set later
-            oldestContext.rsd.getBaseDn(),
+            oldestContext.rsd.getBaseDN().toNormalizedString(),
             0); // changeNumber may be set later
         oldestContext.nextMsg = null;
 
@@ -1287,7 +1288,7 @@
           final ECLUpdateMsg change = new ECLUpdateMsg(
               (LDAPUpdateMsg) oldestContext.nextMsg,
               null, // set later
-              oldestContext.rsd.getBaseDn(),
+              oldestContext.rsd.getBaseDN().toNormalizedString(),
               0);
           oldestContext.nextMsg = null; // clean
 
@@ -1318,7 +1319,7 @@
         TRACER.debugInfo("getNextECLUpdate updates previousCookie:" + csn);
 
       // Update the current state
-      previousCookie.update(oldestChange.getBaseDN(), csn);
+      previousCookie.update(DN.decode(oldestChange.getBaseDN()), csn);
 
       // Set the current value of global state in the returned message
       oldestChange.setCookie(previousCookie);
@@ -1357,7 +1358,7 @@
 
     // replogCSN : the oldest change from the changelog db
     CSN csnFromChangelogDb = oldestChange.getUpdateMsg().getCSN();
-    String dnFromChangelogDb = oldestChange.getBaseDN();
+    DN dnFromChangelogDb = DN.decode(oldestChange.getBaseDN());
 
     while (true)
     {
@@ -1372,7 +1373,7 @@
       // the next change from the CNIndexDB
       final CNIndexRecord currentRecord = cnIndexDBCursor.getRecord();
       final CSN csnFromDraftCNDb = currentRecord.getCSN();
-      final String dnFromDraftCNDb = currentRecord.getBaseDN();
+      final DN dnFromDraftCNDb = currentRecord.getBaseDN();
 
       if (debugEnabled())
         TRACER.debugInfo("assignChangeNumber() generating change number "
@@ -1440,7 +1441,7 @@
     }
   }
 
-  private boolean areSameChange(CSN csn1, String dn1, CSN csn2, String dn2)
+  private boolean areSameChange(CSN csn1, DN dn1, CSN csn2, DN dn2)
   {
     boolean sameDN = dn1.compareTo(dn2) == 0;
     boolean sameCSN = csn1.compareTo(csn2) == 0;
@@ -1458,7 +1459,7 @@
     replicationServer.getChangeNumberIndexDB().addRecord(new CNIndexRecord(
         change.getChangeNumber(),
         previousCookie.toString(),
-        change.getBaseDN(),
+        DN.decode(change.getBaseDN()),
         change.getUpdateMsg().getCSN()));
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
index 8a490ed..a6c2ae5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
@@ -195,7 +195,8 @@
     List<Attribute> attributes = new ArrayList<Attribute>();
 
     attributes.add(Attributes.create("server-id", String.valueOf(serverId)));
-    attributes.add(Attributes.create("domain-name", rsDomain.getBaseDn()));
+    attributes.add(Attributes.create("domain-name",
+        rsDomain.getBaseDN().toNormalizedString()));
     attributes.add(Attributes.create("connected-to",
         replServerHandler.getMonitorInstanceName()));
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java
index 9df5c26..a4c73a8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MessageHandler.java
@@ -76,11 +76,11 @@
   /**
    * Local hosting RS.
    */
-  protected ReplicationServer replicationServer = null;
+  protected ReplicationServer replicationServer;
   /**
-   * Specifies the related replication server domain based on baseDn.
+   * Specifies the related replication server domain based on baseDN.
    */
-  protected ReplicationServerDomain replicationServerDomain = null;
+  protected ReplicationServerDomain replicationServerDomain;
   /**
    * Number of update sent to the server.
    */
@@ -106,9 +106,9 @@
    */
   private ServerState serverState;
   /**
-   * Specifies the baseDn of the domain.
+   * Specifies the baseDN of the domain.
    */
-  private String baseDN = null;
+  private DN baseDN;
   /**
    * Specifies whether the consumer is still active or not.
    * If not active, the handler will not return any message.
@@ -563,7 +563,7 @@
    */
   protected String getBaseDN()
   {
-    return baseDN;
+    return baseDN.toNormalizedString();
   }
 
   /**
@@ -628,21 +628,22 @@
    * @exception DirectoryException
    *              raised when a problem occurs.
    */
-  protected void setBaseDNAndDomain(String baseDN, boolean isDataServer)
-  throws DirectoryException
+  protected void setBaseDNAndDomain(DN baseDN, boolean isDataServer)
+      throws DirectoryException
   {
     if (this.baseDN != null)
     {
-      if (!this.baseDN.equalsIgnoreCase(baseDN))
+      if (!this.baseDN.equals(baseDN))
       {
-        Message message = ERR_RS_DN_DOES_NOT_MATCH.get(this.baseDN, baseDN);
+        Message message = ERR_RS_DN_DOES_NOT_MATCH.get(
+            this.baseDN.toNormalizedString(), baseDN.toNormalizedString());
         throw new DirectoryException(ResultCode.OTHER, message, null);
       }
     }
     else
     {
       this.baseDN = baseDN;
-      if (!baseDN.equalsIgnoreCase("cn=changelog"))
+      if (!baseDN.toNormalizedString().equals("cn=changelog"))
         this.replicationServerDomain = getDomain(isDataServer);
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitoringPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitoringPublisher.java
index f85ce25..2a5fea0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitoringPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitoringPublisher.java
@@ -77,7 +77,7 @@
     super("Replication server RS("
         + replicationServerDomain.getLocalRSServerId()
         + ") monitor publisher for domain \""
-        + replicationServerDomain.getBaseDn() + "\"");
+        + replicationServerDomain.getBaseDN() + "\"");
 
     this.domain = replicationServerDomain;
     this.period = period;
@@ -198,6 +198,6 @@
   private String getMessage(String message)
   {
     return "In RS " + domain.getLocalRSServerId() + ", for base dn "
-        + domain.getBaseDn() + ": " + message;
+        + domain.getBaseDN() + ": " + message;
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
index a6bec09..ff8c99f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
@@ -537,7 +537,7 @@
       }
       else
       {
-        DN baseDN = DN.decode(rsd.getBaseDn() + "," + BASE_DN);
+        DN baseDN = DN.decode(rsd.getBaseDN() + "," + BASE_DN);
         for (DN includeBranch : includeBranches)
         {
           if (includeBranch.isDescendantOf(baseDN)
@@ -591,14 +591,14 @@
       TRACER.debugInfo("State=" + serverState);
       Attribute stateAttr = Attributes.create("state", serverState.toString());
       Attribute genidAttr = Attributes.create("generation-id",
-          exportContainer.getGenerationId() + exportContainer.getBaseDn());
+          "" + exportContainer.getGenerationId() + exportContainer.getBaseDN());
 
       attrs.clear();
       attrs.put(ocType, singletonList(ocAttr));
       attrs.put(stateAttr.getAttributeType(), singletonList(stateAttr));
       attrs.put(genidAttr.getAttributeType(), singletonList(genidAttr));
 
-      final String dnString = exportContainer.getBaseDn() + "," + BASE_DN;
+      final String dnString = exportContainer.getBaseDN() + "," + BASE_DN;
       try
       {
         DN dn = DN.decode(dnString);
@@ -651,7 +651,7 @@
             }
             lookthroughCount++;
             writeChange(cursor.getChange(), ldifWriter, searchOperation,
-                rsd.getBaseDn(), exportConfig != null);
+                rsd.getBaseDN(), exportConfig != null);
             cursor.next();
           }
         }
@@ -758,7 +758,7 @@
    * Exports one change.
    */
   private void writeChange(UpdateMsg updateMsg, LDIFWriter ldifWriter,
-      SearchOperation searchOperation, String baseDN, boolean isExport)
+      SearchOperation searchOperation, DN baseDN, boolean isExport)
   {
     InternalClientConnection conn =
       InternalClientConnection.getRootConnection();
@@ -862,7 +862,8 @@
 
           addAttribute(entry.getUserAttributes(), CHANGE_NUMBER,
               msg.getCSN().toString());
-          addAttribute(entry.getUserAttributes(), "replicationDomain", baseDN);
+          addAttribute(entry.getUserAttributes(), "replicationDomain",
+              baseDN.toNormalizedString());
 
           // Get the base DN, scope, and filter for the search.
           DN     searchBaseDN = searchOperation.getBaseDN();
@@ -1222,7 +1223,7 @@
       ReplicationServerDomain rsd = iter.next();
 
       // Skip containers that are not covered by the include branches.
-      DN baseDN = DN.decode(rsd.getBaseDn() + "," + BASE_DN);
+      DN baseDN = DN.decode(rsd.getBaseDN() + "," + BASE_DN);
       if (searchBaseDN.isDescendantOf(baseDN)
           || searchBaseDN.isAncestorOf(baseDN))
       {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDomainMonitor.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDomainMonitor.java
index a99057d..9b599d1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDomainMonitor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDomainMonitor.java
@@ -153,6 +153,8 @@
       {
         try
         {
+          String baseDN = domain.getBaseDN().toNormalizedString();
+
           // Prevent out of band monitor responses from updating our pending
           // table until we are ready.
           synchronized (pendingMonitorDataLock)
@@ -182,7 +184,7 @@
               {
                 // Log a message and do a best effort from here.
                 Message message = ERR_SENDING_REMOTE_MONITOR_DATA_REQUEST.get(
-                    domain.getBaseDn(), serverId, e.getMessage());
+                    baseDN, serverId, e.getMessage());
                 logError(message);
               }
             }
@@ -206,8 +208,7 @@
               // error log with repeated messages.
               if (!pendingMonitorDataServerIDs.contains(serverId))
               {
-                logError(NOTE_MONITOR_DATA_RECEIVED.get(
-                    domain.getBaseDn(), serverId));
+                logError(NOTE_MONITOR_DATA_RECEIVED.get(baseDN, serverId));
               }
             }
 
@@ -219,7 +220,7 @@
               if (!monitorDataLateServers.contains(serverId))
               {
                 logError(WARN_MISSING_REMOTE_MONITOR_DATA.get(
-                    domain.getBaseDn(), serverId));
+                    baseDN, serverId));
               }
             }
 
@@ -313,8 +314,8 @@
       {
         // This is a response for an earlier request whose computing is
         // already complete.
-        logError(INFO_IGNORING_REMOTE_MONITOR_DATA.get(domain.getBaseDn(),
-            msg.getSenderID()));
+        logError(INFO_IGNORING_REMOTE_MONITOR_DATA.get(
+            domain.getBaseDN().toNormalizedString(), msg.getSenderID()));
         return;
       }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 5f43ada..b41939a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -95,8 +95,8 @@
    * This table is used to store the list of dn for which we are currently
    * handling servers.
    */
-  private final Map<String, ReplicationServerDomain> baseDNs =
-          new HashMap<String, ReplicationServerDomain>();
+  private final Map<DN, ReplicationServerDomain> baseDNs =
+      new HashMap<DN, ReplicationServerDomain>();
 
   private volatile boolean shutdown = false;
   private int rcvWindow;
@@ -396,7 +396,7 @@
               continue; // Skip: avoid connecting to self.
             }
 
-            connect(rsURL, domain.getBaseDn());
+            connect(rsURL, domain.getBaseDN());
           }
         }
 
@@ -436,11 +436,12 @@
   /**
    * Establish a connection to the server with the address and port.
    *
-   * @param remoteServerURL  The address and port for the server, separated by a
-   *                    colon.
-   * @param baseDn     The baseDn of the connection
+   * @param remoteServerURL
+   *          The address and port for the server, separated by a colon.
+   * @param baseDN
+   *          The baseDN of the connection
    */
-  private void connect(String remoteServerURL, String baseDn)
+  private void connect(String remoteServerURL, DN baseDN)
   {
     int separator = remoteServerURL.lastIndexOf(':');
     String port = remoteServerURL.substring(separator + 1);
@@ -464,7 +465,7 @@
 
       ReplicationServerHandler rsHandler = new ReplicationServerHandler(
           session, queueSize, this, rcvWindow);
-      rsHandler.connect(baseDn, sslEncryption);
+      rsHandler.connect(baseDN, sslEncryption);
     }
     catch (Exception e)
     {
@@ -677,36 +678,37 @@
    * Get the ReplicationServerDomain associated to the base DN given in
    * parameter.
    *
-   * @param baseDn The base Dn for which the ReplicationServerDomain must be
-   * returned.
+   * @param baseDN
+   *          The base Dn for which the ReplicationServerDomain must be
+   *          returned.
    * @return The ReplicationServerDomain associated to the base DN given in
    *         parameter.
    */
-  public ReplicationServerDomain getReplicationServerDomain(String baseDn)
+  public ReplicationServerDomain getReplicationServerDomain(DN baseDN)
   {
-    return getReplicationServerDomain(baseDn, false);
+    return getReplicationServerDomain(baseDN, false);
   }
 
   /**
    * Get the ReplicationServerDomain associated to the base DN given in
    * parameter.
    *
-   * @param baseDn The base Dn for which the ReplicationServerDomain must be
+   * @param baseDN The base Dn for which the ReplicationServerDomain must be
    * returned.
    * @param create Specifies whether to create the ReplicationServerDomain if
    *        it does not already exist.
    * @return The ReplicationServerDomain associated to the base DN given in
    *         parameter.
    */
-  public ReplicationServerDomain getReplicationServerDomain(String baseDn,
+  public ReplicationServerDomain getReplicationServerDomain(DN baseDN,
       boolean create)
   {
     synchronized (baseDNs)
     {
-      ReplicationServerDomain domain = baseDNs.get(baseDn);
+      ReplicationServerDomain domain = baseDNs.get(baseDN);
       if (domain == null && create) {
-        domain = new ReplicationServerDomain(baseDn, this);
-        baseDNs.put(baseDn, domain);
+        domain = new ReplicationServerDomain(baseDN, this);
+        baseDNs.put(baseDN, domain);
       }
       return domain;
     }
@@ -805,12 +807,12 @@
 
   /**
    * Clears the generationId for the replicationServerDomain related to the
-   * provided baseDn.
+   * provided baseDN.
    *
-   * @param baseDn
-   *          The baseDn for which to delete the generationId.
+   * @param baseDN
+   *          The baseDN for which to delete the generationId.
    */
-  public void clearGenerationId(String baseDn)
+  public void clearGenerationId(DN baseDN)
   {
     synchronized (cnIndexDBLock)
     {
@@ -818,7 +820,7 @@
       {
         try
         {
-          cnIndexDB.clear(baseDn);
+          cnIndexDB.clear(baseDN);
         }
         catch (Exception ignored)
         {
@@ -1047,7 +1049,7 @@
    * @param baseDN The baseDN of the replicationServerDomain.
    * @return The value of the generationID.
    */
-  public long getGenerationId(String baseDN)
+  public long getGenerationId(DN baseDN)
   {
     ReplicationServerDomain rsd = getReplicationServerDomain(baseDN);
     if (rsd!=null)
@@ -1480,7 +1482,7 @@
     CSN eligibleCSN = null;
     for (ReplicationServerDomain domain : getReplicationServerDomains())
     {
-      if (contains(excludedBaseDNs, domain.getBaseDn()))
+      if (contains(excludedBaseDNs, domain.getBaseDN().toNormalizedString()))
         continue;
 
       final CSN domainEligibleCSN = domain.getEligibleCSN();
@@ -1494,7 +1496,7 @@
       {
         final String dates = domainEligibleCSN == null ?
             "" : new Date(domainEligibleCSN.getTime()).toString();
-        debugLog += "[baseDN=" + domain.getBaseDn()
+        debugLog += "[baseDN=" + domain.getBaseDN()
             + "] [eligibleCSN=" + domainEligibleCSN + ", " + dates + "]";
       }
     }
@@ -1611,9 +1613,9 @@
       final CNIndexRecord firstCNRecord = cnIndexDB.getFirstRecord();
       final CNIndexRecord lastCNRecord = cnIndexDB.getLastRecord();
 
-      Map<String, ServerState> domainsServerStateForLastCN = null;
+      boolean noCookieForLastCN = true;
       CSN csnForLastCN = null;
-      String domainForLastCN = null;
+      DN domainForLastCN = null;
       if (firstCNRecord != null)
       {
         if (lastCNRecord == null)
@@ -1631,11 +1633,8 @@
         // Get the generalized state associated with the current last change
         // number and initializes from it the startStates table
         String lastCNGenState = lastCNRecord.getPreviousCookie();
-        if (lastCNGenState != null && lastCNGenState.length() > 0)
-        {
-          domainsServerStateForLastCN = MultiDomainServerState
-              .splitGenStateToServerStates(lastCNGenState);
-        }
+        noCookieForLastCN = lastCNGenState == null
+            || lastCNGenState.length() == 0;
 
         csnForLastCN = lastCNRecord.getCSN();
         domainForLastCN = lastCNRecord.getBaseDN();
@@ -1644,13 +1643,13 @@
       long newestDate = 0;
       for (ReplicationServerDomain rsd : getReplicationServerDomains())
       {
-        if (contains(excludedBaseDNs, rsd.getBaseDn()))
+        if (contains(excludedBaseDNs, rsd.getBaseDN().toNormalizedString()))
           continue;
 
         // for this domain, have the state in the replchangelog
         // where the last change number update is
         long ec;
-        if (domainsServerStateForLastCN == null)
+        if (noCookieForLastCN)
         {
           // Count changes of this domain from the beginning of the changelog
           CSN trimCSN = new CSN(rsd.getLatestDomainTrimDate(), 0, 0);
@@ -1676,7 +1675,7 @@
           CSN csnx = new CSN(newestDate, csnForLastCN.getSeqnum(), 0);
           ec = rsd.getEligibleCount(csnx, crossDomainEligibleCSN);
 
-          if (domainForLastCN.equalsIgnoreCase(rsd.getBaseDn()))
+          if (domainForLastCN.equals(rsd.getBaseDN()))
             ec--;
         }
 
@@ -1717,11 +1716,11 @@
     MultiDomainServerState result = new MultiDomainServerState();
     for (ReplicationServerDomain rsd : getReplicationServerDomains())
     {
-      if (contains(excludedBaseDNs, rsd.getBaseDn())
+      if (contains(excludedBaseDNs, rsd.getBaseDN().toNormalizedString())
           || rsd.getDbServerState().isEmpty())
         continue;
 
-      result.update(rsd.getBaseDn(), rsd.getEligibleState(getEligibleCSN()));
+      result.update(rsd.getBaseDN(), rsd.getEligibleState(getEligibleCSN()));
     }
     return result;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index eef08e4..e0ed2c1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -75,7 +75,7 @@
  */
 public class ReplicationServerDomain extends MonitorProvider<MonitorProviderCfg>
 {
-  private final String baseDn;
+  private final DN baseDN;
 
   /**
    * The Status analyzer that periodically verifies whether the connected DSs
@@ -172,21 +172,21 @@
   private ServerState ctHeartbeatState;
 
   /**
-   * Creates a new ReplicationServerDomain associated to the DN baseDn.
+   * Creates a new ReplicationServerDomain associated to the baseDN.
    *
-   * @param baseDn
-   *          The baseDn associated to the ReplicationServerDomain.
+   * @param baseDN
+   *          The baseDN associated to the ReplicationServerDomain.
    * @param localReplicationServer
    *          the ReplicationServer that created this instance.
    */
-  public ReplicationServerDomain(String baseDn,
+  public ReplicationServerDomain(DN baseDN,
       ReplicationServer localReplicationServer)
   {
-    this.baseDn = baseDn;
+    this.baseDN = baseDN;
     this.localReplicationServer = localReplicationServer;
     this.assuredTimeoutTimer = new Timer("Replication server RS("
         + localReplicationServer.getServerId()
-        + ") assured timer for domain \"" + baseDn + "\"", true);
+        + ") assured timer for domain \"" + baseDN + "\"", true);
     this.changelogDB = localReplicationServer.getChangelogDB();
 
     DirectoryServer.registerMonitorProvider(this);
@@ -253,7 +253,8 @@
           // Unknown assured mode: should never happen
           Message errorMsg = ERR_RS_UNKNOWN_ASSURED_MODE.get(
             Integer.toString(localReplicationServer.getServerId()),
-            assuredMode.toString(), baseDn, update.toString());
+            assuredMode.toString(), baseDN.toNormalizedString(),
+            update.toString());
           logError(errorMsg);
           assuredMessage = false;
         }
@@ -405,7 +406,7 @@
   {
     try
     {
-      if (this.changelogDB.publishUpdateMsg(baseDn, serverId, updateMsg))
+      if (this.changelogDB.publishUpdateMsg(baseDN, serverId, updateMsg))
       {
         /*
          * JNR: Matt and I had a hard time figuring out where to put this
@@ -608,7 +609,8 @@
       // Should never happen
       Message errorMsg = ERR_UNKNOWN_ASSURED_SAFE_DATA_LEVEL.get(
         Integer.toString(localReplicationServer.getServerId()),
-        Byte.toString(safeDataLevel), baseDn, update.toString());
+        Byte.toString(safeDataLevel), baseDN.toNormalizedString(),
+        update.toString());
       logError(errorMsg);
     } else if (sourceGroupId == groupId
     // Assured feature does not cross different group IDS
@@ -760,7 +762,7 @@
             mb.append(ERR_RS_ERROR_SENDING_ACK.get(
               Integer.toString(localReplicationServer.getServerId()),
               Integer.toString(origServer.getServerId()),
-              csn.toString(), baseDn));
+              csn.toString(), baseDN.toNormalizedString()));
             mb.append(" ");
             mb.append(stackTraceToSingleLineString(e));
             logError(mb.toMessage());
@@ -838,7 +840,7 @@
             mb.append(ERR_RS_ERROR_SENDING_ACK.get(
                 Integer.toString(localReplicationServer.getServerId()),
                 Integer.toString(origServer.getServerId()),
-                csn.toString(), baseDn));
+                csn.toString(), baseDN.toNormalizedString()));
             mb.append(" ");
             mb.append(stackTraceToSingleLineString(e));
             logError(mb.toMessage());
@@ -1275,7 +1277,7 @@
    */
   public Set<Integer> getServerIds()
   {
-    return changelogDB.getDomainServerIds(baseDn);
+    return changelogDB.getDomainServerIds(baseDN);
   }
 
   /**
@@ -1292,7 +1294,7 @@
    */
   public ReplicaDBCursor getCursorFrom(int serverId, CSN startAfterCSN)
   {
-    return changelogDB.getCursorFrom(baseDn, serverId, startAfterCSN);
+    return changelogDB.getCursorFrom(baseDN, serverId, startAfterCSN);
   }
 
  /**
@@ -1305,7 +1307,7 @@
   */
   public long getCount(int serverId, CSN from, CSN to)
   {
-    return changelogDB.getCount(baseDn, serverId, from, to);
+    return changelogDB.getCount(baseDN, serverId, from, to);
   }
 
   /**
@@ -1315,16 +1317,17 @@
    */
   public long getChangesCount()
   {
-    return changelogDB.getDomainChangesCount(baseDn);
+    return changelogDB.getDomainChangesCount(baseDN);
   }
 
   /**
-   * Get the baseDn.
-   * @return Returns the baseDn.
+   * Get the baseDN.
+   *
+   * @return Returns the baseDN.
    */
-  public String getBaseDn()
+  public DN getBaseDN()
   {
-    return baseDn;
+    return baseDN;
   }
 
   /**
@@ -1520,7 +1523,7 @@
   {
     MessageBuilder mb = new MessageBuilder();
     mb.append(ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get(
-        this.baseDn, Integer.toString(msg.getDestination())));
+        baseDN.toNormalizedString(), Integer.toString(msg.getDestination())));
     mb.append(" In Replication Server=").append(
       this.localReplicationServer.getMonitorInstanceName());
     mb.append(" unroutable message =").append(msg.getClass().getSimpleName());
@@ -1567,7 +1570,8 @@
          */
         MessageBuilder mb = new MessageBuilder();
         mb.append(ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get(
-            this.baseDn, Integer.toString(msg.getDestination())));
+            baseDN.toNormalizedString(),
+            Integer.toString(msg.getDestination())));
         mb.append(" unroutable message =" + msg.getClass().getSimpleName());
         mb.append(" Details: " + ioe.getLocalizedMessage());
         final Message message = mb.toMessage();
@@ -1698,7 +1702,7 @@
 
     stopAllServers(true);
 
-    changelogDB.shutdownDomain(baseDn);
+    changelogDB.shutdownDomain(baseDN);
   }
 
   /**
@@ -1709,7 +1713,7 @@
   public ServerState getDbServerState()
   {
     ServerState serverState = new ServerState();
-    for (CSN lastCSN : changelogDB.getDomainLastCSNs(baseDn).values())
+    for (CSN lastCSN : changelogDB.getDomainLastCSNs(baseDN).values())
     {
       serverState.update(lastCSN);
     }
@@ -1722,7 +1726,7 @@
   @Override
   public String toString()
   {
-    return "ReplicationServerDomain " + baseDn;
+    return "ReplicationServerDomain " + baseDN;
   }
 
   /**
@@ -1755,10 +1759,9 @@
             {
               if (i == 2)
               {
-                Message message =
-                    ERR_EXCEPTION_SENDING_TOPO_INFO
-                        .get(baseDn, "directory", Integer.toString(dsHandler
-                            .getServerId()), e.getMessage());
+                Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
+                    baseDN.toNormalizedString(), "directory",
+                    Integer.toString(dsHandler.getServerId()), e.getMessage());
                 logError(message);
               }
             }
@@ -1793,7 +1796,7 @@
             if (i == 2)
             {
               Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
-                  baseDn, "replication",
+                  baseDN.toNormalizedString(), "replication",
                   Integer.toString(rsHandler.getServerId()), e.getMessage());
               logError(message);
             }
@@ -1934,9 +1937,8 @@
   {
     if (debugEnabled())
     {
-      TRACER.debugInfo("In " + this + " Receiving ResetGenerationIdMsg from "
-          + senderHandler.getServerId() + " for baseDn " + baseDn + ":\n"
-          + genIdMsg);
+      debug("Receiving ResetGenerationIdMsg from "
+          + senderHandler.getServerId() + ":\n" + genIdMsg);
     }
 
     try
@@ -1965,10 +1967,8 @@
         // Order to take a gen id we already have, just ignore
         if (debugEnabled())
         {
-          TRACER.debugInfo("In " + this
-              + " Reset generation id requested for baseDn " + baseDn
-              + " but generation id was already " + this.generationId + ":\n"
-              + genIdMsg);
+          debug("Reset generation id requested but generationId was already "
+              + this.generationId + ":\n" + genIdMsg);
         }
       }
 
@@ -1987,8 +1987,8 @@
           }
         } catch (IOException e)
         {
-          logError(ERR_EXCEPTION_FORWARDING_RESET_GEN_ID.get(baseDn,
-              e.getMessage()));
+          logError(ERR_EXCEPTION_FORWARDING_RESET_GEN_ID.get(
+              baseDN.toNormalizedString(), e.getMessage()));
         }
       }
 
@@ -2001,7 +2001,8 @@
           dsHandler.changeStatusForResetGenId(newGenId);
         } catch (IOException e)
         {
-          logError(ERR_EXCEPTION_CHANGING_STATUS_AFTER_RESET_GEN_ID.get(baseDn,
+          logError(ERR_EXCEPTION_CHANGING_STATUS_AFTER_RESET_GEN_ID.get(
+              baseDN.toNormalizedString(),
               Integer.toString(dsHandler.getServerId()),
               e.getMessage()));
         }
@@ -2014,7 +2015,8 @@
       // treatment.
       sendTopoInfoToAll();
 
-      logError(NOTE_RESET_GENERATION_ID.get(baseDn, newGenId));
+      logError(NOTE_RESET_GENERATION_ID.get(baseDN.toNormalizedString(),
+          newGenId));
     }
     catch(Exception e)
     {
@@ -2069,7 +2071,8 @@
       sendTopoInfoToAllExcept(senderHandler);
 
       Message message = NOTE_DIRECTORY_SERVER_CHANGED_STATUS.get(
-          senderHandler.getServerId(), baseDn, newStatus.toString());
+          senderHandler.getServerId(), baseDN.toNormalizedString(),
+          newStatus.toString());
       logError(message);
     }
     catch(Exception e)
@@ -2114,7 +2117,7 @@
       // StatusAnalyzer.
       if (debugEnabled())
       {
-        TRACER.debugInfo("Status analyzer for domain " + baseDn
+        TRACER.debugInfo("Status analyzer for domain " + baseDN
             + " has been interrupted when"
             + " trying to acquire domain lock for changing the status of DS "
             + dsHandler.getServerId());
@@ -2133,7 +2136,7 @@
       catch (IOException e)
       {
         logError(ERR_EXCEPTION_CHANGING_STATUS_FROM_STATUS_ANALYZER
-            .get(baseDn,
+            .get(baseDN.toNormalizedString(),
                 Integer.toString(dsHandler.getServerId()),
                 e.getMessage()));
       }
@@ -2186,10 +2189,10 @@
   public void clearDbs()
   {
     // Reset the localchange and state db for the current domain
-    changelogDB.clearDomain(baseDn);
+    changelogDB.clearDomain(baseDN);
     try
     {
-      localReplicationServer.clearGenerationId(baseDn);
+      localReplicationServer.clearGenerationId(baseDN);
     }
     catch (Exception e)
     {
@@ -2285,7 +2288,7 @@
             rsHandler.getServerId(),
             rsHandler.session.getReadableRemoteAddress(),
             rsHandler.getGenerationId(),
-            baseDn, getLocalRSServerId(), generationId);
+            baseDN.toNormalizedString(), getLocalRSServerId(), generationId);
         logError(message);
 
         ErrorMsg errorMsg = new ErrorMsg(getLocalRSServerId(),
@@ -2494,7 +2497,8 @@
   {
     return "Replication server RS(" + localReplicationServer.getServerId()
         + ") " + localReplicationServer.getServerURL() + ",cn="
-        + baseDn.replace(',', '_').replace('=', '_') + ",cn=Replication";
+        + baseDN.toNormalizedString().replace(',', '_').replace('=', '_')
+        + ",cn=Replication";
   }
 
   /**
@@ -2509,9 +2513,10 @@
         String.valueOf(localReplicationServer.getServerId())));
     attributes.add(Attributes.create("replication-server-port",
         String.valueOf(localReplicationServer.getReplicationPort())));
-    attributes.add(Attributes.create("domain-name", baseDn));
+    attributes.add(Attributes.create("domain-name",
+        baseDN.toNormalizedString()));
     attributes.add(Attributes.create("generation-id",
-        baseDn + " " + generationId));
+        baseDN + " " + generationId));
 
     // Missing changes
     long missingChanges = getDomainMonitorData().getMissingChangesRS(
@@ -2595,7 +2600,7 @@
           if (eligibleCSN.olderOrEqual(mostRecentDbCSN))
           {
             // let's try to seek the first change <= eligibleCSN
-            CSN newCSN = changelogDB.getCSNAfter(baseDn, serverId, eligibleCSN);
+            CSN newCSN = changelogDB.getCSNAfter(baseDN, serverId, eligibleCSN);
             result.update(newCSN);
           } else {
             // for this serverId, all changes in the ChangelogDb are holder
@@ -2612,8 +2617,7 @@
 
     if (debugEnabled())
     {
-      TRACER
-          .debugInfo("In " + this + " getEligibleState() result is " + result);
+      debug("getEligibleState() result is " + result);
     }
     return result;
   }
@@ -2629,7 +2633,7 @@
   public ServerState getStartState()
   {
     ServerState domainStartState = new ServerState();
-    for (CSN firstCSN : changelogDB.getDomainFirstCSNs(baseDn).values())
+    for (CSN firstCSN : changelogDB.getDomainFirstCSNs(baseDN).values())
     {
       domainStartState.update(firstCSN);
     }
@@ -2650,7 +2654,7 @@
     CSN eligibleCSN = null;
 
     for (Entry<Integer, CSN> entry :
-      changelogDB.getDomainLastCSNs(baseDn).entrySet())
+      changelogDB.getDomainLastCSNs(baseDN).entrySet())
     {
       // Consider this producer (DS/db).
       final int serverId = entry.getKey();
@@ -2767,7 +2771,7 @@
             logError(ERR_CHANGELOG_ERROR_SENDING_MSG
                 .get("Replication Server "
                     + localReplicationServer.getReplicationPort() + " "
-                    + baseDn + " " + localReplicationServer.getServerId()));
+                    + baseDN + " " + localReplicationServer.getServerId()));
             stopServer(rsHandler, false);
           }
         }
@@ -2844,7 +2848,7 @@
    */
   public long getLatestDomainTrimDate()
   {
-    return changelogDB.getDomainLatestTrimDate(baseDn);
+    return changelogDB.getDomainLatestTrimDate(baseDN);
   }
 
   /**
@@ -2962,8 +2966,9 @@
 
   private void debug(String message)
   {
-    TRACER.debugInfo("In RS serverId=" + localReplicationServer.getServerId()
-        + " for baseDn=" + baseDn + " and port="
-        + localReplicationServer.getReplicationPort() + ": " + message);
+    TRACER.debugInfo("In ReplicationServerDomain serverId="
+        + localReplicationServer.getServerId() + " for baseDN=" + baseDN
+        + " and port=" + localReplicationServer.getReplicationPort()
+        + ": " + message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
index b21a06b..ac7c6a7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
@@ -84,7 +84,8 @@
       serverURL = inReplServerStartMsg.getServerURL();
       final String port = serverURL.substring(serverURL.lastIndexOf(':') + 1);
       serverAddressURL = session.getRemoteAddress() + ":" + port;
-      setBaseDNAndDomain(inReplServerStartMsg.getBaseDn(), false);
+      DN baseDN = DN.decode(inReplServerStartMsg.getBaseDn());
+      setBaseDNAndDomain(baseDN, false);
       setInitialServerState(inReplServerStartMsg.getServerState());
       setSendWindowSize(inReplServerStartMsg.getWindowSize());
       if (protocolVersion > ProtocolVersion.REPLICATION_PROTOCOL_V1)
@@ -141,8 +142,8 @@
    * @param sslEncryption The sslEncryption requested to the remote RS.
    * @throws DirectoryException when an error occurs.
    */
-  public void connect(String baseDN, boolean sslEncryption)
-  throws DirectoryException
+  public void connect(DN baseDN, boolean sslEncryption)
+      throws DirectoryException
   {
     // we are the initiator and decides of the encryption
     this.sslEncryption = sslEncryption;
@@ -245,7 +246,7 @@
 
       Message message = INFO_REPLICATION_SERVER_CONNECTION_TO_RS
           .get(getReplicationServerId(), getServerId(),
-              replicationServerDomain.getBaseDn(),
+              replicationServerDomain.getBaseDN().toNormalizedString(),
               session.getReadableRemoteAddress());
       logError(message);
 
@@ -380,7 +381,7 @@
 
       Message message = INFO_REPLICATION_SERVER_CONNECTION_FROM_RS
           .get(getReplicationServerId(), getServerId(),
-              replicationServerDomain.getBaseDn(),
+              replicationServerDomain.getBaseDN().toNormalizedString(),
               session.getReadableRemoteAddress());
       logError(message);
 
@@ -719,7 +720,7 @@
     if (serverId != 0)
     {
       return "Replication server RS(" + serverId + ") for domain \""
-          + replicationServerDomain.getBaseDn() + "\"";
+          + replicationServerDomain.getBaseDN() + "\"";
     }
     return "Unknown server";
   }
@@ -757,4 +758,5 @@
     if (replicationServerDomain != null)
       replicationServerDomain.receiveTopoInfoFromRS(topoMsg, this, true);
   }
+
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/StatusAnalyzer.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/StatusAnalyzer.java
index d442314..52f3c08 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/StatusAnalyzer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/StatusAnalyzer.java
@@ -78,7 +78,7 @@
   {
     super("Replication server RS("
         + replicationServerDomain.getLocalRSServerId()
-        + ") delay monitor for domain \"" + replicationServerDomain.getBaseDn()
+        + ") delay monitor for domain \"" + replicationServerDomain.getBaseDN()
         + "\"");
 
     this.replicationServerDomain = replicationServerDomain;
@@ -173,7 +173,7 @@
   private String getMessage(String message)
   {
     return "In RS " + replicationServerDomain.getLocalRSServerId()
-        + ", for base dn " + replicationServerDomain.getBaseDn() + ": "
+        + ", for baseDN=" + replicationServerDomain.getBaseDN() + ": "
         + message;
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/CNIndexRecord.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/CNIndexRecord.java
index 4363a21..0ce5e5e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/CNIndexRecord.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/CNIndexRecord.java
@@ -27,6 +27,7 @@
 package org.opends.server.replication.server.changelog.api;
 
 import org.opends.server.replication.common.CSN;
+import org.opends.server.types.DN;
 
 /**
  * The Change Number Index Data class represents records stored in the
@@ -38,7 +39,7 @@
   /** This is the key used to store the rest of the . */
   private long changeNumber;
   private String previousCookie;
-  private String baseDN;
+  private DN baseDN;
   private CSN csn;
 
   /**
@@ -53,7 +54,7 @@
    * @param csn
    *          the replication CSN field
    */
-  public CNIndexRecord(long changeNumber, String previousCookie, String baseDN,
+  public CNIndexRecord(long changeNumber, String previousCookie, DN baseDN,
       CSN csn)
   {
     super();
@@ -68,7 +69,7 @@
    *
    * @return the baseDN
    */
-  public String getBaseDN()
+  public DN getBaseDN()
   {
     return baseDN;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
index b97f471..81092a4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangeNumberIndexDB.java
@@ -26,6 +26,8 @@
  */
 package org.opends.server.replication.server.changelog.api;
 
+import org.opends.server.types.DN;
+
 /**
  * This class stores an index of all the changes seen by this server in the form
  * of {@link CNIndexRecord}s. The records are sorted by a global ordering as
@@ -131,7 +133,7 @@
    * @throws ChangelogException
    *           if a database problem occurs.
    */
-  void clear(String baseDNToClear) throws ChangelogException;
+  void clear(DN baseDNToClear) throws ChangelogException;
 
   /**
    * Shutdown this DB.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java
index 9686ee0..0ff0187 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/api/ChangelogDB.java
@@ -32,6 +32,7 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.replication.common.CSN;
 import org.opends.server.replication.protocol.UpdateMsg;
+import org.opends.server.types.DN;
 
 /**
  * The changelogDB stores the replication data on persistent storage.
@@ -102,65 +103,65 @@
    * Returns the serverIds for the servers that are or have been part of the
    * provided replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    * @return a set of integers holding the serverIds
    */
-  Set<Integer> getDomainServerIds(String baseDn);
+  Set<Integer> getDomainServerIds(DN baseDN);
 
   /**
    * Get the number of changes for the specified replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    * @return the number of changes.
    */
-  long getDomainChangesCount(String baseDn);
+  long getDomainChangesCount(DN baseDN);
 
   /**
    * Returns the FIRST {@link CSN}s of each serverId for the specified
    * replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    * @return a {serverId => FIRST CSN} Map
    */
-  Map<Integer, CSN> getDomainFirstCSNs(String baseDn);
+  Map<Integer, CSN> getDomainFirstCSNs(DN baseDN);
 
   /**
    * Returns the LAST {@link CSN}s of each serverId for the specified
    * replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    * @return a {serverId => LAST CSN} Map
    */
-  Map<Integer, CSN> getDomainLastCSNs(String baseDn);
+  Map<Integer, CSN> getDomainLastCSNs(DN baseDN);
 
   /**
    * Retrieves the latest trim date for the specified replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    * @return the domain latest trim date
    */
-  long getDomainLatestTrimDate(String baseDn);
+  long getDomainLatestTrimDate(DN baseDN);
 
   /**
    * Shutdown the specified replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    */
-  void shutdownDomain(String baseDn);
+  void shutdownDomain(DN baseDN);
 
   /**
    * Clear DB and shutdown for the specified replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    */
-  void clearDomain(String baseDn);
+  void clearDomain(DN baseDN);
 
   // serverId methods
 
@@ -168,8 +169,8 @@
    * Return the number of changes between 2 provided {@link CSN}s for the
    * specified serverId and replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    * @param serverId
    *          the serverId on which to act
    * @param from
@@ -178,14 +179,14 @@
    *          The upper (newer) CSN
    * @return The computed number of changes
    */
-  long getCount(String baseDn, int serverId, CSN from, CSN to);
+  long getCount(DN baseDN, int serverId, CSN from, CSN to);
 
   /**
    * Returns the {@link CSN} situated immediately after the specified
    * {@link CSN} for the specified serverId and replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    * @param serverId
    *          the serverId for which we want the information
    * @param startAfterCSN
@@ -193,14 +194,14 @@
    * @return a new ReplicationIterator that allows to browse the db managed by
    *         this dbHandler and starting at the position defined by a given CSN.
    */
-  CSN getCSNAfter(String baseDn, int serverId, CSN startAfterCSN);
+  CSN getCSNAfter(DN baseDN, int serverId, CSN startAfterCSN);
 
   /**
    * Generates a non empty {@link ReplicaDBCursor} for the specified serverId
    * and replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    * @param serverId
    *          the serverId on which to act
    * @param startAfterCSN
@@ -208,13 +209,13 @@
    * @return a {@link ReplicaDBCursor} if the ReplicaDB is not empty, null
    *         otherwise
    */
-  ReplicaDBCursor getCursorFrom(String baseDn, int serverId, CSN startAfterCSN);
+  ReplicaDBCursor getCursorFrom(DN baseDN, int serverId, CSN startAfterCSN);
 
   /**
    * for the specified serverId and replication domain.
    *
-   * @param baseDn
-   *          the replication domain baseDn
+   * @param baseDN
+   *          the replication domain baseDN
    * @param serverId
    *          the serverId on which to act
    * @param updateMsg
@@ -223,7 +224,7 @@
    * @throws ChangelogException
    *           If a database problem happened
    */
-  boolean publishUpdateMsg(String baseDn, int serverId, UpdateMsg updateMsg)
+  boolean publishUpdateMsg(DN baseDN, int serverId, UpdateMsg updateMsg)
       throws ChangelogException;
 
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DbHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DbHandler.java
index 0ba2b64..11c5a81 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DbHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DbHandler.java
@@ -47,6 +47,7 @@
 import org.opends.server.replication.server.changelog.je.ReplicationDB.*;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.Attributes;
+import org.opends.server.types.DN;
 import org.opends.server.types.InitializationException;
 import org.opends.server.util.TimeThread;
 
@@ -113,7 +114,7 @@
   private CSN firstChange;
   private CSN lastChange;
   private int serverId;
-  private String baseDn;
+  private DN baseDN;
   private DbMonitorProvider dbMonitor = new DbMonitorProvider();
   private DirectoryThread thread;
   private final Object flushLock = new Object();
@@ -131,21 +132,19 @@
    * Creates a new dbHandler associated to a given LDAP server.
    *
    * @param id Identifier of the DB.
-   * @param baseDn the baseDn for which this DB was created.
+   * @param baseDN the baseDN for which this DB was created.
    * @param replicationServer The ReplicationServer that creates this dbHandler.
    * @param dbenv the Database Env to use to create the ReplicationServer DB.
    * server for this domain.
    * @param queueSize The queueSize to use when creating the dbHandler.
    * @throws ChangelogException If a database problem happened
    */
-  public DbHandler(
-      int id, String baseDn, ReplicationServer replicationServer,
-      ReplicationDbEnv dbenv, int queueSize)
-         throws ChangelogException
+  public DbHandler(int id, DN baseDN, ReplicationServer replicationServer,
+      ReplicationDbEnv dbenv, int queueSize) throws ChangelogException
   {
     this.replicationServer = replicationServer;
     serverId = id;
-    this.baseDn = baseDn;
+    this.baseDN = baseDN;
     trimAge = replicationServer.getTrimAge();
     queueMaxSize = queueSize;
     queueLowmark = queueSize / 5;
@@ -153,13 +152,13 @@
     queueMaxBytes = 200 * queueMaxSize;
     queueLowmarkBytes = 200 * queueLowmark;
     queueHimarkBytes = 200 * queueLowmark;
-    db = new ReplicationDB(id, baseDn, replicationServer, dbenv);
+    db = new ReplicationDB(id, baseDN, replicationServer, dbenv);
     firstChange = db.readFirstChange();
     lastChange = db.readLastChange();
     thread = new DirectoryThread(this, "Replication server RS("
         + replicationServer.getServerId()
         + ") changelog checkpointer for Replica DS(" + id
-        + ") for domain \"" + baseDn + "\"");
+        + ") for domain \"" + baseDN + "\"");
     thread.start();
 
     DirectoryServer.deregisterMonitorProvider(dbMonitor);
@@ -531,7 +530,8 @@
       List<Attribute> attributes = new ArrayList<Attribute>();
       attributes.add(Attributes.create("replicationServer-database",
           String.valueOf(serverId)));
-      attributes.add(Attributes.create("domain-name", baseDn));
+      attributes.add(Attributes.create("domain-name",
+          baseDN.toNormalizedString()));
       if (firstChange != null)
       {
         attributes.add(Attributes.create("first-change", encode(firstChange)));
@@ -559,7 +559,7 @@
     public String getMonitorInstanceName()
     {
       ReplicationServerDomain domain = replicationServer
-          .getReplicationServerDomain(baseDn);
+          .getReplicationServerDomain(baseDN);
       return "Changelog for DS(" + serverId + "),cn="
           + domain.getMonitorInstanceName();
     }
@@ -581,7 +581,7 @@
   @Override
   public String toString()
   {
-    return baseDn + " " + serverId + " " + firstChange + " " + lastChange;
+    return baseDN + " " + serverId + " " + firstChange + " " + lastChange;
   }
 
   /**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java
index 50ace70..fb5faf6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java
@@ -92,7 +92,8 @@
       final long changeNumber = record.getChangeNumber();
       DatabaseEntry key = new ReplicationDraftCNKey(changeNumber);
       DatabaseEntry data = new DraftCNData(changeNumber,
-          record.getPreviousCookie(), record.getBaseDN(), record.getCSN());
+          record.getPreviousCookie(), record.getBaseDN().toNormalizedString(),
+          record.getCSN());
 
       // Use a transaction so that we can override durability.
       Transaction txn = null;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java
index 77e2efd..c6faad5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java
@@ -33,6 +33,8 @@
 import org.opends.server.replication.common.CSN;
 import org.opends.server.replication.server.changelog.api.CNIndexRecord;
 import org.opends.server.replication.server.changelog.api.ChangelogException;
+import org.opends.server.types.DN;
+import org.opends.server.types.DirectoryException;
 
 import com.sleepycat.je.DatabaseEntry;
 
@@ -104,7 +106,8 @@
     {
       String stringData = new String(data, "UTF-8");
       String[] str = stringData.split(FIELD_SEPARATOR, 3);
-      return new CNIndexRecord(changeNumber, str[0], str[1], new CSN(str[2]));
+      final DN baseDN = DN.decode(str[1]);
+      return new CNIndexRecord(changeNumber, str[0], baseDN, new CSN(str[2]));
     }
     catch (UnsupportedEncodingException e)
     {
@@ -112,6 +115,10 @@
       // TODO: i18n
       throw new ChangelogException(Message.raw("need UTF-8 support"));
     }
+    catch (DirectoryException e)
+    {
+      throw new ChangelogException(e);
+    }
   }
 
   /**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandler.java
index a070ac2..3462514 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandler.java
@@ -46,10 +46,7 @@
 import org.opends.server.replication.server.ReplicationServerDomain;
 import org.opends.server.replication.server.changelog.api.*;
 import org.opends.server.replication.server.changelog.je.DraftCNDB.*;
-import org.opends.server.types.Attribute;
-import org.opends.server.types.Attributes;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.InitializationException;
+import org.opends.server.types.*;
 
 import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.loggers.ErrorLogger.*;
@@ -298,7 +295,7 @@
 
   /** {@inheritDoc} */
   @Override
-  public void clear(String baseDNToClear) throws ChangelogException
+  public void clear(DN baseDNToClear) throws ChangelogException
   {
     if (isEmpty())
     {
@@ -321,15 +318,14 @@
 
           // From the draftCNDb change record, get the domain and CSN
           final CNIndexRecord record = cursor.currentRecord();
-          final String baseDN = record.getBaseDN();
-          if (baseDNToClear != null && baseDNToClear.equalsIgnoreCase(baseDN))
+          if (baseDNToClear != null && baseDNToClear.equals(record.getBaseDN()))
           {
             cursor.delete();
             continue;
           }
 
           final ReplicationServerDomain domain =
-              replicationServer.getReplicationServerDomain(baseDN);
+              replicationServer.getReplicationServerDomain(record.getBaseDN());
           if (domain == null)
           {
             // the domain has been removed since the record was written in the
@@ -354,10 +350,10 @@
           ServerState csnVector;
           try
           {
-            Map<String, ServerState> csnStartStates =
+            Map<DN, ServerState> csnStartStates =
                 MultiDomainServerState.splitGenStateToServerStates(
                         record.getPreviousCookie());
-            csnVector = csnStartStates.get(baseDN);
+            csnVector = csnStartStates.get(record.getBaseDN());
 
             if (debugEnabled())
               TRACER.debugInfo("DraftCNDBHandler:clear() - ChangeVector:"
@@ -516,7 +512,7 @@
    * Takes the lock on this object (blocking until lock can be acquired).
    * @throws InterruptedException If interrupted.
    */
-   public void lock() throws InterruptedException
+  public void lock() throws InterruptedException
   {
     lock.lockInterruptibly();
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
index bea6ac5..97057f5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
@@ -42,6 +42,7 @@
 import org.opends.server.replication.server.changelog.api.ChangelogDB;
 import org.opends.server.replication.server.changelog.api.ChangelogException;
 import org.opends.server.replication.server.changelog.api.ReplicaDBCursor;
+import org.opends.server.types.DN;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.util.Pair;
 
@@ -62,8 +63,8 @@
   /**
    * This map contains the List of updates received from each LDAP server.
    */
-  private final Map<String, Map<Integer, DbHandler>> sourceDbHandlers =
-      new ConcurrentHashMap<String, Map<Integer, DbHandler>>();
+  private final Map<DN, Map<Integer, DbHandler>> sourceDbHandlers =
+      new ConcurrentHashMap<DN, Map<Integer, DbHandler>>();
   private ReplicationDbEnv dbEnv;
   private String dbDirName = null;
   private File dbDirectory;
@@ -82,9 +83,9 @@
     this.replicationServer = replicationServer;
   }
 
-  private Map<Integer, DbHandler> getDomainMap(String baseDn)
+  private Map<Integer, DbHandler> getDomainMap(DN baseDN)
   {
-    final Map<Integer, DbHandler> domainMap = sourceDbHandlers.get(baseDn);
+    final Map<Integer, DbHandler> domainMap = sourceDbHandlers.get(baseDN);
     if (domainMap != null)
     {
       return domainMap;
@@ -92,45 +93,45 @@
     return Collections.emptyMap();
   }
 
-  private DbHandler getDbHandler(String baseDn, int serverId)
+  private DbHandler getDbHandler(DN baseDN, int serverId)
   {
-    return getDomainMap(baseDn).get(serverId);
+    return getDomainMap(baseDN).get(serverId);
   }
 
   /**
    * Provision resources for the specified serverId in the specified replication
    * domain.
    *
-   * @param baseDn
+   * @param baseDN
    *          the replication domain where to add the serverId
    * @param serverId
    *          the server Id to add to the replication domain
    * @throws ChangelogException
    *           If a database error happened.
    */
-  private void commission(String baseDn, int serverId, ReplicationServer rs)
+  private void commission(DN baseDN, int serverId, ReplicationServer rs)
       throws ChangelogException
   {
-    getOrCreateDbHandler(baseDn, serverId, rs);
+    getOrCreateDbHandler(baseDN, serverId, rs);
   }
 
-  private Pair<DbHandler, Boolean> getOrCreateDbHandler(String baseDn,
+  private Pair<DbHandler, Boolean> getOrCreateDbHandler(DN baseDN,
       int serverId, ReplicationServer rs) throws ChangelogException
   {
     synchronized (sourceDbHandlers)
     {
-      Map<Integer, DbHandler> domainMap = sourceDbHandlers.get(baseDn);
+      Map<Integer, DbHandler> domainMap = sourceDbHandlers.get(baseDN);
       if (domainMap == null)
       {
         domainMap = new ConcurrentHashMap<Integer, DbHandler>();
-        sourceDbHandlers.put(baseDn, domainMap);
+        sourceDbHandlers.put(baseDN, domainMap);
       }
 
       DbHandler dbHandler = domainMap.get(serverId);
       if (dbHandler == null)
       {
         dbHandler =
-            new DbHandler(serverId, baseDn, rs, dbEnv, rs.getQueueSize());
+            new DbHandler(serverId, baseDN, rs, dbEnv, rs.getQueueSize());
         domainMap.put(serverId, dbHandler);
         return Pair.of(dbHandler, true);
       }
@@ -161,19 +162,18 @@
   private void initializeChangelogState(final ChangelogState changelogState)
       throws ChangelogException
   {
-    for (Map.Entry<String, Long> entry :
+    for (Map.Entry<DN, Long> entry :
       changelogState.getDomainToGenerationId().entrySet())
     {
       replicationServer.getReplicationServerDomain(entry.getKey(), true)
           .initGenerationID(entry.getValue());
     }
-    for (Map.Entry<String, List<Integer>> entry : changelogState
-        .getDomainToServerIds().entrySet())
+    for (Map.Entry<DN, List<Integer>> entry :
+      changelogState.getDomainToServerIds().entrySet())
     {
-      final String baseDn = entry.getKey();
       for (int serverId : entry.getValue())
       {
-        commission(baseDn, serverId, replicationServer);
+        commission(entry.getKey(), serverId, replicationServer);
       }
     }
   }
@@ -190,16 +190,16 @@
 
   /** {@inheritDoc} */
   @Override
-  public Set<Integer> getDomainServerIds(String baseDn)
+  public Set<Integer> getDomainServerIds(DN baseDN)
   {
-    return getDomainMap(baseDn).keySet();
+    return getDomainMap(baseDN).keySet();
   }
 
   /** {@inheritDoc} */
   @Override
-  public long getCount(String baseDn, int serverId, CSN from, CSN to)
+  public long getCount(DN baseDN, int serverId, CSN from, CSN to)
   {
-    DbHandler dbHandler = getDbHandler(baseDn, serverId);
+    DbHandler dbHandler = getDbHandler(baseDN, serverId);
     if (dbHandler != null)
     {
       return dbHandler.getCount(from, to);
@@ -209,10 +209,10 @@
 
   /** {@inheritDoc} */
   @Override
-  public long getDomainChangesCount(String baseDn)
+  public long getDomainChangesCount(DN baseDN)
   {
     long entryCount = 0;
-    for (DbHandler dbHandler : getDomainMap(baseDn).values())
+    for (DbHandler dbHandler : getDomainMap(baseDN).values())
     {
       entryCount += dbHandler.getChangesCount();
     }
@@ -221,9 +221,9 @@
 
   /** {@inheritDoc} */
   @Override
-  public void shutdownDomain(String baseDn)
+  public void shutdownDomain(DN baseDN)
   {
-    shutdownDbHandlers(getDomainMap(baseDn));
+    shutdownDbHandlers(getDomainMap(baseDN));
   }
 
   private void shutdownDbHandlers(Map<Integer, DbHandler> domainMap)
@@ -240,9 +240,9 @@
 
   /** {@inheritDoc} */
   @Override
-  public Map<Integer, CSN> getDomainFirstCSNs(String baseDn)
+  public Map<Integer, CSN> getDomainFirstCSNs(DN baseDN)
   {
-    final Map<Integer, DbHandler> domainMap = getDomainMap(baseDn);
+    final Map<Integer, DbHandler> domainMap = getDomainMap(baseDN);
     final Map<Integer, CSN> results =
         new HashMap<Integer, CSN>(domainMap.size());
     for (DbHandler dbHandler : domainMap.values())
@@ -254,9 +254,9 @@
 
   /** {@inheritDoc} */
   @Override
-  public Map<Integer, CSN> getDomainLastCSNs(String baseDn)
+  public Map<Integer, CSN> getDomainLastCSNs(DN baseDN)
   {
-    final Map<Integer, DbHandler> domainMap = getDomainMap(baseDn);
+    final Map<Integer, DbHandler> domainMap = getDomainMap(baseDN);
     final Map<Integer, CSN> results =
         new HashMap<Integer, CSN>(domainMap.size());
     for (DbHandler dbHandler : domainMap.values())
@@ -268,9 +268,9 @@
 
   /** {@inheritDoc} */
   @Override
-  public void clearDomain(String baseDn)
+  public void clearDomain(DN baseDN)
   {
-    final Map<Integer, DbHandler> domainMap = getDomainMap(baseDn);
+    final Map<Integer, DbHandler> domainMap = getDomainMap(baseDN);
     synchronized (domainMap)
     {
       for (DbHandler dbHandler : domainMap.values())
@@ -294,7 +294,7 @@
 
     try
     {
-      dbEnv.clearGenerationId(baseDn);
+      dbEnv.clearGenerationId(baseDN);
     }
     catch (Exception ignored)
     {
@@ -320,10 +320,10 @@
 
   /** {@inheritDoc} */
   @Override
-  public long getDomainLatestTrimDate(String baseDn)
+  public long getDomainLatestTrimDate(DN baseDN)
   {
     long latest = 0;
-    for (DbHandler dbHandler : getDomainMap(baseDn).values())
+    for (DbHandler dbHandler : getDomainMap(baseDN).values())
     {
       if (latest == 0 || latest < dbHandler.getLatestTrimDate())
       {
@@ -335,9 +335,9 @@
 
   /** {@inheritDoc} */
   @Override
-  public CSN getCSNAfter(String baseDn, int serverId, CSN startAfterCSN)
+  public CSN getCSNAfter(DN baseDN, int serverId, CSN startAfterCSN)
   {
-    final DbHandler dbHandler = getDbHandler(baseDn, serverId);
+    final DbHandler dbHandler = getDbHandler(baseDN, serverId);
 
     ReplicaDBCursor cursor = null;
     try
@@ -407,10 +407,10 @@
 
   /** {@inheritDoc} */
   @Override
-  public ReplicaDBCursor getCursorFrom(String baseDn, int serverId,
+  public ReplicaDBCursor getCursorFrom(DN baseDN, int serverId,
       CSN startAfterCSN)
   {
-    DbHandler dbHandler = getDbHandler(baseDn, serverId);
+    DbHandler dbHandler = getDbHandler(baseDN, serverId);
     if (dbHandler == null)
     {
       return null;
@@ -437,11 +437,11 @@
 
   /** {@inheritDoc} */
   @Override
-  public boolean publishUpdateMsg(String baseDn, int serverId,
+  public boolean publishUpdateMsg(DN baseDN, int serverId,
       UpdateMsg updateMsg) throws ChangelogException
   {
     final Pair<DbHandler, Boolean> pair =
-        getOrCreateDbHandler(baseDn, serverId, replicationServer);
+        getOrCreateDbHandler(baseDN, serverId, replicationServer);
     final DbHandler dbHandler = pair.getFirst();
     final boolean wasCreated = pair.getSecond();
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java
index fad6571..c50b535 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java
@@ -40,6 +40,7 @@
 import org.opends.server.replication.server.ReplicationServer;
 import org.opends.server.replication.server.ReplicationServerDomain;
 import org.opends.server.replication.server.changelog.api.ChangelogException;
+import org.opends.server.types.DN;
 import org.opends.server.util.StaticUtils;
 
 import com.sleepycat.je.*;
@@ -65,7 +66,7 @@
   private ReplicationDbEnv dbenv;
   private ReplicationServer replicationServer;
   private int serverId;
-  private String baseDn;
+  private DN baseDN;
 
   /**
    * The lock used to provide exclusive access to the thread that close the db
@@ -117,25 +118,24 @@
    * Creates a new database or open existing database that will be used
    * to store and retrieve changes from an LDAP server.
    * @param serverId The identifier of the LDAP server.
-   * @param baseDn The baseDn of the replication domain.
+   * @param baseDN The baseDN of the replication domain.
    * @param replicationServer The ReplicationServer that needs to be shutdown.
    * @param dbenv The Db environment to use to create the db.
    * @throws ChangelogException If a database problem happened.
    */
-  public ReplicationDB(int serverId, String baseDn,
-                     ReplicationServer replicationServer,
-                     ReplicationDbEnv dbenv)
-                     throws ChangelogException
+  public ReplicationDB(int serverId, DN baseDN,
+      ReplicationServer replicationServer, ReplicationDbEnv dbenv)
+      throws ChangelogException
   {
     this.serverId = serverId;
-    this.baseDn = baseDn;
+    this.baseDN = baseDN;
     this.dbenv = dbenv;
     this.replicationServer = replicationServer;
 
     // Get or create the associated ReplicationServerDomain and Db.
     final ReplicationServerDomain domain =
-        replicationServer.getReplicationServerDomain(baseDn, true);
-    db = dbenv.getOrAddDb(serverId, baseDn, domain.getGenerationId());
+        replicationServer.getReplicationServerDomain(baseDN, true);
+    db = dbenv.getOrAddDb(serverId, baseDN, domain.getGenerationId());
 
 
     intializeCounters();
@@ -527,7 +527,7 @@
   @Override
   public String toString()
   {
-    return serverId + baseDn;
+    return serverId + " " + baseDN.toNormalizedString();
   }
 
   /**
@@ -876,7 +876,7 @@
       String dbName = db.getDatabaseName();
 
       // Clears the reference to this serverID
-      dbenv.clearServerId(baseDn, serverId);
+      dbenv.clearServerId(baseDN, serverId);
 
       // Closing is requested by the Berkeley DB before truncate
       db.close();
@@ -886,7 +886,7 @@
       dbenv.clearDb(dbName);
 
       // RE-create the db
-      db = dbenv.getOrAddDb(serverId, baseDn, -1);
+      db = dbenv.getOrAddDb(serverId, baseDN, -1);
     }
     catch(Exception e)
     {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java
index 4f1f166..8db0837 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java
@@ -37,6 +37,8 @@
 import org.opends.server.replication.server.ChangelogState;
 import org.opends.server.replication.server.ReplicationServer;
 import org.opends.server.replication.server.changelog.api.ChangelogException;
+import org.opends.server.types.DN;
+import org.opends.server.types.DirectoryException;
 
 import com.sleepycat.je.*;
 
@@ -190,29 +192,29 @@
         final String stringData = toString(data.getData());
 
         if (debugEnabled())
-          debug("read (" + GENERATION_ID_TAG + " generationId baseDn) OR "
+          debug("read (" + GENERATION_ID_TAG + " generationId baseDN) OR "
               + "(serverId baseDN): " + stringData);
 
         final String[] str = stringData.split(FIELD_SEPARATOR, 3);
         if (str[0].equals(GENERATION_ID_TAG))
         {
           long generationId = toLong(str[1]);
-          String baseDn = str[2];
+          DN baseDN = DN.decode(str[2]);
 
           if (debugEnabled())
-            debug("has read baseDn=" + baseDn + " generationId=" +generationId);
+            debug("has read baseDN=" + baseDN + " generationId=" +generationId);
 
-          result.setDomainGenerationId(baseDn, generationId);
+          result.setDomainGenerationId(baseDN, generationId);
         }
         else
         {
           int serverId = toInt(str[0]);
-          String baseDn = str[1];
+          DN baseDN = DN.decode(str[1]);
 
           if (debugEnabled())
-            debug("has read: baseDn=" + baseDn + " serverId=" + serverId);
+            debug("has read: baseDN=" + baseDN + " serverId=" + serverId);
 
-          result.addServerIdToDomain(serverId, baseDn);
+          result.addServerIdToDomain(serverId, baseDN);
         }
 
         status = cursor.getNext(key, data, LockMode.DEFAULT);
@@ -224,6 +226,10 @@
     {
       throw new ChangelogException(e);
     }
+    catch (DirectoryException e)
+    {
+      throw new ChangelogException(e);
+    }
     finally
     {
       close(cursor);
@@ -290,37 +296,37 @@
 
   /**
    * Finds or creates the database used to store changes from the server with
-   * the given serverId and the given baseDn.
+   * the given serverId and the given baseDN.
    *
    * @param serverId
    *          The server id that identifies the server.
-   * @param baseDn
-   *          The baseDn that identifies the domain.
+   * @param baseDN
+   *          The baseDN that identifies the domain.
    * @param generationId
    *          The generationId associated to this domain.
    * @return the Database.
    * @throws ChangelogException
    *           in case of underlying Exception.
    */
-  public Database getOrAddDb(int serverId, String baseDn, long generationId)
+  public Database getOrAddDb(int serverId, DN baseDN, long generationId)
       throws ChangelogException
   {
     if (debugEnabled())
-      debug("ReplicationDbEnv.getOrAddDb(" + serverId + ", " + baseDn + ", "
+      debug("ReplicationDbEnv.getOrAddDb(" + serverId + ", " + baseDN + ", "
           + generationId + ")");
     try
     {
       // JNR: redundant info is stored between the key and data down below.
       // It is probably ok since "changelogstate" DB does not receive a high
       // volume of inserts.
-      final String serverIdToBaseDn = buildServerIdKey(baseDn, serverId);
+      final String serverIdToBaseDn = buildServerIdKey(baseDN, serverId);
 
       // Opens the DB for the changes received from this server on this domain.
       Database db = openDatabase(serverIdToBaseDn);
 
       putInChangelogStateDBIfNotExist(serverIdToBaseDn, serverIdToBaseDn);
-      putInChangelogStateDBIfNotExist(buildGenIdKey(baseDn),
-                                      buildGenIdData(baseDn, generationId));
+      putInChangelogStateDBIfNotExist(buildGenIdKey(baseDN),
+                                      buildGenIdData(baseDN, generationId));
       return db;
     }
     catch (RuntimeException e)
@@ -329,20 +335,20 @@
     }
   }
 
-  private String buildGenIdKey(String baseDn)
+  private String buildGenIdKey(DN baseDN)
   {
-    return GENERATION_ID_TAG + FIELD_SEPARATOR + baseDn;
+    return GENERATION_ID_TAG + FIELD_SEPARATOR + baseDN.toNormalizedString();
   }
 
-  private String buildServerIdKey(String baseDn, int serverId)
+  private String buildServerIdKey(DN baseDN, int serverId)
   {
-    return serverId + FIELD_SEPARATOR + baseDn;
+    return serverId + FIELD_SEPARATOR + baseDN.toNormalizedString();
   }
 
-  private String buildGenIdData(String baseDn, long generationId)
+  private String buildGenIdData(DN baseDN, long generationId)
   {
     return GENERATION_ID_TAG + FIELD_SEPARATOR + generationId + FIELD_SEPARATOR
-        + baseDn;
+        + baseDN.toNormalizedString();
   }
 
   private void putInChangelogStateDBIfNotExist(String keyString,
@@ -420,31 +426,31 @@
     }
 
   /**
-   * Clears the provided generationId associated to the provided baseDn from the
+   * Clears the provided generationId associated to the provided baseDN from the
    * state Db.
    *
-   * @param baseDn
-   *          The baseDn for which the generationID must be cleared.
+   * @param baseDN
+   *          The baseDN for which the generationID must be cleared.
    */
-  public void clearGenerationId(String baseDn)
+  public void clearGenerationId(DN baseDN)
   {
-    deleteFromChangelogStateDB(buildGenIdKey(baseDn),
-        "clearGenerationId(baseDN=" + baseDn + ")");
+    deleteFromChangelogStateDB(buildGenIdKey(baseDN),
+        "clearGenerationId(baseDN=" + baseDN + ")");
   }
 
   /**
-   * Clears the provided serverId associated to the provided baseDn from the
+   * Clears the provided serverId associated to the provided baseDN from the
    * state Db.
    *
-   * @param baseDn
-   *          The baseDn for which the generationID must be cleared.
+   * @param baseDN
+   *          The baseDN for which the serverId must be cleared.
    * @param serverId
    *          The serverId to remove from the Db.
    */
-  public void clearServerId(String baseDn, int serverId)
+  public void clearServerId(DN baseDN, int serverId)
   {
-    deleteFromChangelogStateDB(buildServerIdKey(baseDn, serverId),
-        "clearServerId(baseDN=" + baseDn + " , serverId=" + serverId + ")");
+    deleteFromChangelogStateDB(buildServerIdKey(baseDN, serverId),
+        "clearServerId(baseDN=" + baseDN + " , serverId=" + serverId + ")");
   }
 
   private void deleteFromChangelogStateDB(String keyString,
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
index 2195c79..e1a7a00 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
@@ -45,6 +45,7 @@
 import org.opends.server.replication.common.*;
 import org.opends.server.replication.plugin.MultimasterReplication;
 import org.opends.server.replication.protocol.*;
+import org.opends.server.types.DN;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.util.ServerConstants;
 
@@ -79,7 +80,7 @@
   private volatile String replicationServer = NO_CONNECTED_SERVER;
   private volatile Session session = null;
   private final ServerState state;
-  private final String baseDn;
+  private final DN baseDN;
   private final int serverId;
   private Semaphore sendWindow;
   private int maxSendWindow;
@@ -192,9 +193,9 @@
    * @param replicationDomain The replication domain that is creating us.
    * @param state The ServerState that should be used by this broker
    *        when negotiating the session with the replicationServer.
-   * @param baseDn The base DN that should be used by this broker
+   * @param baseDN The base DN that should be used by this broker
    *        when negotiating the session with the replicationServer.
-   * @param serverID2 The server ID that should be used by this broker
+   * @param serverId The server ID that should be used by this broker
    *        when negotiating the session with the replicationServer.
    * @param window The size of the send and receive window to use.
    * @param generationId The generationId for the server associated to the
@@ -208,14 +209,14 @@
    *        or zero if no CSN heartbeat should be sent.
    */
   public ReplicationBroker(ReplicationDomain replicationDomain,
-    ServerState state, String baseDn, int serverID2, int window,
+    ServerState state, DN baseDN, int serverId, int window,
     long generationId, long heartbeatInterval,
     ReplSessionSecurity replSessionSecurity, byte groupId,
     long changeTimeHeartbeatInterval)
   {
     this.domain = replicationDomain;
-    this.baseDn = baseDn;
-    this.serverId = serverID2;
+    this.baseDN = baseDN;
+    this.serverId = serverId;
     this.state = state;
     this.protocolVersion = ProtocolVersion.getCurrentVersion();
     this.replSessionSecurity = replSessionSecurity;
@@ -245,7 +246,7 @@
     {
       shutdown = false;
       this.rcvWindow = this.maxRcvWindow;
-      this.connect();
+      connect();
     }
   }
 
@@ -269,7 +270,7 @@
       }
 
       this.rcvWindow = this.maxRcvWindow;
-      this.connect();
+      connect();
     }
   }
 
@@ -779,8 +780,8 @@
 
   private void connect()
   {
-    if (this.baseDn.compareToIgnoreCase(
-      ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT) == 0)
+    if (this.baseDN.toNormalizedString().equalsIgnoreCase(
+        ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT))
     {
       connectAsECL();
     } else
@@ -964,14 +965,14 @@
             || (electedRsInfo.getGenerationId() == -1))
         {
           Message message = NOTE_NOW_FOUND_SAME_GENERATION_CHANGELOG
-              .get(serverId, rsServerId, baseDn,
+              .get(serverId, rsServerId, baseDN.toNormalizedString(),
                   session.getReadableRemoteAddress(),
                   getGenerationID());
           logError(message);
         } else
         {
           Message message = WARN_NOW_FOUND_BAD_GENERATION_CHANGELOG
-              .get(serverId, rsServerId, baseDn,
+              .get(serverId, rsServerId, baseDN.toNormalizedString(),
                   session.getReadableRemoteAddress(),
                   getGenerationID(),
                   electedRsInfo.getGenerationId());
@@ -995,15 +996,14 @@
           {
             Message message = WARN_COULD_NOT_FIND_CHANGELOG.get(
                 serverId,
-                baseDn,
-                collectionToString(replicationServerInfos.keySet(),
-                    ", "));
+                baseDN.toNormalizedString(),
+                collectionToString(replicationServerInfos.keySet(), ", "));
             logError(message);
           }
           else
           {
             Message message = WARN_NO_AVAILABLE_CHANGELOGS.get(
-                serverId, baseDn);
+                serverId, baseDN.toNormalizedString());
             logError(message);
           }
         }
@@ -1082,11 +1082,10 @@
         warn user and start heartbeat monitor to recover when a server
         with the right group id shows up.
         */
-        Message message =
-            WARN_CONNECTED_TO_SERVER_WITH_WRONG_GROUP_ID.get(Byte
-                .toString(groupId), Integer.toString(rsServerId), rsInfo
-                .getServerURL(), Byte.toString(getRsGroupId()), baseDn, Integer
-                .toString(serverId));
+        Message message = WARN_CONNECTED_TO_SERVER_WITH_WRONG_GROUP_ID.get(
+                Byte.toString(groupId), Integer.toString(rsServerId),
+                rsInfo.getServerURL(), Byte.toString(getRsGroupId()),
+                baseDN.toNormalizedString(), Integer.toString(serverId));
         logError(message);
       }
       startRSHeartBeatMonitoring();
@@ -1098,10 +1097,9 @@
     }
     catch (Exception e)
     {
-      Message message =
-          ERR_COMPUTING_FAKE_OPS.get(baseDn, rsInfo.getServerURL(), e
-              .getLocalizedMessage()
-              + stackTraceToSingleLineString(e));
+      Message message = ERR_COMPUTING_FAKE_OPS.get(
+          baseDN.toNormalizedString(), rsInfo.getServerURL(),
+          e.getLocalizedMessage() + " " + stackTraceToSingleLineString(e));
       logError(message);
     }
     finally
@@ -1149,7 +1147,7 @@
 
         if (debugEnabled())
         {
-          TRACER.debugInfo("RB for dn " + baseDn + " and with server id "
+          TRACER.debugInfo("RB for dn " + baseDN + " and with server id "
               + serverId + " computed " + nChanges + " changes late.");
         }
 
@@ -1211,6 +1209,8 @@
     String port = server.substring(separator + 1);
     String hostname = server.substring(0, separator);
 
+    final String baseDn = this.baseDN.toNormalizedString();
+
     Session localSession = null;
     Socket socket = null;
     boolean hasConnected = false;
@@ -1218,9 +1218,7 @@
 
     try
     {
-      /*
-       * Open a socket connection to the next candidate.
-       */
+      // Open a socket connection to the next candidate.
       int intPort = Integer.parseInt(port);
       InetSocketAddress serverAddr = new InetSocketAddress(
           InetAddress.getByName(hostname), intPort);
@@ -1239,15 +1237,15 @@
       StartMsg serverStartMsg;
       if (!isECL)
       {
-        serverStartMsg = new ServerStartMsg(serverId, url, baseDn,
-            maxRcvWindow, heartbeatInterval, state,
-            this.getGenerationID(), isSslEncryption, groupId);
+        serverStartMsg = new ServerStartMsg(serverId, url,
+            baseDN.toNormalizedString(), maxRcvWindow, heartbeatInterval, state,
+            getGenerationID(), isSslEncryption, groupId);
       }
       else
       {
         serverStartMsg = new ServerStartECLMsg(url, 0, 0, 0, 0,
             maxRcvWindow, heartbeatInterval, state,
-            this.getGenerationID(), isSslEncryption, groupId);
+            getGenerationID(), isSslEncryption, groupId);
       }
       localSession.publish(serverStartMsg);
 
@@ -1256,7 +1254,7 @@
       ReplicationMsg msg = localSession.receive();
       if (debugEnabled())
       {
-        TRACER.debugInfo("In RB for " + baseDn + "\nRB HANDSHAKE SENT:\n"
+        TRACER.debugInfo("In RB for " + baseDN + "\nRB HANDSHAKE SENT:\n"
             + serverStartMsg + "\nAND RECEIVED:\n" + msg);
       }
 
@@ -1266,10 +1264,9 @@
 
       // Sanity check
       String repDn = replServerInfo.getBaseDn();
-      if (!this.baseDn.equals(repDn))
+      if (!baseDn.equals(repDn))
       {
-        errorMessage = ERR_DS_DN_DOES_NOT_MATCH.get(repDn,
-            this.baseDn);
+        errorMessage = ERR_DS_DN_DOES_NOT_MATCH.get(repDn, baseDn);
         return null;
       }
 
@@ -1324,22 +1321,8 @@
     {
       if (!hasConnected || !keepConnection)
       {
-        if (localSession != null)
-        {
-          localSession.close();
-        }
-
-        if (socket != null)
-        {
-          try
-          {
-            socket.close();
-          }
-          catch (IOException e)
-          {
-            // Ignore.
-          }
-        }
+        close(localSession);
+        close(socket);
       }
 
       if (!hasConnected && errorMessage != null)
@@ -1372,13 +1355,9 @@
    * reply message from the replication server.
    *
    * @param server Server we are connecting with.
-   * @return The ReplServerStartMsg the server replied. Null if could not
-   *         get an answer.
    */
-  private TopologyMsg performECLPhaseTwoHandshake(String server)
+  private void performECLPhaseTwoHandshake(String server)
   {
-    TopologyMsg topologyMsg = null;
-
     try
     {
       // Send our Start Session
@@ -1386,32 +1365,24 @@
       startECLSessionMsg.setOperationId("-1");
       session.publish(startECLSessionMsg);
 
-      /* FIXME:ECL In the handshake phase two, should RS send back a topo msg ?
-       * Read the TopologyMsg that should come back.
-      topologyMsg = (TopologyMsg) session.receive();
-       */
+      // FIXME ECL In the handshake phase two, should RS send back a topo msg ?
       if (debugEnabled())
       {
-        TRACER.debugInfo("In RB for " + baseDn + "\nRB HANDSHAKE SENT:\n"
+        TRACER.debugInfo("In RB for " + baseDN + "\nRB HANDSHAKE SENT:\n"
             + startECLSessionMsg);
       }
 
       // Alright set the timeout to the desired value
       session.setSoTimeout(timeout);
       connected = true;
-
     } catch (Exception e)
     {
       Message message = WARN_EXCEPTION_STARTING_SESSION_PHASE.get(serverId,
-          server, baseDn, stackTraceToSingleLineString(e));
+          server, baseDN.toNormalizedString(), stackTraceToSingleLineString(e));
       logError(message);
 
       setSession(null);
-
-      // Be sure to return null.
-      topologyMsg = null;
     }
-    return topologyMsg;
   }
 
   /**
@@ -1464,7 +1435,7 @@
 
       if (debugEnabled())
       {
-        TRACER.debugInfo("In RB for " + baseDn + "\nRB HANDSHAKE SENT:\n"
+        TRACER.debugInfo("In RB for " + baseDN + "\nRB HANDSHAKE SENT:\n"
             + startSessionMsg + "\nAND RECEIVED:\n" + topologyMsg);
       }
 
@@ -1474,7 +1445,7 @@
     } catch (Exception e)
     {
       Message message = WARN_EXCEPTION_STARTING_SESSION_PHASE.get(serverId,
-          server, baseDn, stackTraceToSingleLineString(e));
+          server, baseDN.toNormalizedString(), stackTraceToSingleLineString(e));
       logError(message);
 
       setSession(null);
@@ -2118,8 +2089,8 @@
     // Start a heartbeat monitor thread.
     if (heartbeatInterval > 0)
     {
-      heartbeatMonitor = new HeartbeatMonitor(getServerId(),
-          getRsServerId(), baseDn, session, heartbeatInterval);
+      heartbeatMonitor = new HeartbeatMonitor(getServerId(), getRsServerId(),
+          baseDN.toNormalizedString(), session, heartbeatInterval);
       heartbeatMonitor.start();
     }
   }
@@ -2185,8 +2156,8 @@
         catch (Exception e)
         {
           MessageBuilder mb = new MessageBuilder();
-          mb.append(NOTE_EXCEPTION_RESTARTING_SESSION.get(baseDn,
-              e.getLocalizedMessage()));
+          mb.append(NOTE_EXCEPTION_RESTARTING_SESSION.get(
+              baseDN.toNormalizedString(), e.getLocalizedMessage()));
           mb.append(stackTraceToSingleLineString(e));
           logError(mb.toMessage());
         }
@@ -2210,7 +2181,7 @@
     if (debugEnabled())
     {
       TRACER.debugInfo(this + " end restart : connected=" + connected
-        + " with RSid=" + this.getRsServerId() + " genid=" + this.generationID);
+        + " with RSid=" + getRsServerId() + " genid=" + this.generationID);
     }
   }
 
@@ -2476,17 +2447,14 @@
         }
         else if (msg instanceof StopMsg)
         {
-          /*
-           * RS performs a proper disconnection
-           */
-          Message message = WARN_REPLICATION_SERVER_PROPERLY_DISCONNECTED
-              .get(replicationServerID,
-                  savedSession.getReadableRemoteAddress(),
-              serverId, baseDn);
+          // RS performs a proper disconnection
+          Message message = WARN_REPLICATION_SERVER_PROPERLY_DISCONNECTED.get(
+              replicationServerID, savedSession.getReadableRemoteAddress(),
+              serverId, baseDN.toNormalizedString());
           logError(message);
 
           // Try to find a suitable RS
-          this.reStart(savedSession, true);
+          reStart(savedSession, true);
         }
         else if (msg instanceof MonitorMsg)
         {
@@ -2547,14 +2515,15 @@
                   message = NOTE_LOAD_BALANCE_REPLICATION_SERVER.get(
                       serverId, replicationServerID,
                       savedSession.getReadableRemoteAddress(),
-                      baseDn);
+                      baseDN.toNormalizedString());
                 }
                 else
                 {
                   message = NOTE_NEW_BEST_REPLICATION_SERVER.get(
                       serverId, replicationServerID,
                       savedSession.getReadableRemoteAddress(),
-                      bestServerInfo.getServerId(), baseDn);
+                      bestServerInfo.getServerId(),
+                      baseDN.toNormalizedString());
                 }
                 logError(message);
                 reStart(true);
@@ -2586,12 +2555,10 @@
           final Session tmpSession = session;
           if (tmpSession == null || !tmpSession.closeInitiated())
           {
-            /*
-             * We did not initiate the close on our side, log an error message.
-             */
-            Message message = WARN_REPLICATION_SERVER_BADLY_DISCONNECTED
-                .get(serverId, baseDn, replicationServerID,
-                    savedSession.getReadableRemoteAddress());
+            // We did not initiate the close on our side, log an error message.
+            Message message = WARN_REPLICATION_SERVER_BADLY_DISCONNECTED.get(
+                serverId, baseDN.toNormalizedString(), replicationServerID,
+                savedSession.getReadableRemoteAddress());
             logError(message);
           }
 
@@ -2678,7 +2645,7 @@
     if (debugEnabled())
       TRACER.debugInfo("ReplicationBroker " + serverId + " is stopping and will"
         + " close the connection to replication server " + rsServerId + " for"
-        + " domain " + baseDn);
+        + " domain " + baseDN);
 
     synchronized (startStopLock)
     {
@@ -2767,10 +2734,8 @@
     if (connected)
     {
       return sendWindow.availablePermits();
-    } else
-    {
-      return 0;
     }
+    return 0;
   }
 
   /**
@@ -2864,9 +2829,9 @@
     } catch (IOException ex)
     {
       Message message = ERR_EXCEPTION_SENDING_CS.get(
-        baseDn,
+        baseDN.toNormalizedString(),
         Integer.toString(serverId),
-        ex.getLocalizedMessage() + stackTraceToSingleLineString(ex));
+        ex.getLocalizedMessage() + " " + stackTraceToSingleLineString(ex));
       logError(message);
     }
   }
@@ -3022,10 +2987,9 @@
     // Start a CSN heartbeat thread.
     if (changeTimeHeartbeatSendInterval > 0)
     {
-      String threadName = "Replica DS("
-          + this.getServerId()
+      String threadName = "Replica DS(" + getServerId()
           + ") change time heartbeat publisher for domain \""
-          + this.baseDn + "\" to RS(" + this.getRsServerId()
+          + this.baseDN + "\" to RS(" + getRsServerId()
           + ") at " + session.getReadableRemoteAddress();
 
       ctHeartbeatPublisherThread = new CTHeartbeatPublisherThread(
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
index bffdd04..577c766 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
@@ -50,6 +50,7 @@
 import org.opends.server.tasks.InitializeTargetTask;
 import org.opends.server.tasks.InitializeTask;
 import org.opends.server.types.Attribute;
+import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.ResultCode;
 
@@ -79,7 +80,7 @@
  *   and which can start receiving updates.
  * <p>
  *   When updates are received the Replication Service calls the
- *   {@link #processUpdate(UpdateMsg)} method.
+ *   {@link #processUpdate(UpdateMsg, AtomicBoolean)} method.
  *   ReplicationDomain implementation should implement the appropriate code
  *   for replaying the update on the local repository.
  *   When fully done the subclass must call the
@@ -121,7 +122,7 @@
    *  All Replication Domain using this baseDN will be connected
    *  through the Replication Service.
    */
-  private final String baseDN;
+  private final DN baseDN;
 
   /**
    * The identifier of this Replication Domain inside the
@@ -161,8 +162,8 @@
   /**
    * A Map used to store all the ReplicationDomains created on this server.
    */
-  private static Map<String, ReplicationDomain> domains =
-    new HashMap<String, ReplicationDomain>();
+  private static Map<DN, ReplicationDomain> domains =
+      new HashMap<DN, ReplicationDomain>();
 
   /*
    * Assured mode properties
@@ -335,7 +336,7 @@
    *                   is participating to a given Replication Domain.
    * @param initWindow Window used during initialization.
    */
-  public ReplicationDomain(String baseDN, int serverID,int initWindow)
+  public ReplicationDomain(DN baseDN, int serverID, int initWindow)
   {
     this.baseDN = baseDN;
     this.serverID = serverID;
@@ -358,8 +359,7 @@
    *                   is participating to a given Replication Domain.
    * @param serverState The serverState to use
    */
-  public ReplicationDomain(String baseDN, int serverID,
-    ServerState serverState)
+  public ReplicationDomain(DN baseDN, int serverID, ServerState serverState)
   {
     this.baseDN = baseDN;
     this.serverID = serverID;
@@ -397,7 +397,7 @@
     if (!isValidInitialStatus(initStatus))
     {
       Message msg = ERR_DS_INVALID_INIT_STATUS.get(initStatus.toString(),
-        baseDN, Integer.toString(serverID));
+          getBaseDNString(), Integer.toString(serverID));
       logError(msg);
     } else
     {
@@ -426,7 +426,7 @@
     if (event == StatusMachineEvent.INVALID_EVENT)
     {
       Message msg = ERR_DS_INVALID_REQUESTED_STATUS.get(reqStatus.toString(),
-        baseDN, Integer.toString(serverID));
+          getBaseDNString(), Integer.toString(serverID));
       logError(msg);
       return;
     }
@@ -482,13 +482,23 @@
   }
 
   /**
+   * Returns the base DN of this ReplicationDomain.
+   *
+   * @return The base DN of this ReplicationDomain
+   */
+  public DN getBaseDN()
+  {
+    return baseDN;
+  }
+
+  /**
    * Gets the baseDN of this domain.
    *
    * @return The baseDN for this domain.
    */
   public String getBaseDNString()
   {
-    return baseDN;
+    return baseDN.toNormalizedString();
   }
 
   /**
@@ -943,7 +953,7 @@
         requested servers. Log problem
         */
         Message errorMsg = NOTE_DS_RECEIVED_ACK_ERROR.get(
-            baseDN, Integer.toString(serverID),
+            getBaseDNString(), Integer.toString(serverID),
             update.toString(), ack.errorsToString());
         logError(errorMsg);
 
@@ -1387,7 +1397,7 @@
     if (serverToInitialize == RoutableMsg.ALL_SERVERS)
     {
       Message msg = NOTE_FULL_UPDATE_ENGAGED_FOR_REMOTE_START_ALL.get(
-          countEntries(), baseDN, serverID);
+          countEntries(), getBaseDNString(), serverID);
       logError(msg);
 
       for (DSInfo dsi : getReplicasList())
@@ -1403,7 +1413,7 @@
     else
     {
       Message msg = NOTE_FULL_UPDATE_ENGAGED_FOR_REMOTE_START.get(
-          countEntries(), baseDN, serverID, serverToInitialize);
+          countEntries(), getBaseDNString(), serverID, serverToInitialize);
       logError(msg);
 
       ieContext.startList.add(serverToInitialize);
@@ -1434,8 +1444,8 @@
 
         // Send start message to the peer
         InitializeTargetMsg initTargetMsg = new InitializeTargetMsg(
-            baseDN, serverID, serverToInitialize, serverRunningTheTask,
-            ieContext.entryCount, initWindow);
+            getBaseDNString(), serverID, serverToInitialize,
+            serverRunningTheTask, ieContext.entryCount, initWindow);
 
         broker.publish(initTargetMsg);
 
@@ -1457,7 +1467,6 @@
         // Notify the peer of the success
         DoneMsg doneMsg = new DoneMsg(serverID, initTargetMsg.getDestination());
         broker.publish(doneMsg);
-
       }
       catch(DirectoryException exportException)
       {
@@ -1558,14 +1567,14 @@
         .getLocalizedMessage() : "";
     if (serverToInitialize == RoutableMsg.ALL_SERVERS)
     {
-      Message msg = NOTE_FULL_UPDATE_ENGAGED_FOR_REMOTE_END_ALL
-          .get(baseDN, serverID, cause);
+      Message msg = NOTE_FULL_UPDATE_ENGAGED_FOR_REMOTE_END_ALL.get(
+          getBaseDNString(), serverID, cause);
       logError(msg);
     }
     else
     {
       Message msg = NOTE_FULL_UPDATE_ENGAGED_FOR_REMOTE_END.get(
-          baseDN, serverID, serverToInitialize, cause);
+          getBaseDNString(), serverID, serverToInitialize, cause);
       logError(msg);
     }
 
@@ -1922,7 +1931,7 @@
             Message errMsg =
               Message.raw(Category.SYNC, Severity.NOTICE,
                   ERR_INIT_EXPORTER_DISCONNECTION.get(
-                      this.baseDN,
+                      getBaseDNString(),
                       Integer.toString(this.serverID),
                       Integer.toString(ieContext.importSource)));
             if (ieContext.getException()==null)
@@ -2200,7 +2209,7 @@
       ieContext.initializeTask = initTask;
       ieContext.attemptCnt = 0;
       ieContext.initReqMsgSent = new InitializeRequestMsg(
-          baseDN, serverID, source, this.initWindow);
+          getBaseDNString(), serverID, source, this.initWindow);
 
       // Publish Init request msg
       broker.publish(ieContext.initReqMsgSent);
@@ -2261,7 +2270,7 @@
     {
       // Log starting
       Message msg = NOTE_FULL_UPDATE_ENGAGED_FROM_REMOTE_START.get(
-          baseDN, initTargetMsgReceived.getSenderID(), serverID);
+          getBaseDNString(), initTargetMsgReceived.getSenderID(), serverID);
       logError(msg);
 
       // Go into full update status
@@ -2395,7 +2404,7 @@
       finally
       {
         Message msg = NOTE_FULL_UPDATE_ENGAGED_FROM_REMOTE_END.get(
-            baseDN, initTargetMsgReceived.getSenderID(), serverID,
+            getBaseDNString(), initTargetMsgReceived.getSenderID(), serverID,
             (ieContext.getException() != null ? ieContext
                 .getException().getLocalizedMessage() : ""));
         logError(msg);
@@ -2436,7 +2445,7 @@
 
     if (newStatus == ServerStatus.INVALID_STATUS)
     {
-      Message msg = ERR_DS_CANNOT_CHANGE_STATUS.get(baseDN,
+      Message msg = ERR_DS_CANNOT_CHANGE_STATUS.get(getBaseDNString(),
           Integer.toString(serverID), status.toString(), event.toString());
       logError(msg);
       return;
@@ -2514,10 +2523,8 @@
     }
     if (!allSet)
     {
-      ResultCode resultCode = ResultCode.OTHER;
-      Message message = ERR_RESET_GENERATION_ID_FAILED.get(baseDN);
-      throw new DirectoryException(
-          resultCode, message);
+      Message message = ERR_RESET_GENERATION_ID_FAILED.get(getBaseDNString());
+      throw new DirectoryException(ResultCode.OTHER, message);
     }
   }
 
@@ -2592,7 +2599,7 @@
     if (!isConnected())
     {
       ResultCode resultCode = ResultCode.OTHER;
-      Message message = ERR_RESET_GENERATION_CONN_ERR_ID.get(baseDN,
+      Message message = ERR_RESET_GENERATION_CONN_ERR_ID.get(getBaseDNString(),
           Integer.toString(serverID),
           Long.toString(genIdMessage.getGenerationId()));
       throw new DirectoryException(
@@ -2987,11 +2994,10 @@
    * Starts the receiver side of the Replication Service.
    * <p>
    * After this method has been called, the Replication Service will start
-   * calling the {@link #processUpdate(UpdateMsg)}.
+   * calling the {@link #processUpdate(UpdateMsg, AtomicBoolean)}.
    * <p>
    * This method must be called once and must be called after the
    * {@link #startPublishService(Collection, int, long, long)}.
-   *
    */
   public void startListenService()
   {
@@ -3234,8 +3240,8 @@
         } else if (assuredMode != AssuredMode.SAFE_DATA_MODE)
         {
           Message errorMsg = ERR_DS_UNKNOWN_ASSURED_MODE.get(
-              Integer.toString(serverID), msgAssuredMode.toString(), baseDN,
-            msg.toString());
+              Integer.toString(serverID), msgAssuredMode.toString(),
+              getBaseDNString(), msg.toString());
           logError(errorMsg);
         }
         // Nothing to do in Assured safe data mode, only RS ack updates.
@@ -3401,9 +3407,9 @@
    * Publish an {@link UpdateMsg} to the Replication Service.
    * <p>
    * The Replication Service will handle the delivery of this {@link UpdateMsg}
-   * to all the participants of this Replication Domain.
-   * These members will be receive this {@link UpdateMsg} through a call
-   * of the {@link #processUpdate(UpdateMsg)} message.
+   * to all the participants of this Replication Domain. These members will be
+   * receive this {@link UpdateMsg} through a call of the
+   * {@link #processUpdate(UpdateMsg, AtomicBoolean)} message.
    *
    * @param msg The UpdateMsg that should be pushed.
    */
@@ -3449,8 +3455,8 @@
     {
       // This exception may only be raised if assured replication is
       // enabled
-      Message errorMsg = NOTE_DS_ACK_TIMEOUT.get(baseDN, Long.toString(
-        assuredTimeout), update.toString());
+      Message errorMsg = NOTE_DS_ACK_TIMEOUT.get(getBaseDNString(),
+          Long.toString(assuredTimeout), update.toString());
       logError(errorMsg);
     }
   }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
index dbda94d..eb87cc4 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
@@ -28,7 +28,6 @@
 package org.opends.server.replication;
 
 import java.io.File;
-import java.net.SocketException;
 import java.net.SocketTimeoutException;
 import java.util.*;
 
@@ -88,7 +87,7 @@
   private static final int changelog2ID = 12;
   private static final int changelog3ID = 13;
 
-  private DN baseDn;
+  private DN baseDN;
   private ReplicationBroker broker2 = null;
   private ReplicationBroker broker3 = null;
   private ReplicationServer replServer1 = null;
@@ -167,7 +166,7 @@
   {
     super.setUp();
 
-    baseDn = DN.decode(baseDnStr);
+    baseDN = DN.decode(baseDnStr);
 
     updatedEntries = newLDIFEntries();
 
@@ -181,7 +180,7 @@
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-remote-replica",
         "ds-task-class-name: org.opends.server.tasks.InitializeTargetTask",
-        "ds-task-initialize-domain-dn: " + baseDn,
+        "ds-task-initialize-domain-dn: " + baseDN,
         "ds-task-initialize-replica-server-id: " + server2ID);
   }
 
@@ -239,17 +238,17 @@
   {
 
     return new String[]{
-        "dn: " + baseDn + "\n"
+        "dn: " + baseDN + "\n"
             + "objectClass: top\n"
             + "objectClass: organization\n"
             + "entryUUID: 21111111-1111-1111-1111-111111111111\n"
             + "\n",
-        "dn: ou=People," + baseDn + "\n"
+        "dn: ou=People," + baseDN + "\n"
             + "objectClass: top\n"
             + "objectClass: organizationalUnit\n"
             + "entryUUID: 21111111-1111-1111-1111-111111111112\n"
             + "\n",
-        "dn: cn=Fiona Jensen,ou=people," + baseDn + "\n"
+        "dn: cn=Fiona Jensen,ou=people," + baseDN + "\n"
             + "objectclass: top\n"
             + "objectclass: person\n"
             + "objectclass: organizationalPerson\n"
@@ -260,7 +259,7 @@
             + "telephonenumber: +1 408 555 1212\n"
             + "entryUUID: 21111111-1111-1111-1111-111111111113\n"
             + "\n",
-        "dn: cn=Robert Langman,ou=people," + baseDn + "\n"
+        "dn: cn=Robert Langman,ou=people," + baseDN + "\n"
             + "objectclass: top\n"
             + "objectclass: person\n"
             + "objectclass: organizationalPerson\n"
@@ -343,36 +342,26 @@
    * @return The new created replication server.
    */
   private ReplicationServer createReplicationServer(int changelogId,
-      boolean all, String testCase)
+      boolean all, String testCase) throws Exception
   {
     SortedSet<String> servers = new TreeSet<String>();
-    try
+    if (all)
     {
-      if (all)
-      {
-        if (changelogId != changelog1ID)
-          servers.add("localhost:" + getChangelogPort(changelog1ID));
-        if (changelogId != changelog2ID)
-          servers.add("localhost:" + getChangelogPort(changelog2ID));
-        if (changelogId != changelog3ID)
-          servers.add("localhost:" + getChangelogPort(changelog3ID));
-      }
-      int chPort = getChangelogPort(changelogId);
-      String chDir = "generationIdTest"+changelogId+testCase+"Db";
-      ReplServerFakeConfiguration conf =
-        new ReplServerFakeConfiguration(chPort, chDir, 0, changelogId, 0, 100,
-            servers);
-      ReplicationServer replicationServer = new ReplicationServer(conf);
-      Thread.sleep(1000);
-
-      return replicationServer;
-
+      if (changelogId != changelog1ID)
+        servers.add("localhost:" + getChangelogPort(changelog1ID));
+      if (changelogId != changelog2ID)
+        servers.add("localhost:" + getChangelogPort(changelog2ID));
+      if (changelogId != changelog3ID)
+        servers.add("localhost:" + getChangelogPort(changelog3ID));
     }
-    catch (Exception e)
-    {
-      fail("createChangelog" + stackTraceToSingleLineString(e));
-    }
-    return null;
+    int chPort = getChangelogPort(changelogId);
+    String chDir = "generationIdTest" + changelogId + testCase + "Db";
+    ReplServerFakeConfiguration conf =
+        new ReplServerFakeConfiguration(chPort, chDir, 0, changelogId, 0, 100, servers);
+    ReplicationServer replicationServer = new ReplicationServer(conf);
+    Thread.sleep(1000);
+
+    return replicationServer;
   }
 
   /**
@@ -380,10 +369,9 @@
    * replication Server ID.
    * @param changeLogID replication Server ID
    */
-  private void connectServer1ToChangelog(int changeLogID)
+  private void connectServer1ToChangelog(int changeLogID) throws Exception
   {
     // Connect DS to the replicationServer
-    try
     {
       // suffix synchronized
       String synchroServerLdif =
@@ -412,8 +400,7 @@
       LDAPReplicationDomain doToco=null;
       while(waitCo<50)
       {
-        doToco =
-          LDAPReplicationDomain.retrievesReplicationDomain(baseDn);
+        doToco = LDAPReplicationDomain.retrievesReplicationDomain(baseDN);
         if (doToco != null && doToco.isConnected())
         {
           break;
@@ -425,19 +412,13 @@
       assertTrue(doToco.isConnected(), "not connected after #attempt="+waitCo);
       debugInfo("ReplicationDomain: Import/Export is running ? " + doToco.ieRunning());
     }
-    catch(Exception e)
-    {
-      debugInfo("connectToReplServer", e);
-      fail("connectToReplServer", e);
-    }
   }
 
   /**
    * Disconnect DS from the replicationServer
    */
-  private void disconnectFromReplServer(int changelogID)
+  private void disconnectFromReplServer(int changelogID) throws Exception
   {
-    try
     {
       // suffix synchronized
       String synchroServerStringDN = "cn=" + testName + ", cn=domains," +
@@ -447,8 +428,7 @@
 
       DN synchroServerDN = DN.decode(synchroServerStringDN);
 
-      Entry ecle;
-      ecle = DirectoryServer.getConfigHandler().getEntry(
+      Entry ecle = DirectoryServer.getConfigHandler().getEntry(
           DN.decode("cn=external changelog," + synchroServerStringDN));
       if (ecle!=null)
       {
@@ -468,8 +448,7 @@
         int waitCo=0;
         while(waitCo<30)
         {
-          replDomainToDis =
-            LDAPReplicationDomain.retrievesReplicationDomain(baseDn);
+          replDomainToDis = LDAPReplicationDomain.retrievesReplicationDomain(baseDN);
           Thread.sleep(200);
           waitCo++;
         }
@@ -481,10 +460,6 @@
         debugInfo("disconnectFromReplServer:" + changelogID, e);
       }
     }
-    catch(Exception e)
-    {
-      fail("disconnectFromReplServer", e);
-    }
   }
 
   private int getChangelogPort(int changelogID) throws Exception
@@ -499,19 +474,18 @@
   protected static final String REPLICATION_GENERATION_ID =
     "ds-sync-generation-id";
 
-  private long readGenIdFromSuffixRootEntry()
+  private long readGenIdFromSuffixRootEntry() throws Exception
   {
     long genId=-1;
-    try
     {
-      Entry resultEntry = getEntry(baseDn, 1000, true);
+      Entry resultEntry = getEntry(baseDN, 1000, true);
       if (resultEntry==null)
       {
-        debugInfo("Entry not found <" + baseDn + ">");
+        debugInfo("Entry not found <" + baseDN + ">");
       }
       else
       {
-        debugInfo("Entry found <" + baseDn + ">");
+        debugInfo("Entry found <" + baseDN + ">");
 
         AttributeType synchronizationGenIDType =
           DirectoryServer.getAttributeType(REPLICATION_GENERATION_ID);
@@ -529,44 +503,28 @@
 
       }
     }
-    catch(Exception e)
-    {
-      fail("Exception raised in readGenId", e);
-    }
     return genId;
   }
 
-  private void performLdifImport()
+  private void performLdifImport() throws Exception
   {
-    try
-    {
-      // Create a temporary test LDIF file.
-      /*
-    A temporary LDIF file containing some test entries.
-   */
-      File ldifFile = File.createTempFile("import-test", ".ldif");
-      String resourcePath = DirectoryServer.getInstanceRoot() + File.separator +
-      "config" + File.separator + "MakeLDIF";
-      LdifFileWriter.makeLdif(ldifFile.getPath(), resourcePath, template);
+    // Create a temporary test LDIF file.
+    // A temporary LDIF file containing some test entries.
+    File ldifFile = File.createTempFile("import-test", ".ldif");
+    String resourcePath =
+        DirectoryServer.getInstanceRoot() + File.separator + "config"
+            + File.separator + "MakeLDIF";
+    LdifFileWriter.makeLdif(ldifFile.getPath(), resourcePath, template);
 
-      // Launch import of the Ldif file on the memory test backend
-      // Note: we do not use a task here as import task does not work on memory
-      // backend: it disables then re-enables backend which leads to backend
-      // object instance lost and this is not accepttable for a backend with
-      // non persistent data
-      LDIFImportConfig importConfig =
-        new LDIFImportConfig(ldifFile.getAbsolutePath());
+    // Launch import of the Ldif file on the memory test backend
+    // Note: we do not use a task here as import task does not work on memory
+    // backend: it disables then re-enables backend which leads to backend
+    // object instance lost and this is not acceptable for a backend with
+    // non persistent data
+    LDIFImportConfig importConfig = new LDIFImportConfig(ldifFile.getAbsolutePath());
 
-      MemoryBackend memoryBackend =
-        (MemoryBackend) DirectoryServer.getBackend(TEST_BACKEND_ID);
-      memoryBackend.importLDIF(importConfig);
-
-    }
-    catch(Exception e)
-    {
-     fail("Could not perform ldif import on memory test backend: "
-       + e.getMessage());
-    }
+    MemoryBackend memoryBackend = (MemoryBackend) DirectoryServer.getBackend(TEST_BACKEND_ID);
+    memoryBackend.importLDIF(importConfig);
   }
 
   private String createEntry(UUID uid)
@@ -588,7 +546,7 @@
         + "userPassword: password\n" + "initials: AA\n";
   }
 
-  static protected ReplicationMsg createAddMsg()
+  static protected ReplicationMsg createAddMsg() throws Exception
   {
     Entry personWithUUIDEntry = null;
     String user1entryUUID;
@@ -619,14 +577,7 @@
     + "userPassword: password\n" + "initials: AA\n"
     + "entryUUID: " + user1entryUUID + "\n";
 
-    try
-    {
-      personWithUUIDEntry = TestCaseUtils.entryFromLdifString(entryWithUUIDldif);
-    }
-    catch(Exception e)
-    {
-      fail(e.getMessage());
-    }
+    personWithUUIDEntry = TestCaseUtils.entryFromLdifString(entryWithUUIDldif);
 
     // Create and publish an update message to add an entry.
     return new AddMsg(gen.newCSN(),
@@ -710,7 +661,7 @@
 
       debugInfo(testCase + " Expect genId to be set in memory on the replication " +
       " server side (not wrote on disk/db since no change occurred).");
-      rgenId = replServer1.getGenerationId(baseDn.toNormalizedString());
+      rgenId = replServer1.getGenerationId(baseDN);
       assertEquals(rgenId, EMPTY_DN_GENID);
 
       // Clean for next test
@@ -733,34 +684,19 @@
       assertTrue(genId != EMPTY_DN_GENID);
 
       debugInfo(testCase + " Test that the generationId is set on RS1");
-      rgenId = replServer1.getGenerationId(baseDn.toNormalizedString());
+      rgenId = replServer1.getGenerationId(baseDN);
       assertEquals(genId, rgenId);
 
       //===========================================================
       debugInfo(testCase + " ** TEST ** DS2 connection to RS1 with bad genID");
 
-      try
-      {
-        broker2 = openReplicationSession(baseDn,
-            server2ID, 100, getChangelogPort(changelog1ID),
-            1000, !emptyOldChanges, genId+1);
-      }
-      catch(SocketException se)
-      {
-        fail("DS2 with bad genID failed to connect to RS1.");
-      }
+      broker2 = openReplicationSession(baseDN, server2ID, 100,
+          getChangelogPort(changelog1ID), 1000, !emptyOldChanges, genId+1);
 
       //===========================================================
       debugInfo(testCase + " ** TEST ** DS3 connection to RS1 with good genID");
-      try
-      {
-        broker3 = openReplicationSession(baseDn,
-            server3ID, 100, getChangelogPort(changelog1ID), 1000, !emptyOldChanges, genId);
-      }
-      catch(SocketException se)
-      {
-        fail("Broker connection is expected to be accepted.");
-      }
+      broker3 = openReplicationSession(baseDN, server3ID, 100,
+          getChangelogPort(changelog1ID), 1000, !emptyOldChanges, genId);
 
       //===========================================================
       debugInfo(testCase + " ** TEST ** DS2 (bad genID) changes must be ignored.");
@@ -790,21 +726,13 @@
       checkChangelogSize(1);
 
       // Verify that DS3 receives this change
-      try
-      {
-        ReplicationMsg msg = broker3.receive();
-        debugInfo("Broker 3 received expected update msg" + msg);
-      }
-      catch(SocketTimeoutException e)
-      {
-        fail("Update message is supposed to be received.");
-      }
+      ReplicationMsg msg = broker3.receive();
+      debugInfo("Broker 3 received expected update msg" + msg);
 
       //===========================================================
       debugInfo(testCase + " ** TEST ** Persistence of the generation ID in RS1");
 
-      long genIdBeforeShut =
-        replServer1.getGenerationId(baseDn.toNormalizedString());
+      long genIdBeforeShut = replServer1.getGenerationId(baseDN);
 
       debugInfo("Shutdown replServer1");
       broker2.stop();
@@ -824,8 +752,7 @@
 
       debugInfo("Delay to allow DS to reconnect to replServer1");
 
-      long genIdAfterRestart =
-        replServer1.getGenerationId(baseDn.toNormalizedString());
+      long genIdAfterRestart = replServer1.getGenerationId(baseDN);
       debugInfo("Aft restart / replServer.genId=" + genIdAfterRestart);
       assertTrue(replServer1!=null, "Replication server creation failed.");
       assertTrue(genIdBeforeShut == genIdAfterRestart,
@@ -841,22 +768,15 @@
       //===============================================================
       debugInfo(testCase + " ** TEST ** Import with new data set + reset will"+
           " spread a new gen ID on the topology, verify DS1 and RS1");
-      try
-      {
-        debugInfo("Create again broker2");
-        broker2 = openReplicationSession(baseDn,
-            server2ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges, genId);
-        assertTrue(broker2.isConnected(), "Broker2 failed to connect to replication server");
+      debugInfo("Create again broker2");
+      broker2 = openReplicationSession(baseDN,
+          server2ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges, genId);
+      assertTrue(broker2.isConnected(), "Broker2 failed to connect to replication server");
 
-        debugInfo("Create again broker3");
-        broker3 = openReplicationSession(baseDn,
-            server3ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges, genId);
-        assertTrue(broker3.isConnected(), "Broker3 failed to connect to replication server");
-      }
-      catch(SocketException se)
-      {
-        fail("Broker connection is expected to be accepted.");
-      }
+      debugInfo("Create again broker3");
+      broker3 = openReplicationSession(baseDN,
+          server3ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges, genId);
+      assertTrue(broker3.isConnected(), "Broker3 failed to connect to replication server");
 
 
       debugInfo("Launch on-line import on DS1");
@@ -905,7 +825,7 @@
         + "is expected to be diffrent from previous one");
 
       debugInfo("RS1 must have the new gen ID");
-      rgenId = replServer1.getGenerationId(baseDn.toNormalizedString());
+      rgenId = replServer1.getGenerationId(baseDN);
       assertEquals(genId, rgenId, "DS and replServer are expected to have same genId.");
 
       debugInfo("RS1 must have been cleared since it has not the proper generation ID");
@@ -933,14 +853,14 @@
 
       try
       {
-        ReplicationMsg msg = broker2.receive();
-        fail("No update message is supposed to be received by broker2 in bad gen id. " + msg);
+        ReplicationMsg msg2 = broker2.receive();
+        fail("No update message is supposed to be received by broker2 in bad gen id. " + msg2);
       } catch(SocketTimeoutException e) { /* expected */ }
 
       try
       {
-        ReplicationMsg msg = broker3.receive();
-        fail("No update message is supposed to be received by broker3 in bad gen id. " + msg);
+        ReplicationMsg msg2 = broker3.receive();
+        fail("No update message is supposed to be received by broker3 in bad gen id. " + msg2);
       } catch(SocketTimeoutException e) { /* expected */ }
 
 
@@ -954,8 +874,8 @@
 
       try
       {
-        ReplicationMsg msg = broker3.receive();
-        fail("No update message is supposed to be received by broker3 in bad gen id. "+ msg);
+        ReplicationMsg msg2 = broker3.receive();
+        fail("No update message is supposed to be received by broker3 in bad gen id. "+ msg2);
       } catch(SocketTimeoutException e) { /* expected */ }
 
 
@@ -978,13 +898,13 @@
       broker2.stop();
 
       // Simulates the broker restart at the end of the import
-      broker2 = openReplicationSession(baseDn,
+      broker2 = openReplicationSession(baseDN,
           server2ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges, genId);
 
       broker3.stop();
 
       // Simulates the broker restart at the end of the import
-      broker3 = openReplicationSession(baseDn,
+      broker3 = openReplicationSession(baseDN,
           server3ID, 100, getChangelogPort(changelog1ID), 1000, emptyOldChanges, genId);
 
       debugInfo("Adding reset task to DS1");
@@ -1001,7 +921,7 @@
       waitTaskState(taskReset, TaskState.COMPLETED_SUCCESSFULLY, null);
 
       debugInfo("Verify that RS1 has still the right genID");
-      assertEquals(replServer1.getGenerationId(baseDn.toNormalizedString()), rgenId);
+      assertEquals(replServer1.getGenerationId(baseDN), rgenId);
 
       // Updates count in RS1 must stay unchanged = to 1
       Thread.sleep(500);
@@ -1016,26 +936,12 @@
           "Expecting that DS3 is not in bad gen id from RS1");
 
       debugInfo("Verify that DS2 receives the add message stored in RS1 DB");
-      try
-      {
-        ReplicationMsg msg = broker2.receive();
-        assertTrue(msg instanceof AddMsg, "Excpected to receive an AddMsg but received: " + msg);
-      }
-      catch(SocketTimeoutException e)
-      {
-        fail("The msg stored in RS1 DB is expected to be received by DS2)");
-      }
+      msg = broker2.receive();
+      assertTrue(msg instanceof AddMsg, "Expected to receive an AddMsg but received: " + msg);
 
       debugInfo("Verify that DS3 receives the add message stored in RS1 DB");
-      try
-      {
-        ReplicationMsg msg = broker3.receive();
-        assertTrue(msg instanceof AddMsg, "Excpected to receive an AddMsg but received: " + msg);
-      }
-      catch(SocketTimeoutException e)
-      {
-        fail("The msg stored in RS1 DB is expected to be received by DS3)");
-      }
+      msg = broker3.receive();
+      assertTrue(msg instanceof AddMsg, "Expected to receive an AddMsg but received: " + msg);
 
       debugInfo("DS2 is publishing a change and RS1 must store this change, DS3 must receive it.");
       emsg = (AddMsg)createAddMsg();
@@ -1044,18 +950,10 @@
       Thread.sleep(500);
       checkChangelogSize(2);
 
-      try
-      {
-        ReplicationMsg msg = broker3.receive();
-
-        /* expected */
-        AddMsg rcvmsg = (AddMsg)msg;
-        assertEquals(rcvmsg.getCSN(), emsg.getCSN());
-      }
-      catch(SocketTimeoutException e)
-      {
-        fail("The msg send by DS2 is expected to be received by DS3)");
-      }
+      /* expected */
+      msg = broker3.receive();
+      AddMsg rcvmsg = (AddMsg)msg;
+      assertEquals(rcvmsg.getCSN(), emsg.getCSN());
 
       //===============================================================
       debugInfo(testCase + " ** TEST ** General cleaning");
@@ -1064,11 +962,6 @@
       disconnectFromReplServer(changelog1ID);
 
       debugInfo("Successfully ending " + testCase);
-    }
-    catch(Exception e)
-    {
-      fail(testCase + " Exception:"+ e.getMessage() + " " +
-          stackTraceToSingleLineString(e));
     } finally
     {
       postTest();
@@ -1110,19 +1003,16 @@
       int waitRes=0;
       while(waitRes<100)
       {
-        if ((replServer1.getGenerationId(baseDn.toNormalizedString())==EMPTY_DN_GENID)
-          && (replServer2.getGenerationId(baseDn.toNormalizedString())==EMPTY_DN_GENID)
-          && (replServer3.getGenerationId(baseDn.toNormalizedString())==EMPTY_DN_GENID))
+        if (replServer1.getGenerationId(baseDN) == EMPTY_DN_GENID
+            && replServer2.getGenerationId(baseDN) == EMPTY_DN_GENID
+            && replServer3.getGenerationId(baseDN) == EMPTY_DN_GENID)
           break;
         waitRes++;
         Thread.sleep(100);
       }
-      assertEquals(replServer1.getGenerationId(baseDn.toNormalizedString()), EMPTY_DN_GENID,
-        " in replServer1");
-      assertEquals(replServer2.getGenerationId(baseDn.toNormalizedString()), EMPTY_DN_GENID,
-        " in replServer2");
-      assertEquals(replServer3.getGenerationId(baseDn.toNormalizedString()), EMPTY_DN_GENID,
-        " in replServer3");
+      assertEquals(replServer1.getGenerationId(baseDN), EMPTY_DN_GENID, " in replServer1");
+      assertEquals(replServer2.getGenerationId(baseDN), EMPTY_DN_GENID, " in replServer2");
+      assertEquals(replServer3.getGenerationId(baseDN), EMPTY_DN_GENID, " in replServer3");
 
       debugInfo("Disconnect DS from replServer1.");
       disconnectFromReplServer(changelog1ID);
@@ -1130,18 +1020,18 @@
       waitRes=0;
       while(waitRes<100)
       {
-        if ((replServer1.getGenerationId(baseDn.toNormalizedString())==-1)
-          && (replServer2.getGenerationId(baseDn.toNormalizedString())==-1)
-          && (replServer3.getGenerationId(baseDn.toNormalizedString())==-1))
+        if (replServer1.getGenerationId(baseDN) == -1
+            && replServer2.getGenerationId(baseDN) == -1
+            && replServer3.getGenerationId(baseDN) == -1)
           break;
         waitRes++;
         Thread.sleep(100);
       }
       debugInfo(
         "Expect genIds to be resetted in all servers to -1 as no more DS in topo - after 10 sec");
-      assertEquals(replServer1.getGenerationId(baseDn.toNormalizedString()), -1);
-      assertEquals(replServer2.getGenerationId(baseDn.toNormalizedString()), -1);
-      assertEquals(replServer3.getGenerationId(baseDn.toNormalizedString()), -1);
+      assertEquals(replServer1.getGenerationId(baseDN), -1);
+      assertEquals(replServer2.getGenerationId(baseDN), -1);
+      assertEquals(replServer3.getGenerationId(baseDN), -1);
 
       debugInfo("Add entries to DS");
       addTestEntriesToDB(updatedEntries);
@@ -1156,28 +1046,21 @@
       waitRes=0;
       while(waitRes<100)
       {
-        if ((replServer1.getGenerationId(baseDn.toNormalizedString())==genId)
-          && (replServer2.getGenerationId(baseDn.toNormalizedString())==genId)
-          && (replServer3.getGenerationId(baseDn.toNormalizedString())==genId))
+        if (replServer1.getGenerationId(baseDN) == genId
+            && replServer2.getGenerationId(baseDN) == genId
+            && replServer3.getGenerationId(baseDN) == genId)
           break;
         waitRes++;
         Thread.sleep(100);
       }
-      assertEquals(replServer1.getGenerationId(baseDn.toNormalizedString()), genId);
-      assertEquals(replServer2.getGenerationId(baseDn.toNormalizedString()), genId);
-      assertEquals(replServer3.getGenerationId(baseDn.toNormalizedString()), genId);
+      assertEquals(replServer1.getGenerationId(baseDN), genId);
+      assertEquals(replServer2.getGenerationId(baseDN), genId);
+      assertEquals(replServer3.getGenerationId(baseDN), genId);
 
       debugInfo("Connecting broker2 to replServer3 with a good genId");
-      try
-      {
-        broker2 = openReplicationSession(baseDn,
-          server2ID, 100, getChangelogPort(changelog3ID),
-          1000, !emptyOldChanges, genId);
-        Thread.sleep(1000);
-      } catch (SocketException se)
-      {
-        fail("Broker connection is expected to be accepted.");
-      }
+      broker2 = openReplicationSession(baseDN, server2ID, 100,
+          getChangelogPort(changelog3ID), 1000, !emptyOldChanges, genId);
+      Thread.sleep(1000);
 
       debugInfo("Expecting that broker2 is not in bad gen id since it has a correct genId");
       assertFalse(isDegradedDueToGenerationId(replServer1, server2ID));
@@ -1192,29 +1075,22 @@
       waitRes=0;
       while(waitRes<100)
       {
-        if ((replServer1.getGenerationId(baseDn.toNormalizedString())==genId)
-          && (replServer2.getGenerationId(baseDn.toNormalizedString())==genId)
-          && (replServer3.getGenerationId(baseDn.toNormalizedString())==genId))
+        if (replServer1.getGenerationId(baseDN) == genId
+            && replServer2.getGenerationId(baseDN) == genId
+            && replServer3.getGenerationId(baseDN) == genId)
           break;
         waitRes++;
         Thread.sleep(100);
       }
-      assertEquals(replServer1.getGenerationId(baseDn.toNormalizedString()), genId);
-      assertEquals(replServer2.getGenerationId(baseDn.toNormalizedString()), genId);
-      assertEquals(replServer3.getGenerationId(baseDn.toNormalizedString()), genId);
+      assertEquals(replServer1.getGenerationId(baseDN), genId);
+      assertEquals(replServer2.getGenerationId(baseDN), genId);
+      assertEquals(replServer3.getGenerationId(baseDN), genId);
 
       debugInfo("Connecting broker3 to replServer1 with a bad genId");
-      try
-      {
-        long badgenId = 1;
-        broker3 = openReplicationSession(baseDn,
-          server3ID, 100, getChangelogPort(changelog1ID),
-          1000, !emptyOldChanges, badgenId);
-        Thread.sleep(1000);
-      } catch (SocketException se)
-      {
-        fail("Broker connection is expected to be accepted.");
-      }
+      long badgenId = 1;
+      broker3 = openReplicationSession(baseDN, server3ID, 100,
+          getChangelogPort(changelog1ID), 1000, !emptyOldChanges, badgenId);
+      Thread.sleep(1000);
 
       debugInfo("Expecting that broker3 is in bad gen id since it has a bad genId");
       assertTrue(isDegradedDueToGenerationId(replServer1, server3ID));
@@ -1243,9 +1119,9 @@
 
       debugInfo("Verifying that all replservers genIds have been reset.");
       genId = readGenIdFromSuffixRootEntry();
-      assertEquals(replServer1.getGenerationId(baseDn.toNormalizedString()), genId);
-      assertEquals(replServer2.getGenerationId(baseDn.toNormalizedString()), genId);
-      assertEquals(replServer3.getGenerationId(baseDn.toNormalizedString()), genId);
+      assertEquals(replServer1.getGenerationId(baseDN), genId);
+      assertEquals(replServer2.getGenerationId(baseDN), genId);
+      assertEquals(replServer3.getGenerationId(baseDN), genId);
 
       debugInfo("Adding reset task to DS." + genId);
       taskReset = TestCaseUtils.makeEntry(
@@ -1265,16 +1141,16 @@
       while(waitRes<100)
       {
         readGenIdFromSuffixRootEntry();
-        if ((replServer1.getGenerationId(baseDn.toNormalizedString())==-1)
-          && (replServer2.getGenerationId(baseDn.toNormalizedString())==-1)
-          && (replServer3.getGenerationId(baseDn.toNormalizedString())==-1))
+        if (replServer1.getGenerationId(baseDN) == -1
+            && replServer2.getGenerationId(baseDN) == -1
+            && replServer3.getGenerationId(baseDN) == -1)
           break;
         waitRes++;
         Thread.sleep(100);
       }
-      assertEquals(replServer1.getGenerationId(baseDn.toNormalizedString()), -1, "test"+i);
-      assertEquals(replServer2.getGenerationId(baseDn.toNormalizedString()), -1, "test"+i);
-      assertEquals(replServer3.getGenerationId(baseDn.toNormalizedString()), -1, "test"+i);
+      assertEquals(replServer1.getGenerationId(baseDN), -1, "test" + i);
+      assertEquals(replServer2.getGenerationId(baseDN), -1, "test" + i);
+      assertEquals(replServer3.getGenerationId(baseDN), -1, "test" + i);
 
       debugInfo(
         "Disconnect DS from replServer1 (required in order to DEL entries).");
@@ -1289,7 +1165,7 @@
 
   private boolean isDegradedDueToGenerationId(ReplicationServer rs, int serverId)
   {
-    ReplicationServerDomain domain = rs.getReplicationServerDomain(baseDn.toNormalizedString());
+    ReplicationServerDomain domain = rs.getReplicationServerDomain(baseDN);
     return domain.isDegradedDueToGenerationId(serverId);
   }
 
@@ -1424,12 +1300,11 @@
       for (int i=0; i< 5; i++)
       {
         long generationId = 1000+i;
-        broker = openReplicationSession(baseDn,
-            server2ID, 100, getChangelogPort(changelog1ID),
-            1000, !emptyOldChanges, generationId);
+        broker = openReplicationSession(baseDN, server2ID, 100,
+            getChangelogPort(changelog1ID), 1000, !emptyOldChanges, generationId);
         debugInfo(testCase + " Expect genId to be set in memory on the replication " +
           " server side even if not wrote on disk/db since no change occurred.");
-        rgenId = replServer1.getGenerationId(baseDn.toNormalizedString());
+        rgenId = replServer1.getGenerationId(baseDN);
         assertEquals(rgenId, generationId);
         broker.stop();
         broker = null;
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
index 3446e9f..ec5c490 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
@@ -113,7 +113,7 @@
   private static final String EXAMPLE_DN = "dc=example,dc=com";
   private static int[] replServerPort = new int[20];
 
-  private DN baseDn;
+  private DN baseDN;
   private ReplicationBroker server2;
   private ReplicationBroker server3;
   private ReplicationServer changelog1;
@@ -153,7 +153,7 @@
     log("Setup: debugEnabled:" + debugEnabled());
 
     // This test suite depends on having the schema available.
-    baseDn = DN.decode(EXAMPLE_DN);
+    baseDN = DN.decode(EXAMPLE_DN);
 
     // This test uses import tasks which do not work with memory backend
     // (like the test backend we use in every tests): backend is disabled then
@@ -610,7 +610,7 @@
         "Unable to add the synchronized server");
     configEntryList.add(synchroServerEntry.getDN());
 
-    replDomain = LDAPReplicationDomain.retrievesReplicationDomain(baseDn);
+    replDomain = LDAPReplicationDomain.retrievesReplicationDomain(baseDN);
 
     assertTrue(!replDomain.ieRunning(),
         "ReplicationDomain: Import/Export is not expected to be running");
@@ -1004,10 +1004,10 @@
           "objectclass: ds-task",
           "objectclass: ds-task-initialize-from-remote-replica",
           "ds-task-class-name: org.opends.server.tasks.InitializeTask",
-          "ds-task-initialize-domain-dn: " + baseDn,
+          "ds-task-initialize-domain-dn: " + baseDN,
           "ds-task-initialize-replica-server-id: -3");
       addTask(taskInit, ResultCode.OTHER,
-          ERR_INVALID_IMPORT_SOURCE.get(baseDn.toNormalizedString(),
+          ERR_INVALID_IMPORT_SOURCE.get(baseDN.toNormalizedString(),
               Integer.toString(server1ID),"-3",""));
 
       // Scope containing a serverID absent from the domain
@@ -1101,7 +1101,7 @@
 
   private Set<Integer> getConnectedDSServerIds(ReplicationServer changelog)
   {
-    ReplicationServerDomain domain = changelog.getReplicationServerDomain(baseDn.toNormalizedString());
+    ReplicationServerDomain domain = changelog.getReplicationServerDomain(baseDN);
     return domain.getConnectedDSs().keySet();
   }
 
@@ -1197,8 +1197,7 @@
         log(testCase + " Will connect server 2 to " + changelog2ID);
         server2 = openReplicationSession(DN.decode(EXAMPLE_DN),
           server2ID, 100, getChangelogPort(changelog2ID),
-          1000, emptyOldChanges,
-          changelog1.getGenerationId(baseDn.toNormalizedString()));
+          1000, emptyOldChanges, changelog1.getGenerationId(baseDN));
       }
 
       // Connect a broker acting as server 3 to Repl Server 3
@@ -1210,8 +1209,7 @@
         log(testCase + " Will connect server 3 to " + changelog3ID);
         server3 = openReplicationSession(DN.decode(EXAMPLE_DN),
           server3ID, 100, getChangelogPort(changelog3ID),
-          1000, emptyOldChanges,
-          changelog1.getGenerationId(baseDn.toNormalizedString()));
+          1000, emptyOldChanges, changelog1.getGenerationId(baseDN));
       }
 
       // Thread.sleep(500);
@@ -1271,14 +1269,14 @@
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-from-remote-replica",
         "ds-task-class-name: org.opends.server.tasks.InitializeTask",
-        "ds-task-initialize-domain-dn: " + baseDn,
+        "ds-task-initialize-domain-dn: " + baseDN,
         "ds-task-initialize-replica-server-id: " + 20);
 
       addTask(taskInit, ResultCode.SUCCESS, null);
 
       waitTaskState(taskInit, TaskState.STOPPED_BY_ERROR,
         ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get(
-            baseDn.toString(), "20"));
+            baseDN.toString(), "20"));
 
       // Test 2
       taskInit = TestCaseUtils.makeEntry(
@@ -1288,12 +1286,11 @@
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-from-remote-replica",
         "ds-task-class-name: org.opends.server.tasks.InitializeTask",
-        "ds-task-initialize-domain-dn: " + baseDn,
+        "ds-task-initialize-domain-dn: " + baseDN,
         "ds-task-initialize-replica-server-id: " + server1ID);
 
       addTask(taskInit, ResultCode.OTHER, ERR_INVALID_IMPORT_SOURCE.get(
-          baseDn.toNormalizedString(),
-          Integer.toString(server1ID),"20",""));
+          baseDN.toNormalizedString(), Integer.toString(server1ID),"20",""));
 
       if (replDomain != null)
       {
@@ -1311,7 +1308,7 @@
   @Test(enabled=false)
   public void initializeTargetNoTarget() throws Exception
   {
-    String testCase = "initializeTargetNoTarget"  + baseDn;
+    String testCase = "initializeTargetNoTarget"  + baseDN;
     log("Starting "+testCase);
 
     try
@@ -1332,13 +1329,13 @@
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-remote-replica",
         "ds-task-class-name: org.opends.server.tasks.InitializeTargetTask",
-        "ds-task-initialize-domain-dn: " + baseDn,
+        "ds-task-initialize-domain-dn: " + baseDN,
         "ds-task-initialize-replica-server-id: " + 0);
 
       addTask(taskInit, ResultCode.SUCCESS, null);
 
       waitTaskState(taskInit, TaskState.STOPPED_BY_ERROR,
-        ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get(baseDn.toString(), "0"));
+        ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get(baseDN.toString(), "0"));
 
       if (replDomain != null)
       {
@@ -1406,7 +1403,7 @@
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-from-remote-replica",
         "ds-task-class-name: org.opends.server.tasks.InitializeTask",
-        "ds-task-initialize-domain-dn: " + baseDn,
+        "ds-task-initialize-domain-dn: " + baseDN,
         "ds-task-initialize-replica-server-id: " + server2ID);
 
       addTask(taskInit, ResultCode.SUCCESS, null);
@@ -1420,7 +1417,7 @@
         "objectclass: ds-task",
         "objectclass: ds-task-initialize-from-remote-replica",
         "ds-task-class-name: org.opends.server.tasks.InitializeTask",
-        "ds-task-initialize-domain-dn: " + baseDn,
+        "ds-task-initialize-domain-dn: " + baseDN,
         "ds-task-initialize-replica-server-id: " + server2ID);
 
       // Second task is expected to be rejected
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
index fefecc1..a6d3d36 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
@@ -27,6 +27,14 @@
  */
 package org.opends.server.replication;
 
+import java.io.File;
+import java.net.SocketException;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.concurrent.locks.Lock;
+
 import org.opends.messages.Category;
 import org.opends.messages.Message;
 import org.opends.messages.Severity;
@@ -61,14 +69,6 @@
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import java.io.File;
-import java.net.SocketException;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.concurrent.locks.Lock;
-
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -117,7 +117,7 @@
   /**
    * Replication monitor stats
    */
-  private DN monitorDn;
+  private DN monitorDN;
   private String monitorAttr;
   private long lastCount;
 
@@ -172,22 +172,22 @@
   }
 
   /**
-   * Retrieves the domain associated to the baseDn, and the value of the generationId
+   * Retrieves the domain associated to the baseDN, and the value of the generationId
    * of this domain. If the domain does not exist, returns the default hard-coded\
    * value of the generationId corresponding to test backend with its default
    * initial o=test root root entry.
    *
-   * @param baseDn The baseDn for which we want the generationId
+   * @param baseDN The baseDN for which we want the generationId
    * @return The value of the generationId.
    */
-  static protected long getGenerationId(DN baseDn)
+  static protected long getGenerationId(DN baseDN)
   {
     // This is the value of the generationId computed by the server when the
     // test suffix (o=test) has only the root entry created.
     long genId = TEST_DN_WITH_ROOT_ENTRY_GENID;
     try
     {
-      LDAPReplicationDomain replDomain = LDAPReplicationDomain.retrievesReplicationDomain(baseDn);
+      LDAPReplicationDomain replDomain = LDAPReplicationDomain.retrievesReplicationDomain(baseDN);
       genId = replDomain.getGenerationID();
     }
     catch(Exception e) {}
@@ -200,12 +200,12 @@
    * does not exist, take the 'empty backend' generationID.
    */
   protected ReplicationBroker openReplicationSession(
-      final DN baseDn, int serverId, int window_size,
+      final DN baseDN, int serverId, int window_size,
       int port, int timeout, boolean emptyOldChanges)
           throws Exception, SocketException
   {
-    return openReplicationSession(baseDn, serverId, window_size,
-        port, timeout, emptyOldChanges, getGenerationId(baseDn), null);
+    return openReplicationSession(baseDN, serverId, window_size,
+        port, timeout, emptyOldChanges, getGenerationId(baseDN), null);
   }
 
   /**
@@ -213,12 +213,12 @@
    * providing the generationId.
    */
   protected ReplicationBroker openReplicationSession(
-        final DN baseDn, int serverId, int window_size,
+        final DN baseDN, int serverId, int window_size,
         int port, int timeout, boolean emptyOldChanges,
         long generationId)
   throws Exception, SocketException
   {
-    return openReplicationSession(baseDn, serverId, window_size,
+    return openReplicationSession(baseDN, serverId, window_size,
         port, timeout, emptyOldChanges, generationId, null);
   }
 
@@ -227,7 +227,7 @@
    * providing the generationId.
    */
   protected ReplicationBroker openReplicationSession(
-        final DN baseDn, int serverId, int window_size,
+        final DN baseDN, int serverId, int window_size,
         int port, int timeout, boolean emptyOldChanges,
         long generationId, ReplicationDomain replicationDomain)
   throws Exception, SocketException
@@ -235,12 +235,12 @@
     ServerState state = new ServerState();
 
     if (emptyOldChanges)
-       new PersistentServerState(baseDn, serverId, new ServerState());
+       new PersistentServerState(baseDN, serverId, new ServerState());
 
     ReplicationBroker broker = new ReplicationBroker(replicationDomain,
-        state, baseDn.toNormalizedString(), serverId, window_size,
+        state, baseDN, serverId, window_size,
         generationId, 100000, getReplSessionSecurity(), (byte)1, 500);
-    ArrayList<String> servers = new ArrayList<String>(1);
+    List<String> servers = new ArrayList<String>(1);
     servers.add("localhost:" + port);
     broker.start(servers);
     if (timeout != 0)
@@ -297,15 +297,14 @@
   /**
    * Open a replicationServer session to the local ReplicationServer
    * with a default value generationId.
-   *
    */
   protected ReplicationBroker openReplicationSession(
-      final DN baseDn, int serverId, int window_size,
+      final DN baseDN, int serverId, int window_size,
       int port, int timeout, ServerState state)
     throws Exception, SocketException
   {
-    return openReplicationSession(baseDn, serverId, window_size,
-        port, timeout, state, getGenerationId(baseDn));
+    return openReplicationSession(baseDN, serverId, window_size,
+        port, timeout, state, getGenerationId(baseDN));
   }
 
   /**
@@ -313,14 +312,14 @@
    * starting with a given ServerState.
    */
   protected ReplicationBroker openReplicationSession(
-      final DN baseDn, int serverId, int window_size,
+      final DN baseDN, int serverId, int window_size,
       int port, int timeout, ServerState state, long generationId)
           throws Exception, SocketException
   {
     ReplicationBroker broker = new ReplicationBroker(null,
-        state, baseDn.toNormalizedString(), serverId, window_size, generationId,
+        state, baseDN, serverId, window_size, generationId,
         100000, getReplSessionSecurity(), (byte)1, 500);
-    ArrayList<String> servers = new ArrayList<String>(1);
+    List<String> servers = new ArrayList<String>(1);
     servers.add("localhost:" + port);
     broker.start(servers);
     checkConnection(30, broker, port);
@@ -333,10 +332,9 @@
   /**
    * Open a replicationServer session with flow control to the local
    * ReplicationServer.
-   *
    */
   protected ReplicationBroker openReplicationSession(
-      final DN baseDn, int serverId, int window_size,
+      final DN baseDN, int serverId, int window_size,
       int port, int timeout, int maxSendQueue, int maxRcvQueue,
       boolean emptyOldChanges)
       throws Exception, SocketException
@@ -344,12 +342,12 @@
     ServerState state = new ServerState();
 
     if (emptyOldChanges)
-       new PersistentServerState(baseDn, serverId, new ServerState());
+       new PersistentServerState(baseDN, serverId, new ServerState());
 
     ReplicationBroker broker = new ReplicationBroker(null,
-        state, baseDn.toNormalizedString(), serverId, window_size,
-        getGenerationId(baseDn), 0, getReplSessionSecurity(), (byte)1, 500);
-    ArrayList<String> servers = new ArrayList<String>(1);
+        state, baseDN, serverId, window_size,
+        getGenerationId(baseDN), 0, getReplSessionSecurity(), (byte)1, 500);
+    List<String> servers = new ArrayList<String>(1);
     servers.add("localhost:" + port);
     broker.start(servers);
     checkConnection(30, broker, port);
@@ -584,10 +582,9 @@
    * @return The monitor value
    * @throws Exception If an error occurs.
    */
-  protected long getMonitorAttrValue(DN baseDn, String attr) throws Exception
+  protected long getMonitorAttrValue(DN baseDN, String attr) throws Exception
   {
-    String monitorFilter =
-         "(&(cn=Directory server*)(domain-name=" + baseDn + "))";
+    String monitorFilter = "(&(cn=Directory server*)(domain-name=" + baseDN + "))";
 
     InternalSearchOperation op;
     int count = 0;
@@ -685,10 +682,9 @@
     try
     {
       Entry entry = DirectoryServer.getEntry(dn);
-      if (entry == null)
-        return null;
-      else
+      if (entry != null)
         return entry.duplicate(true);
+      return null;
     }
     finally
     {
@@ -699,18 +695,11 @@
   /**
    * Update the monitor count for the specified monitor attribute.
    */
-  protected void updateMonitorCount(DN baseDn, String attr) {
-    monitorDn = baseDn;
+  protected void updateMonitorCount(DN baseDN, String attr) throws Exception
+  {
+    monitorDN = baseDN;
     monitorAttr = attr;
-    try
-    {
-      lastCount = getMonitorAttrValue(baseDn, attr);
-    }
-    catch (Exception ex)
-    {
-      ex.printStackTrace();
-      assertTrue(false);
-    }
+    lastCount = getMonitorAttrValue(baseDN, attr);
   }
 
   /**
@@ -720,7 +709,7 @@
   protected long getMonitorDelta() {
     long delta = 0;
     try {
-      long currentCount = getMonitorAttrValue(monitorDn, monitorAttr);
+      long currentCount = getMonitorAttrValue(monitorDN, monitorAttr);
       delta = (currentCount - lastCount);
       lastCount = currentCount;
     } catch (Exception ex) {
@@ -937,7 +926,7 @@
       // Check that the task contains some log messages.
       AttributeType logMessagesType = DirectoryServer.getAttributeType(
           ATTR_TASK_LOG_MESSAGES.toLowerCase());
-      ArrayList<String> logMessages = new ArrayList<String>();
+      List<String> logMessages = new ArrayList<String>();
       resultEntry.getAttributeValues(logMessagesType,
           DirectoryStringSyntax.DECODER,
           logMessages);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java
index 637bb45..10fd86d 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java
@@ -383,10 +383,8 @@
     List<String> replicationServers = new ArrayList<String>();
     replicationServers.add("localhost:" + replServerPort);
 
-    replicationDomain =
-        new FakeReplicationDomain((firstBackend ? TEST_ROOT_DN_STRING
-            : TEST2_ROOT_DN_STRING), DS2_ID, replicationServers, 100, 1000,
-            generationId);
+    DN baseDN = DN.decode(firstBackend ? TEST_ROOT_DN_STRING : TEST2_ROOT_DN_STRING);
+    replicationDomain = new FakeReplicationDomain(baseDN, DS2_ID, replicationServers, 100, 1000, generationId);
 
     // Test connection
     assertTrue(replicationDomain.isConnected());
@@ -587,14 +585,14 @@
     private long generationID = -1;
 
     public FakeReplicationDomain(
-      String serviceID,
+      DN baseDN,
       int serverID,
       Collection<String> replicationServers,
       int window,
       long heartbeatInterval,
       long generationId) throws ConfigException
     {
-      super(serviceID, serverID, 100);
+      super(baseDN, serverID, 100);
       generationID = generationId;
       startPublishService(replicationServers, window, heartbeatInterval, 500);
       startListenService();
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java
index c2e1630..ab0835d 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java
@@ -76,6 +76,7 @@
 {
 
   private static final String EXAMPLE_DN = "dc=example,dc=com";  // Server id definitions
+  private static DN EXAMPLE_DN_;
 
   private static final int DS1_ID = 1;
   private static final int DS2_ID = 2;
@@ -117,7 +118,7 @@
     }
 
     // Clear any reference to a domain in synchro plugin
-    MultimasterReplication.deleteDomain(DN.decode(EXAMPLE_DN));
+    MultimasterReplication.deleteDomain(EXAMPLE_DN_);
 
     if (ds2 != null)
     {
@@ -223,8 +224,7 @@
     SortedSet<String> replServers = new TreeSet<String>();
     replServers.add("localhost:" + rs1Port);
 
-    DN baseDn = DN.decode(EXAMPLE_DN);
-    DomainFakeCfg domainConf = new DomainFakeCfg(baseDn, dsId, replServers);
+    DomainFakeCfg domainConf = new DomainFakeCfg(EXAMPLE_DN_, dsId, replServers);
     LDAPReplicationDomain replicationDomain = MultimasterReplication.createNewDomain(domainConf);
     replicationDomain.start();
     SynchronizationProvider<SynchronizationProviderCfg> provider =
@@ -246,9 +246,9 @@
   private ReplicationBroker createReplicationBroker(int dsId,
       ServerState state, long generationId) throws Exception
   {
-    ReplicationBroker broker = new ReplicationBroker(null,
-      state, EXAMPLE_DN, dsId, 100, generationId, 0,
-      new ReplSessionSecurity(null, null, null, true), (byte) 1, 500);
+    ReplSessionSecurity security = new ReplSessionSecurity(null, null, null, true);
+    ReplicationBroker broker = new ReplicationBroker(null, state, EXAMPLE_DN_,
+        dsId, 100, generationId, 0, security, (byte) 1, 500);
     List<String> servers = new ArrayList<String>(1);
     servers.add("localhost:" + rs1Port);
     broker.start(servers);
@@ -715,13 +715,13 @@
   public void setUp() throws Exception
   {
     super.setUp();
+    EXAMPLE_DN_ = DN.decode(EXAMPLE_DN);
 
     // Note: this test does not use the memory test backend as for having a DS
     // going into degraded status, we need to send a lot of updates. This makes
     // the memory test backend crash with OutOfMemoryError. So we prefer here
     // a backend backed up with a file
     TestCaseUtils.clearJEBackend(false, "userRoot", EXAMPLE_DN);
-
   }
 
   /**
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java
index 959bd91..e1375a3 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java
@@ -54,6 +54,7 @@
 import org.opends.server.replication.plugin.MultimasterReplication;
 import org.opends.server.replication.protocol.*;
 import org.opends.server.replication.service.ReplicationDomain;
+import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.util.StaticUtils;
 import org.testng.annotations.BeforeClass;
@@ -457,7 +458,7 @@
       int rsPort = getRsPort(rsId);
 
       FakeReplicationDomain fakeReplicationDomain = new FakeReplicationDomain(
-        TEST_ROOT_DN_STRING, serverId, generationId,
+        DN.decode(TEST_ROOT_DN_STRING), serverId, generationId,
         (byte)groupId, assured, assuredMode, (byte)safeDataLevel, assuredTimeout,
         scenario, serverState);
 
@@ -600,7 +601,7 @@
      * @throws org.opends.server.config.ConfigException
      */
     public FakeReplicationDomain(
-      String baseDN,
+      DN baseDN,
       int serverID,
       long generationId,
       byte groupId,
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
index 88c04c5..166011f 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
@@ -32,6 +32,7 @@
 import java.util.*;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.server.admin.std.server.ExternalChangelogDomainCfg;
 import org.opends.server.api.Backend;
 import org.opends.server.api.ConnectionHandler;
 import org.opends.server.backends.MemoryBackend;
@@ -101,6 +102,11 @@
   /** The port of the replicationServer. */
   private int replicationServerPort;
 
+  /** base DN for "o=test" */
+  private static DN TEST_ROOT_DN;
+  /** base DN for "o=test2" */
+  private static DN TEST_ROOT_DN2;
+
   private static final String TEST_BACKEND_ID2 = "test2";
   private static final String TEST_ROOT_DN_STRING2 = "o=" + TEST_BACKEND_ID2;
 
@@ -134,6 +140,8 @@
   public void setUp() throws Exception
   {
     super.setUp();
+    TEST_ROOT_DN = DN.decode(TEST_ROOT_DN_STRING);
+    TEST_ROOT_DN2 = DN.decode(TEST_ROOT_DN_STRING2);
 
     // This test suite depends on having the schema available.
     configure();
@@ -367,7 +375,7 @@
     // Test first and last change number
     ECLCompatTestLimits(1,8, true);
 
-    // Test first and last change number, a dd a new change, do not
+    // Test first and last change number, add a new change, do not
     // search again the ECL, but search for first and last
     ECLCompatTestLimitsAndAdd(1,8, ts);
 
@@ -472,12 +480,10 @@
     try
     {
       // create 2 regular brokers on the 2 suffixes
-      server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+      server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
           100, replicationServerPort, brokerSessionTimeout, true);
 
-      server02 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2), SERVER_ID_2,
+      server02 = openReplicationSession(TEST_ROOT_DN2, SERVER_ID_2,
           100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
 
       // create and publish 1 change on each suffix
@@ -616,19 +622,14 @@
 
     try
     {
-      DN baseDn2 = DN.decode(TEST_ROOT_DN_STRING2);
-
-      server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+      server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
           100, replicationServerPort, brokerSessionTimeout, true);
 
       // create and publish 1 change on each suffix
       long time = TimeThread.getTime();
 
       CSN csn1 = new CSN(time, 1, SERVER_ID_1);
-      DeleteMsg delMsg1 =
-          new DeleteMsg("o=" + tn + "1," + TEST_ROOT_DN_STRING, csn1,
-              "ECLBasicMsg1uid");
+      DeleteMsg delMsg1 = new DeleteMsg("o=" + tn + "1," + TEST_ROOT_DN_STRING, csn1, "ECLBasicMsg1uid");
       server01.publish(delMsg1);
       debugInfo(tn, "publishes:" + delMsg1);
 
@@ -638,12 +639,11 @@
       backend2.setPrivateBackend(true);
       SortedSet<String> replServers = newSet("localhost:" + replicationServerPort);
 
-      DomainFakeCfg domainConf =
-        new DomainFakeCfg(baseDn2,  1602, replServers);
+      DomainFakeCfg domainConf = new DomainFakeCfg(TEST_ROOT_DN2,  1602, replServers);
       domain2 = startNewDomain(domainConf, null,null);
 
       sleep(1000);
-      addEntry(createEntry(baseDn2));
+      addEntry(createEntry(TEST_ROOT_DN2));
       sleep(2000);
 
       // Search on ECL from start on all suffixes
@@ -656,8 +656,7 @@
       assertThat(entries).hasSize(2);
       debugAndWriteEntries(null, entries, tn);
 
-      ExternalChangelogDomainFakeCfg eclCfg =
-          new ExternalChangelogDomainFakeCfg(false, null, null);
+      ExternalChangelogDomainCfg eclCfg = new ExternalChangelogDomainFakeCfg(false, null, null);
       domainConf.setExternalChangelogDomain(eclCfg);
       domain2.applyConfigurationChange(domainConf);
 
@@ -707,12 +706,10 @@
 
       LDIFWriter ldifWriter = getLDIFWriter();
 
-      s1test = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+      s1test = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
           100, replicationServerPort, brokerSessionTimeout, true);
 
-      s2test2 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2), SERVER_ID_2,
+      s2test2 = openReplicationSession(TEST_ROOT_DN2, SERVER_ID_2,
           100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
       sleep(500);
 
@@ -784,12 +781,10 @@
 
       // Test startState ("first cookie") of the ECL
       // --
-      s1test2 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2),  1203,
+      s1test2 = openReplicationSession(TEST_ROOT_DN2,  1203,
           100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
 
-      s2test = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1204,
+      s2test = openReplicationSession(TEST_ROOT_DN,  1204,
           100, replicationServerPort, brokerSessionTimeout, true);
       sleep(500);
 
@@ -807,12 +802,12 @@
       publishDeleteMsgInOTest(s2test, csn9, tn, 9);
       sleep(500);
 
-      ServerState startState = getReplicationDomainStartState(TEST_ROOT_DN_STRING);
+      ServerState startState = getReplicationDomainStartState(TEST_ROOT_DN);
       assertEquals(startState.getCSN(s1test.getServerId()).getSeqnum(), 1);
       assertTrue(startState.getCSN(s2test.getServerId()) != null);
       assertEquals(startState.getCSN(s2test.getServerId()).getSeqnum(), 7);
 
-      startState = getReplicationDomainStartState(TEST_ROOT_DN_STRING2);
+      startState = getReplicationDomainStartState(TEST_ROOT_DN2);
       assertEquals(startState.getCSN(s2test2.getServerId()).getSeqnum(), 2);
       assertEquals(startState.getCSN(s1test2.getServerId()).getSeqnum(), 6);
 
@@ -867,9 +862,9 @@
     debugInfo(tn, "Ending test successfully");
   }
 
-  private ServerState getReplicationDomainStartState(String baseDn)
+  private ServerState getReplicationDomainStartState(DN baseDN)
   {
-    return replicationServer.getReplicationServerDomain(baseDn).getStartState();
+    return replicationServer.getReplicationServerDomain(baseDN).getStartState();
   }
 
   private String getCookie(List<SearchResultEntry> entries,
@@ -968,8 +963,7 @@
       // 1. Populate the changelog and read the cookie
 
       // Creates broker on o=test
-      server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+      server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
           100, replicationServerPort, brokerSessionTimeout, true);
 
       final CSN[] csns = generateCSNs(4, SERVER_ID_1);
@@ -1024,12 +1018,12 @@
       //    returns the appropriate error.
       publishDeleteMsgInOTest(server01, csns[3], tn, 1);
 
-      debugInfo(tn, "d1 trimdate" + getReplicationDomainStartState("o=test"));
-      debugInfo(tn, "d2 trimdate" + getReplicationDomainStartState("o=test2"));
+      debugInfo(tn, "d1 trimdate" + getReplicationDomainStartState(TEST_ROOT_DN));
+      debugInfo(tn, "d2 trimdate" + getReplicationDomainStartState(TEST_ROOT_DN2));
       searchOp = searchOnCookieChangelog("(targetDN=*)", cookieNotEmpty, tn, UNWILLING_TO_PERFORM);
       assertEquals(searchOp.getSearchEntries().size(), 0);
       assertTrue(searchOp.getErrorMessage().toString().startsWith(
-          ERR_RESYNC_REQUIRED_TOO_OLD_DOMAIN_IN_PROVIDED_COOKIE.get("o=test").toString()),
+          ERR_RESYNC_REQUIRED_TOO_OLD_DOMAIN_IN_PROVIDED_COOKIE.get(TEST_ROOT_DN_STRING).toString()),
           searchOp.getErrorMessage().toString());
     }
     finally
@@ -1097,13 +1091,11 @@
       LDIFWriter ldifWriter = getLDIFWriter();
 
       // Creates broker on o=test
-      server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+      server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
           100, replicationServerPort, brokerSessionTimeout, true);
 
       // Creates broker on o=test2
-      server02 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2), SERVER_ID_2,
+      server02 = openReplicationSession(TEST_ROOT_DN2, SERVER_ID_2,
           100, replicationServerPort, brokerSessionTimeout, true);
 
       String user1entryUUID = "11111111-1111-1111-1111-111111111111";
@@ -1142,7 +1134,7 @@
 
       // Publish modDN
       csnCounter++;
-      final DN newSuperior = DN.decode(TEST_ROOT_DN_STRING2);
+      final DN newSuperior = TEST_ROOT_DN2;
       ModifyDNOperation op = new ModifyDNOperationBasis(connection, 1, 1, null,
           DN.decode("uid="+tn+"4," + TEST_ROOT_DN_STRING), // entryDN
           RDN.decode("uid="+tn+"new4"), // new rdn
@@ -1386,8 +1378,7 @@
 
     {
       // Create broker on suffix
-      ReplicationBroker server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+      ReplicationBroker server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
           100, replicationServerPort, brokerSessionTimeout, true);
 
       CSN[] csns = generateCSNs(2, SERVER_ID_1);
@@ -1655,14 +1646,12 @@
     try
     {
       // Create broker on o=test
-      server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+      server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
           100, replicationServerPort, brokerSessionTimeout, true);
       server01.setChangeTimeHeartbeatInterval(100); //ms
 
       // Create broker on o=test2
-      server02 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2), SERVER_ID_2,
+      server02 = openReplicationSession(TEST_ROOT_DN2, SERVER_ID_2,
           100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
       server02.setChangeTimeHeartbeatInterval(100); //ms
 
@@ -2196,12 +2185,10 @@
       backend2 = initializeTestBackend(true, TEST_BACKEND_ID2);
 
       // --
-      s1test = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+      s1test = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
           100, replicationServerPort, brokerSessionTimeout, true);
 
-      s2test2 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2), SERVER_ID_2,
+      s2test2 = openReplicationSession(TEST_ROOT_DN2, SERVER_ID_2,
           100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
       sleep(500);
 
@@ -2222,12 +2209,10 @@
       sleep(500);
 
       // --
-      s1test2 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING2),  1203,
+      s1test2 = openReplicationSession(TEST_ROOT_DN2,  1203,
           100, replicationServerPort, brokerSessionTimeout, true, EMPTY_DN_GENID);
 
-      s2test = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING),  1204,
+      s2test = openReplicationSession(TEST_ROOT_DN,  1204,
           100, replicationServerPort, brokerSessionTimeout, true);
       sleep(500);
 
@@ -2246,20 +2231,20 @@
       publishDeleteMsgInOTest(s2test, csn9, tn, 9);
       sleep(500);
 
-      ReplicationServerDomain rsd1 = replicationServer.getReplicationServerDomain(TEST_ROOT_DN_STRING);
+      ReplicationServerDomain rsd1 = replicationServer.getReplicationServerDomain(TEST_ROOT_DN);
       rsd1.getDbServerState();
       rsd1.getChangeTimeHeartbeatState();
-      debugInfo(tn, rsd1.getBaseDn()
+      debugInfo(tn, rsd1.getBaseDN()
           + " DbServerState=" + rsd1.getDbServerState()
           + " ChangeTimeHeartBeatState=" + rsd1.getChangeTimeHeartbeatState()
           + " eligibleCSN=" + rsd1.getEligibleCSN()
           + " rs eligibleCSN=" + replicationServer.getEligibleCSN());
       // FIXME:ECL Enable this test by adding an assert on the right value
 
-      ReplicationServerDomain rsd2 = replicationServer.getReplicationServerDomain(TEST_ROOT_DN_STRING2);
+      ReplicationServerDomain rsd2 = replicationServer.getReplicationServerDomain(TEST_ROOT_DN2);
       rsd2.getDbServerState();
       rsd2.getChangeTimeHeartbeatState();
-      debugInfo(tn, rsd2.getBaseDn()
+      debugInfo(tn, rsd2.getBaseDN()
           + " DbServerState=" + rsd2.getDbServerState()
           + " ChangeTimeHeartBeatState=" + rsd2.getChangeTimeHeartbeatState()
           + " eligibleCSN=" + rsd2.getEligibleCSN()
@@ -2309,8 +2294,7 @@
       LDIFWriter ldifWriter = getLDIFWriter();
 
       // Creates broker on o=test
-      ReplicationBroker server01 = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+      ReplicationBroker server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
           100, replicationServerPort, brokerSessionTimeout, true);
 
       String user1entryUUID = "11111111-1112-1113-1114-111111111115";
@@ -2356,7 +2340,7 @@
           DN.decode("uid="+tn+"4," + TEST_ROOT_DN_STRING), // entryDN
           RDN.decode("uid="+tn+"new4"), // new rdn
           true,  // deleteoldrdn
-          DN.decode(TEST_ROOT_DN_STRING2)); // new superior
+          TEST_ROOT_DN2); // new superior
       op.setAttachment(SYNCHROCONTEXT, new ModifyDnContext(csns[3], user1entryUUID, "newparentId"));
       LocalBackendModifyDNOperation localOp = new LocalBackendModifyDNOperation(op);
       ModifyDNMsg modDNMsg = new ModifyDNMsg(localOp);
@@ -2455,8 +2439,7 @@
     LDIFWriter ldifWriter = getLDIFWriter();
 
     // Creates broker on o=test
-    ReplicationBroker server01 =
-        openReplicationSession(DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+    ReplicationBroker server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
             100, replicationServerPort, brokerSessionTimeout, true);
 
     String user1entryUUID = "11111111-1112-1113-1114-111111111115";
@@ -2493,8 +2476,7 @@
     debugInfo(tn, "Starting test\n\n");
 
     // Creates broker on o=test
-    ReplicationBroker server01 =
-        openReplicationSession(DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1, 100,
+    ReplicationBroker server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1, 100,
             replicationServerPort, brokerSessionTimeout, true);
 
     String filter = "(changenumber=" + firstChangeNumber + ")";
@@ -2776,8 +2758,7 @@
     ECLCompatTestLimits(expectedFirst, expectedLast, true);
 
     // Creates broker on o=test
-    ReplicationBroker server01 =
-        openReplicationSession(DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1, 100,
+    ReplicationBroker server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1, 100,
             replicationServerPort, brokerSessionTimeout, true);
 
     String user1entryUUID = "11111111-1112-1113-1114-111111111115";
@@ -2808,7 +2789,7 @@
     final CSN csn2 = csns[1];
     final CSN csn3 = csns[2];
 
-    ReplicationServerDomain rsdtest = replicationServer.getReplicationServerDomain(TEST_ROOT_DN_STRING);
+    ReplicationServerDomain rsdtest = replicationServer.getReplicationServerDomain(TEST_ROOT_DN);
     // this empty state will force to count from the start of the DB
     final ServerState fromStart = new ServerState();
 
@@ -2816,8 +2797,7 @@
     assertEquals(rsdtest.getEligibleCount(fromStart, csns[0]), 0);
 
     // Creates broker on o=test
-    ReplicationBroker server01 = openReplicationSession(
-        DN.decode(TEST_ROOT_DN_STRING), SERVER_ID_1,
+    ReplicationBroker server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
         1000, replicationServerPort, brokerSessionTimeout, true);
 
     // Publish one first message
@@ -2945,14 +2925,13 @@
       // Configure replication on this backend
       // Add the root entry in the backend
       backend2 = initializeTestBackend(false, TEST_BACKEND_ID2);
-      DN baseDn2 = DN.decode(TEST_ROOT_DN_STRING2);
 
       SortedSet<String> replServers = newSet("localhost:" + replicationServerPort);
 
       // on o=test2,sid=1702 include attrs set to : 'sn'
       SortedSet<String> eclInclude = newSet("sn", "roomnumber");
 
-      DomainFakeCfg domainConf = new DomainFakeCfg(baseDn2, 1702, replServers);
+      DomainFakeCfg domainConf = new DomainFakeCfg(TEST_ROOT_DN2, 1702, replServers);
       domain2 = startNewDomain(domainConf, eclInclude, eclInclude);
 
       backend3 = initializeTestBackend(false, TEST_BACKEND_ID3);
@@ -2969,12 +2948,12 @@
       // on o=test2,sid=1704 include attrs set to : 'cn'
       eclInclude = newSet("cn");
 
-      domainConf = new DomainFakeCfg(baseDn2, 1704, replServers);
+      domainConf = new DomainFakeCfg(TEST_ROOT_DN2, 1704, replServers);
       domain21 = startNewDomain(domainConf, eclInclude, eclInclude);
 
       sleep(1000);
 
-      addEntry(createEntry(baseDn2));
+      addEntry(createEntry(TEST_ROOT_DN2));
       addEntry(createEntry(baseDn3));
 
       String lentry =
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java
index 6c02c78..b68f4c9 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DbHandlerTest.java
@@ -41,6 +41,7 @@
 import org.opends.server.replication.server.ReplServerFakeConfiguration;
 import org.opends.server.replication.server.ReplicationServer;
 import org.opends.server.replication.server.changelog.api.ReplicaDBCursor;
+import org.opends.server.types.DN;
 import org.opends.server.util.StaticUtils;
 import org.testng.annotations.Test;
 
@@ -86,7 +87,7 @@
       testRoot = createCleanDir();
 
       dbEnv = new ReplicationDbEnv(testRoot.getPath(), replicationServer);
-      handler = new DbHandler(1, TEST_ROOT_DN_STRING, replicationServer, dbEnv, 5000);
+      handler = new DbHandler(1, DN.decode(TEST_ROOT_DN_STRING), replicationServer, dbEnv, 5000);
 
       CSNGenerator gen = new CSNGenerator( 1, 0);
       CSN csn1 = gen.newCSN();
@@ -251,7 +252,7 @@
 
       testRoot = createCleanDir();
       dbEnv = new ReplicationDbEnv(testRoot.getPath(), replicationServer);
-      handler = new DbHandler(1, TEST_ROOT_DN_STRING, replicationServer, dbEnv, 5000);
+      handler = new DbHandler(1, DN.decode(TEST_ROOT_DN_STRING), replicationServer, dbEnv, 5000);
 
       // Creates changes added to the dbHandler
       CSNGenerator gen = new CSNGenerator( 1, 0);
@@ -347,7 +348,7 @@
 
       testRoot = createCleanDir();
       dbEnv = new ReplicationDbEnv(testRoot.getPath(), replicationServer);
-      handler = new DbHandler(1, TEST_ROOT_DN_STRING, replicationServer, dbEnv, 10);
+      handler = new DbHandler(1, DN.decode(TEST_ROOT_DN_STRING), replicationServer, dbEnv, 10);
       handler.setCounterWindowSize(counterWindow);
 
       // Populate the db with 'max' msg
@@ -443,7 +444,7 @@
       debugInfo(tn,"SHUTDOWN handler and recreate");
       handler.shutdown();
 
-      handler = new DbHandler(1, TEST_ROOT_DN_STRING, replicationServer, dbEnv, 10);
+      handler = new DbHandler(1, DN.decode(TEST_ROOT_DN_STRING), replicationServer, dbEnv, 10);
       handler.setCounterWindowSize(counterWindow);
 
       // Test first and last
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java
index b82861c..4ff647d 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/DraftCNDbHandlerTest.java
@@ -40,6 +40,7 @@
 import org.opends.server.replication.server.changelog.api.ChangeNumberIndexDBCursor;
 import org.opends.server.replication.server.changelog.api.ChangelogException;
 import org.opends.server.replication.server.changelog.je.DraftCNDB.DraftCNDBCursor;
+import org.opends.server.types.DN;
 import org.opends.server.util.StaticUtils;
 import org.testng.annotations.Test;
 
@@ -92,9 +93,9 @@
       String value2 = "value2";
       String value3 = "value3";
 
-      String baseDN1 = "baseDN1";
-      String baseDN2 = "baseDN2";
-      String baseDN3 = "baseDN3";
+      DN baseDN1 = DN.decode("o=baseDN1");
+      DN baseDN2 = DN.decode("o=baseDN2");
+      DN baseDN3 = DN.decode("o=baseDN3");
 
       CSNGenerator gen = new CSNGenerator(1, 0);
       CSN csn1 = gen.newCSN();
@@ -153,8 +154,7 @@
     }
   }
 
-  private void assertEqualTo(CNIndexRecord data, CSN csn, String baseDN,
-      String cookie)
+  private void assertEqualTo(CNIndexRecord data, CSN csn, DN baseDN, String cookie)
   {
     assertEquals(data.getCSN(), csn);
     assertEquals(data.getBaseDN(), baseDN);
@@ -219,9 +219,9 @@
       String value2 = "value2";
       String value3 = "value3";
 
-      String baseDN1 = "baseDN1";
-      String baseDN2 = "baseDN2";
-      String baseDN3 = "baseDN3";
+      DN baseDN1 = DN.decode("o=baseDN1");
+      DN baseDN2 = DN.decode("o=baseDN2");
+      DN baseDN3 = DN.decode("o=baseDN3");
 
       CSNGenerator gen = new CSNGenerator(1, 0);
       CSN csn1 = gen.newCSN();
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/FakeReplicationDomain.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/FakeReplicationDomain.java
index cea2757..eb55ed1 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/FakeReplicationDomain.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/FakeReplicationDomain.java
@@ -27,8 +27,6 @@
  */
 package org.opends.server.replication.service;
 
-import static org.opends.messages.ReplicationMessages.*;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -38,9 +36,12 @@
 
 import org.opends.server.config.ConfigException;
 import org.opends.server.replication.protocol.UpdateMsg;
+import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.ResultCode;
 
+import static org.opends.messages.ReplicationMessages.*;
+
 /**
  * This class is the minimum implementation of a Concrete ReplicationDomain
  * used to test the Generic Replication Service.
@@ -52,23 +53,23 @@
    * A blocking queue that is used to send the UpdateMsg received from the
    * Replication Service.
    */
-  private BlockingQueue<UpdateMsg> queue = null;
+  private BlockingQueue<UpdateMsg> queue;
 
   /** A string that will be exported should exportBackend be called. */
-  private String exportString = null;
+  private String exportString;
 
   /**
    * A StringBuilder that will be used to build a build a new String should the
    * import be called.
    */
-  private StringBuilder importString = null;
+  private StringBuilder importString;
 
   private int exportedEntryCount;
 
   private long generationID = 1;
 
   public FakeReplicationDomain(
-      String baseDN,
+      DN baseDN,
       int serverID,
       Collection<String> replicationServers,
       int window,
@@ -82,7 +83,7 @@
   }
 
   public FakeReplicationDomain(
-      String baseDN,
+      DN baseDN,
       int serverID,
       Collection<String> replicationServers,
       int window,
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/FakeStressReplicationDomain.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/FakeStressReplicationDomain.java
index 03fef06..26109f8 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/FakeStressReplicationDomain.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/FakeStressReplicationDomain.java
@@ -38,6 +38,7 @@
 
 import org.opends.server.config.ConfigException;
 import org.opends.server.replication.protocol.UpdateMsg;
+import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.ResultCode;
 
@@ -55,7 +56,7 @@
   private BlockingQueue<UpdateMsg> queue = null;
 
   public FakeStressReplicationDomain(
-      String baseDN,
+      DN baseDN,
       int serverID,
       Collection<String> replicationServers,
       int window,
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ReplicationDomainTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ReplicationDomainTest.java
index 9adaa20..e07d1cc 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ReplicationDomainTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ReplicationDomainTest.java
@@ -43,6 +43,7 @@
 import org.opends.server.replication.protocol.UpdateMsg;
 import org.opends.server.replication.server.ReplServerFakeConfiguration;
 import org.opends.server.replication.server.ReplicationServer;
+import org.opends.server.types.DN;
 import org.opends.server.util.StaticUtils;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
@@ -77,7 +78,7 @@
       int domain1ServerId, int domain2ServerId)
       throws Exception
   {
-    String testService = "test";
+    DN testService = DN.decode("o=test");
     ReplicationServer replServer1 = null;
     ReplicationServer replServer2 = null;
     FakeReplicationDomain domain1 = null;
@@ -207,7 +208,7 @@
   @Test(enabled=false)
   public void publishPerf() throws Exception
   {
-    String testService = "test";
+    DN testService = DN.decode("o=test");
     ReplicationServer replServer1 = null;
     int replServerID1 = 10;
     FakeReplicationDomain domain1 = null;
@@ -324,7 +325,7 @@
   public void exportAndImport(int serverId1, int serverId2) throws Exception
   {
     final int ENTRYCOUNT=5000;
-    String testService = "test";
+    DN testService = DN.decode("o=test");
     ReplicationServer replServer = null;
     int replServerID = 11;
     FakeReplicationDomain domain1 = null;
@@ -395,7 +396,7 @@
   public void exportAndImportAcross2ReplServers() throws Exception
   {
     final int ENTRYCOUNT=5000;
-    String testService = "test";
+    DN testService = DN.decode("o=test");
     ReplicationServer replServer2 = null;
     ReplicationServer replServer1 = null;
     int replServerID = 11;
@@ -483,7 +484,7 @@
   @Test(enabled=false)
   public void senderInitialize() throws Exception
   {
-    String testService = "test";
+    DN testService = DN.decode("o=test");
     ReplicationServer replServer = null;
     int replServerID = 12;
     FakeStressReplicationDomain domain1 = null;
@@ -517,7 +518,7 @@
   @Test(enabled=false)
   public void receiverInitialize() throws Exception
   {
-    String testService = "test";
+    DN testService = DN.decode("o=test");
     ReplicationServer replServer = null;
     int replServerID = 11;
     FakeStressReplicationDomain domain1 = null;

--
Gitblit v1.10.0