From c01c421b26e6409febd6af1db1c9db11b7b347a4 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Tue, 07 Jan 2014 15:06:31 +0000
Subject: [PATCH] Align server types API with SDK types API

---
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/GenericBackendTestCase.java                                     |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java                                        |   30 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java                                        |   10 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/IndexTask.java                                                             |    3 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagementContext.java                                                        |    5 
 opendj3-server-dev/replace.rb                                                                                                                    |  276 ++
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AnonymousSASLMechanismHandlerTestCase.java                    |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DefaultEntryCacheTestCase.java                                |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java                 |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBTest.java                     |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java                                     |   54 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2URI.java                                                                         |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ReadOnlyConfigFileHandler.java                                             |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/EntryUUIDPluginTestCase.java                                     |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/AddSchemaFileTaskTestCase.java                                     |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProviderTestCase.java   |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/VerifyIndexTestCase.java                                           |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java                                              |   12 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/VerifyJob.java                                                                      |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/MonitorTest.java                                      |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/NumSubordinateHacker.java                                                  |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/PostConnectedDisconnectTest.java                           |    3 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java                                    |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyTestCase.java              |   15 
 opendj3-server-dev/src/server/org/opends/server/tools/BackendToolUtils.java                                                                      |    4 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java                                    |   12 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java                    |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapperTestCase.java        |   12 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntryPanel.java                                                          |   21 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/nodes/BasicNode.java                                                         |    7 
 opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroup.java                                                             |    9 
 opendj3-server-dev/src/server/org/opends/server/core/PluginConfigManager.java                                                                    |    6 
 opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameSyntax.java                                                              |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java                     |    9 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryPasswordPolicyTestCase.java                                 |   16 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java                                                          |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java                     |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ModifyConflictTest.java                               |    4 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/GroupDN.java                                                            |    4 
 opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalClientConnection.java                                                 |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/LDAPSyntaxTest.java                                               |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProvider.java                                   |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java                                                     |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapperTestCase.java |   12 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractVLVIndexPanel.java                                                   |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RandomPasswordGeneratorTestCase.java                          |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ReplicationDomainTest.java                           |   14 
 opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java                                                      |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java                                                        |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java                                                       |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java                                  |   66 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestChangeRecordEntry.java                                          |    9 
 opendj3-server-dev/src/server/org/opends/server/tools/EncodePassword.java                                                                        |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java                                                          |   14 
 opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java                                |    4 
 opendj3-server-dev/src/server/org/opends/server/tasks/SetGenerationIdTask.java                                                                   |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java                                                    |    4 
 opendj3-server-dev/src/server/org/opends/server/controls/GetEffectiveRightsRequestControl.java                                                   |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/PasswordPolicyImportPluginTestCase.java                          |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProviderTestCase.java    |   22 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/FakeModdnOperation.java                                                       |    6 
 opendj3-server-dev/src/server/org/opends/server/types/LDAPURL.java                                                                               |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandlerTestCase.java                      |   15 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java                                   |    6 
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java                                            |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AuthPasswordEqualityMatchingRuleTest.java                         |    3 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java                                                           |   12 
 opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTask.java                                                                        |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/InclusionExclusionPanel.java                                                 |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java                                           |   17 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowConfigurationTest.java                                      |    7 
 opendj3-server-dev/src/server/org/opends/server/backends/RootDSEBackend.java                                                                     |   12 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ParentDNTag.java                                                                  |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVerifyJob.java                                          |   18 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/ReferentialIntegrityPluginTestCase.java                          |   93 
 opendj3-server-dev/src/server/org/opends/server/extensions/FileSystemEntryCache.java                                                             |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestImportJob.java                                          |   54 
 opendj3-server-dev/src/server/org/opends/server/core/WorkflowTopologyNode.java                                                                   |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java                  |   17 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java                                            |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/WhoAmIExtendedOperationTestCase.java                          |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/LDAPADListPluginTestCase.java                                    |    9 
 opendj3-server-dev/src/server/org/opends/server/types/SubEntry.java                                                                              |    8 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java                                                  |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordModifyExtendedOperationTestCase.java                  |   84 
 opendj3-server-dev/src/server/org/opends/server/api/ClientConnection.java                                                                        |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BackendConfigManagerTestCase.java                                   |   27 
 opendj3-server-dev/src/server/org/opends/server/plugins/SambaPasswordPlugin.java                                                                 |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FIFOEntryCacheTestCase.java                                   |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java                                     |    3 
 opendj3-server-dev/src/server/org/opends/server/backends/TrustStoreBackend.java                                                                  |   12 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java                                    |    5 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/PersistentServerState.java                                                    |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/TestModifyDNOperation.java                                          |  120 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java                      |   21 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/AllowedTaskTestCase.java                                           |    3 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AddToGroupPanel.java                                                         |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/LockdownModeTaskTestCase.java                                      |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/MockLDAPConnection.java                                |   13 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestRebuildJob.java                                         |    6 
 opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerSync.java                                                                    |   25 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java                                   |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/ManagedObjectPathTest.java                                         |    9 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/IPConnectionCriteriaTest.java                         |    3 
 opendj3-server-dev/src/server/org/opends/server/tasks/RebuildTask.java                                                                           |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java                                                        |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java                        |    3 
 opendj3-server-dev/src/server/org/opends/server/tasks/ExportTask.java                                                                            |    5 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciContainer.java                                                       |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/CryptoManagerTestCase.java                                        |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/browser/NodeRefresher.java                                                      |   18 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java               |   72 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserDN.java                                                             |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestModifyDNChangeRecordEntry.java                                  |   21 
 opendj3-server-dev/src/server/org/opends/server/util/StaticUtils.java                                                                            |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/GetSymmetricKeyExtendedOperationTestCase.java                     |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java                                     |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExactMatchIdentityMapperTestCase.java                         |   27 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/UniqueAttributePluginTestCase.java                               |   34 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalLDAPSocketTestCase.java                       |   47 
 opendj3-server-dev/src/server/org/opends/server/tools/ListBackends.java                                                                          |   12 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/task/TaskBackendTestCase.java                                   |   53 
 opendj3-server-dev/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java                                                  |    8 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java                                        |   16 
 opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV1Control.java                                                               |    4 
 opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPConnectionHandler.java                                                        |    3 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/ExternalChangelogDomain.java                                                  |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandlerTestCase.java                    |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/SecurityConnectionCriteriaTest.java                   |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java                                                        |    3 
 opendj3-server-dev/src/server/org/opends/server/tools/VerifyIndex.java                                                                           |    4 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/WorkflowElementConfigManager.java                                                |    5 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RDNTag.java                                                                       |    5 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java                                                                 |   26 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/DNPropertyDefinitionTest.java                                      |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestAlertGenerator.java                                       |    3 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java                                                     |   11 
 opendj3-server-dev/src/server/org/opends/server/tasks/ImportTask.java                                                                            |   10 
 opendj3-server-dev/src/server/org/opends/server/controls/EntryChangeNotificationControl.java                                                     |    3 
 opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java                                       |    7 
 opendj3-server-dev/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java                                 |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/server/DelayedConfigAddListener.java                                                       |    5 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java                                                    |   30 
 opendj3-server-dev/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java                                                 |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java                                        |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java                                   |   16 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExternalSASLMechanismHandlerTestCase.java                     |   14 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java                                                      |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/GroupManagerTestCase.java                                           |  258 +-
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java                                                     |   22 
 opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java                                                                                |   12 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java                                           |   41 
 opendj3-server-dev/src/server/org/opends/server/api/DITCacheMap.java                                                                             |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ProxiedAuthV1ControlTestCase.java                               |   37 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyTest.java                       |   43 
 opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalLDAPSocket.java                                                       |    3 
 opendj3-server-dev/src/server/org/opends/server/types/Entry.java                                                                                 |   12 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/DomainFakeCfg.java                                    |    6 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java                                                        |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationBackend.java                                                       |   14 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java                                                    |    3 
 opendj3-server-dev/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java                                                    |    4 
 opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java                                                |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java                                              |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/common/MultiDomainServerStateTest.java                       |   27 
 opendj3-server-dev/src/server/org/opends/server/plugins/ReferentialIntegrityPlugin.java                                                          |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestBackendImpl.java                                        |  144 
 opendj3-server-dev/src/server/org/opends/server/core/GroupManager.java                                                                           |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/RejectUnauthReqTests.java                                           |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/Task.java                                                                  |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/ImportLDIFTestCase.java                                            |    4 
 opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java                                                                      |   10 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java                                       |   10 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciTargets.java                                                         |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxTestCase.java                                           |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java               |    6 
 opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTargetTask.java                                                                  |    4 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java                                                    |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/HasSubordinatesVirtualAttributeProviderTestCase.java          |   28 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/LastModPluginTestCase.java                                       |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java                  |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java                                                            |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java                       |    3 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java                                                           |    3 
 opendj3-server-dev/src/server/org/opends/server/types/SubtreeSpecification.java                                                                  |   22 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserAttr.java                                                           |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SearchOperationTestCase.java                                        |   12 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/PasswordPolicyTestCase.java                                         |   74 
 opendj3-server-dev/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java                                                      |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyTest.java                         |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/GroupIdHandshakeTest.java                             |    8 
 opendj3-server-dev/src/server/org/opends/server/core/VirtualAttributeConfigManager.java                                                          |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java                                                       |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/VirtualAttributeRuleTestCase.java                                  |   24 
 opendj3-server-dev/src/server/org/opends/server/core/SubentryManager.java                                                                        |   16 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java                                                              |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestDeleteChangeRecordEntry.java                                    |   11 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerDynamicConfTest.java                 |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartDSMsg.java                                                   |    4 
 opendj3-server-dev/src/server/org/opends/server/admin/server/DNBuilder.java                                                                      |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java                                                        |    9 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateFile.java                                                                 |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java                                               |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java                         |   28 
 opendj3-server-dev/src/server/org/opends/server/admin/Reference.java                                                                             |    5 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java                                                              |    9 
 opendj3-server-dev/src/server/org/opends/server/types/SearchFilter.java                                                                          |    3 
 opendj3-server-dev/src/server/org/opends/server/admin/DNPropertyDefinition.java                                                                  |    9 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/VirtualStaticGroupTestCase.java                               |   50 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ServerStartMsg.java                                                         |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java                                  |    5 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciEffectiveRights.java                                                 |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java                         |    3 
 opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContextHelper.java                                                                            |    5 
 opendj3-server-dev/src/server/org/opends/server/util/LDIFReader.java                                                                             |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/TargetTestCase.java                             |   13 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/TasksTestCase.java                                                 |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java                                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/admin/ManagedObjectPath.java                                                                     |   12 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerHandler.java                                                         |    2 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java                        |   30 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/PluginConfigManagerTestCase.java                                    |   13 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProviderTestCase.java        |   18 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeRequestMsg.java                                                   |    4 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java                                                        |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java                                                 |   25 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/NetworkGroupTest.java                                 |   56 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ProxiedAuthV2ControlTestCase.java                               |    5 
 opendj3-server-dev/src/server/org/opends/server/tools/ImportLDIF.java                                                                            |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/ConfigFileHandler.java                                                                |   24 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java                                                     |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestAddChangeRecordEntry.java                                       |   15 
 opendj3-server-dev/src/server/org/opends/server/tasks/PurgeConflictsHistoricalTask.java                                                          |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java              |   13 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewGroupPanel.java                                                           |    8 
 opendj3-server-dev/src/server/org/opends/server/backends/task/TaskBackend.java                                                                   |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestSubtreeSpecification.java                                      |   52 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/AuthMethodConnectionCriteriaTest.java                 |   13 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/PrivilegeTestCase.java                                             |   50 
 opendj3-server-dev/src/server/org/opends/server/config/DNConfigAttribute.java                                                                    |   13 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestEntryContainer.java                                     |    3 
 opendj3-server-dev/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java                                                     |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/LDIFBackendTestCase.java                                        |   63 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java                         |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java           |   12 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/RebuildIndexTestCase.java                                          |    6 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternDN.java                                                          |    7 
 opendj3-server-dev/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java                                                           |    4 
 opendj3-server-dev/src/server/org/opends/server/types/AbstractOperation.java                                                                     |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java                            |    3 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java                                                       |   11 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java                            |   20 
 opendj3-server-dev/src/server/org/opends/server/core/WorkflowConfigManager.java                                                                  |    3 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java                                               |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java                                                        |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProviderTestCase.java          |   22 
 opendj3-server-dev/src/server/org/opends/server/types/DN.java                                                                                    |   28 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/DependencyTest.java                                          |   32 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java                                                       |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java                           |    9 
 opendj3-server-dev/src/server/org/opends/server/tools/ConfigureDS.java                                                                           |   58 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/DITCacheMapTestCase.java                                             |   65 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/LDAPClientTest.java                                    |    3 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java                                                          |    9 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java                                                 |    9 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java                                        |   34 
 opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerImpl.java                                                                    |   26 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/PersistentServerStateTest.java                        |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryDNVirtualAttributeProviderTestCase.java                  |   22 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BaseDNPanel.java                                                             |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java                            |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTestCase.java                                |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordStorageSchemeTestCase.java                            |    6 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciHandler.java                                                         |   12 
 opendj3-server-dev/src/server/org/opends/server/tasks/TaskUtils.java                                                                             |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVLVIndex.java                                           |   50 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java                                 |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DNBuilderTest.java                                          |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ServerSideSortControlTestCase.java                              |   37 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java                |   13 
 opendj3-server-dev/copyright.rb                                                                                                                  |   81 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AuthenticationPolicyTestCase.java                                    |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java                                          |    8 
 opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java                                                                        |   26 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java                              |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestModifyChangeRecordEntry.java                                    |   15 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProviderTestCase.java              |   40 
 opendj3-server-dev/src/server/org/opends/server/backends/BackupBackend.java                                                                      |   13 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java                                            |    5 
 opendj3-server-dev/src/server/org/opends/server/tasks/BackupTask.java                                                                            |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/CompareOperationTestCase.java                                       |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/NamingConflictTest.java                               |   24 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java                                    |    5 
 opendj3-server-dev/src/server/org/opends/server/backends/LDIFBackend.java                                                                        |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java                            |   38 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CharacterSetPasswordValidatorTestCase.java                    |    4 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java                                                            |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/RebuildIndex.java                                                                          |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BindOperationTestCase.java                                          |   48 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPCompareTestCase.java                                           |   16 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/UserPasswordEqualityMatchingRuleTest.java                         |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CryptPasswordStorageSchemeTestCase.java                       |    6 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java                                    |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java                                           |   30 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java                                      |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalCsnOrderingTest.java                        |   16 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2ID.java                                                                          |    3 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java                                  |   12 
 opendj3-server-dev/src/server/org/opends/server/core/BackendConfigManager.java                                                                   |    3 
 opendj3-server-dev/src/server/org/opends/server/core/BaseDnRegistry.java                                                                         |    9 
 opendj3-server-dev/src/server/org/opends/server/core/AuthenticatedUsers.java                                                                     |    6 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java                                    |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java                             |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/AggregationPropertyDefinitionTest.java                             |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/SambaPasswordPluginTestCase.java                                 |   10 
 opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java                                                 |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CommonEntryCacheTestCase.java                                 |   36 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java                                      |    4 
 opendj3-server-dev/src/server/org/opends/server/core/AddOperationBasis.java                                                                      |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java         |   10 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebFormat.java                                                                      |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java                                                           |   12 
 opendj3-server-dev/src/server/org/opends/server/backends/MonitorBackend.java                                                                     |   18 
 opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV2Control.java                                                               |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FingerprintCertificateMapperTestCase.java                     |   16 
 opendj3-server-dev/src/server/org/opends/server/core/ModifyDNOperationBasis.java                                                                 |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TraditionalWorkQueueTestCase.java                             |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/TopologyViewTest.java                                 |    6 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/LDAPUpdateMsg.java                                                          |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/DNTag.java                                                                        |    7 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java                                                    |    7 
 opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java                                                |    4 
 opendj3-server-dev/src/server/org/opends/server/schema/AciSyntax.java                                                                            |    4 
 opendj3-server-dev/src/server/org/opends/server/core/EntryCacheConfigManager.java                                                                |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/VLVControlTestCase.java                                         |   43 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestDN.java                                                        |  168 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalSearchOperationTestCase.java                  |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/ProtocolCompatibilityTest.java                      |   24 
 opendj3-server-dev/src/server/org/opends/server/tools/ExportLDIF.java                                                                            |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java                                              |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java                     |   32 
 opendj3-server-dev/src/server/org/opends/server/core/PersistentSearch.java                                                                       |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java                                                  |   44 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ChangeNumberControlPluginTestCase.java                       |    4 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPReader.java                                                                   |   19 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Branch.java                                                                       |    3 
 opendj3-server-dev/src/server/org/opends/server/tools/LDIFDiff.java                                                                              |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ECLUpdateMsg.java                                                           |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java                 |   27 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/SchemaBackendTestCase.java                                      |   44 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/PersistentSearchControlTest.java                                |    3 
 opendj3-server-dev/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java                                                              |    3 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java                                                |   14 
 opendj3-server-dev/src/server/org/opends/server/core/BindOperationBasis.java                                                                     |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/SASLContext.java                                                                      |   12 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeTargetMsg.java                                                    |    4 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciList.java                                                            |   26 
 opendj3-server-dev/src/server/org/opends/server/replication/common/MultiDomainServerState.java                                                   |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/LDIFSearch.java                                                                            |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/BindDNConnectionCriteriaTest.java                     |    7 
 opendj3-server-dev/src/server/org/opends/server/types/BackupDirectory.java                                                                       |    3 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObject.java                                                            |   35 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java                                                       |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/TimeBasedMatchingRuleTest.java                                    |   18 
 opendj3-server-dev/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java                                                             |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexerTest.java             |    5 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateEntry.java                                                                |    3 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProviderTestCase.java                |   14 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java                                        |  102 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/IsolationTest.java                                    |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/CollationMatchingRuleTest.java                                    |   11 
 372 files changed, 3,064 insertions(+), 2,564 deletions(-)

diff --git a/opendj3-server-dev/copyright.rb b/opendj3-server-dev/copyright.rb
new file mode 100755
index 0000000..51d36f0
--- /dev/null
+++ b/opendj3-server-dev/copyright.rb
@@ -0,0 +1,81 @@
+#!/usr/bin/env ruby
+
+require 'fileutils'
+
+# Automate copyright update with year 2014, using 'svn status' to retrieve modified files.
+# Only modified files (with 'M' mark) are updated.
+#
+class Copyright
+
+  def updated_files
+    files = []
+    puts "Get modified files from svn..."
+    lines = `svn st`
+    puts "There are #{lines.split("\n").size} files to update."
+    lines.split("\n").each { |line|
+      mod, file = line.split(" ")
+      if mod=="M"
+        files << file
+      end
+    }
+    files
+  end
+
+  def process(file)
+    is_replaced = nil
+    File.open(file) { |source|
+      content = source.read
+      is_replaced = update_copyright(content)
+      if is_replaced
+        File.open(file + ".copy", "w+") { |f| f.write(content) }
+        #puts `head -n 27 #{file}`
+        #puts("content:\n" + content.split("\n")[20..27].join("\n"))
+      else
+        puts "WARN : no replacement"
+      end
+    }
+    if is_replaced
+      FileUtils.mv(file + ".copy", file, :verbose => false)
+    end
+  end
+
+
+  def update_copyright(content)
+    pattern = /(^\s+\*\s+)Portions Copyright (\d+)-(\d+) ForgeRock,? AS/i
+    replace = '\1Portions Copyright \2-2014 ForgeRock AS'
+    is_replaced = content.gsub!(pattern, replace)
+
+    if is_replaced.nil?
+      pattern = /(^\s+\*\s+)Portions Copyright (\d+) ForgeRock,? AS/i
+      mdata = content.match(pattern)
+      if !mdata.nil? && mdata[2]!="2014"
+        replace = '\1Portions Copyright \2-2014 ForgeRock AS'
+        is_replaced = content.gsub!(pattern, replace)
+      end
+      if is_replaced.nil?
+        # No portions line, add it
+        pattern = /(^\s+\*)(\s+)Copyright (\d+-?\d*)\s(.*)$\n\s+\*\/$/i
+        replace = '\1\2Copyright \3 \4' + "\n\\1\\2Portions Copyright 2014 ForgeRock AS\n\\1/"
+        is_replaced = content.gsub!(pattern, replace)
+      end
+    end
+    is_replaced
+  end
+
+  def run(args)
+    if args.size==0
+      files = updated_files
+    else
+      files = argv
+    end
+    files.each { |file|
+      puts "Processing file #{file}"
+      process(file)
+    }
+  end
+
+end
+
+# Launch copyright update
+Copyright.new.run(ARGV)
+
diff --git a/opendj3-server-dev/replace.rb b/opendj3-server-dev/replace.rb
new file mode 100755
index 0000000..be281a8
--- /dev/null
+++ b/opendj3-server-dev/replace.rb
@@ -0,0 +1,276 @@
+#!/usr/bin/env ruby
+
+require 'fileutils'
+
+#
+# Automate code replacements using regular expressions
+#
+# To define a new replacement, add a new constant like VALIDATOR.
+#
+# It should be a ruby Hash with three mandatory keys and one optional key:
+#
+#  :dirs => a list of directory to run replacements. All subdirs are processed.
+#  :extensions => a list of file extensions. Only file with these extensions are processed.
+#  :replacements => a list of replacements, lines are processed 2 by 2
+#    - first line gives the pattern to replace, as a ruby regexp (see http://rubular.com/ for help and tool)
+#    - second line gives the replacement string, using \1, \2, ... to insert matching groups. This is a string,
+#       use simple quote if no special char is inserted, or use double quote if using special char like \n
+#    Don't forget to put a comma at end of each line, this is the array element separator.
+#    It is ok to leave a new line to separate each pair of line for readability.
+#    It is ok to use a comment in the array (use # as first non blank character of line).
+#
+# The optional key is :stopwords => a list of stopword. If any word in this list appears in a file name, the file
+#   is not processed. Use it to exclude some files or directory that must not be processed.
+#
+# Once you have define your replacement, add the constant in REPLACEMENTS array. it will be taken into account when
+# running the program (run it at root of project) with command: ./replace.rb
+#
+class Replace
+
+  # All directories that contains java code
+  JAVA_DIRS = ["src/server", "src/quicksetup", "src/ads", "src/guitools", "tests/unit-tests-testng/src"]
+
+  # Replacement for Validator
+  # Modify 88 files, for a total of 227 replacements - leaves 21 compilation errors
+  VALIDATOR = {
+    :dirs => JAVA_DIRS,
+    :extensions => ["java"],
+    :replacements =>
+      [
+        /import org.opends.server.util.\*;/,
+        "import org.opends.server.util.*;\nimport org.forgerock.util.Reject;",
+
+        /import static org.opends.server.util.Validator.ensureNotNull;/,
+        'import static org.forgerock.util.Reject.ifNull;',
+
+        /import static org.opends.server.util.Validator.ensureTrue;/,
+        'import static org.forgerock.util.Reject.ifFalse;',
+
+        /import static org.opends.server.util.Validator.\*;/,
+        'import static org.forgerock.util.Reject.*;',
+
+        /import org.opends.server.util.Validator;/,
+        'import org.forgerock.util.Reject;',
+
+        /(Validator\.| )ensureNotNull\((.*)$/,
+        '\1ifNull(\2',
+
+        /(Validator\.| )ensureTrue\((.*)$/,
+        '\1ifFalse(\2',
+
+        / Validator\./,
+        ' Reject.'
+      ]
+  }
+
+  # Replacement for messages
+  # Modify 1052 files, for a total of 2366 replacements - leaves 10274 compilation errors mostly due to generated messages
+  MESSAGES = {
+    :dirs => JAVA_DIRS,
+    :extensions => ["java"],
+    :replacements =>
+      [
+        /import org.opends.messages.Message;/,
+        'import org.forgerock.i18n.LocalizableMessage;',
+
+        /([ <(])Message([ >)(.]|$)/,
+        '\1LocalizableMessage\2',
+
+        /import org.opends.messages.MessageBuilder;/,
+        'import org.forgerock.i18n.LocalizableMessageBuilder;',
+
+        /([ <(])MessageBuilder([ >)(.]|$)/,
+        '\1LocalizableMessageBuilder\2'
+      ]
+  }
+
+  # Replacement for types
+  # Modify 688 files, for a total of 783 replacements - leaves 7605 compilation errors
+  TYPES = {
+    :dirs => JAVA_DIRS,
+    :extensions => ["java"],
+    :replacements =>
+      [
+        /import org.opends.server.types.(DN|RDN|Attribute|ByteString|Entry|ResultCode);/,
+        'import org.forgerock.opendj.ldap.\1;',
+
+        /import org.opends.server.(types|api).(AttributeType|MatchingRule);/,
+        'import org.forgerock.opendj.ldap.schema.\2;',
+
+      ]
+  }
+
+  # Replacement for exceptions
+  # Modify 36 files, for a total of 134 replacements - leaves 1277 compilation errors but mostly from generated config
+  EXCEPTIONS = {
+    :dirs => JAVA_DIRS,
+    :extensions => ["java"],
+    :replacements =>
+      [
+        /import org.opends.server.admin.client.AuthorizationException;/,
+        'import org.forgerock.opendj.ldap.ErrorResultException;',
+
+        /\bAuthorizationException\b/,
+        'ErrorResultException',
+
+        /import org.opends.server.admin.client.CommunicationException;\n/,
+        '',
+
+        /throws CommunicationException\b, /,
+        'throws ',
+
+        /, CommunicationException\b(, )?/,
+        '\1',
+
+        /\bCommunicationException\b/,
+        'ErrorResultException',
+      ]
+  }
+
+  # Replacement for loggers
+  # Modify 454 files, for a total of 2427 replacements - leaves 72 compilation errors
+  # TODO: add I18N loggers
+  LOGGERS = {
+    :dirs => JAVA_DIRS,
+    :stopwords => ['src/server/org/opends/server/loggers', 'DebugLogPublisher'],
+    :extensions => ["java"],
+    :replacements =>
+      [
+        /import org.opends.server.loggers.debug.DebugTracer;/,
+        "import org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;",
+
+        /import java.util.logging.Logger;/,
+        "import org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;",
+
+        /import java.util.logging.Level;\n/,
+        '',
+
+        /import org.opends.server.types.DebugLogLevel;\n/,
+        '',
+
+        /import (static )?org.opends.server.loggers.debug.DebugLogger.*;\n/,
+        '',
+
+        /DebugTracer TRACER = (DebugLogger.)?getTracer\(\)/,
+        "Logger debugLogger = LoggerFactory.getLogger({CLASSNAME}.class)",
+
+        /^\s*\/\*\*\n.*The tracer object for the debug logger.\n\s*\*\/$\n/,
+        '',
+
+        /^\s*\/\/\s*The tracer object for the debug logger.$\n/,
+        '',
+
+        /if \(debugEnabled\(\)\)\s*{\s* TRACER.debugCaught\(DebugLogLevel.ERROR, (\b.*\b)\);\s*\n\s*}$/,
+        'debugLogger.trace("Error", \1);',
+
+        /TRACER\.debugCaught\(DebugLogLevel.ERROR, (\b.*\b)\);/,
+        'debugLogger.trace("Error", \1);',
+
+        /TRACER.debug[^(]+\(/,
+        'debugLogger.trace(',
+
+        /debugLogger.trace\(DebugLogLevel.\b\w+\b, ?/,
+        'debugLogger.trace(',
+
+        /debugLogger.trace\(e\)/,
+        'debugLogger.trace("Error", e)',
+
+        /(DebugLogger\.|\b)debugEnabled\(\)/,
+        'debugLogger.isTraceEnabled()',
+
+        /(LOG|logger).log\((Level.)?WARNING, ?/,
+        '\1.warn(',
+
+        /(LOG|logger).log\((Level.)?CONFIG, ?/,
+        '\1.info(',
+
+        /(LOG|logger).log\((Level.)?INFO, ?/,
+        '\1.debug(',
+
+        /(LOG|logger).log\((Level.)?SEVERE, ?/,
+        '\1.error(',
+
+        /(LOG|logger).log\((Level.)?FINE, ?/,
+        '\1.trace(',
+
+        /Logger.getLogger\((\n\s+)?(\b\w+\b).class.getName\(\)\);/,
+        'LoggerFactory.getLogger(\2.class);',
+      ]
+  }
+
+  I18N_LOGGERS = {
+    :dirs => JAVA_DIRS,
+    :extensions => ["java"],
+    :replacements =>
+      [
+         # Message message = ERR_REFINT_UNABLE_TO_EVALUATE_TARGET_CONDITION.get(mo
+         #                    .getManagedObjectDefinition().getUserFriendlyName(), String
+         #                    .valueOf(mo.getDN()), StaticUtils.getExceptionMessage(e));
+         # ErrorLogger.logError(message);
+        /\bMessage\b \b(\w+)\b = (\w+\.)?\b(\w+)\b\s*.\s*get([^;]+);\n(\s+)ErrorLogger.logError\(\1\);/m,
+        "    Message message = \\2.get\\4;\n" +
+        "LocalizedLogger logger = LocalizedLogger.getLocalizedLogger(\\3.resourceName());\n\\5logger.error(\\1);",
+     ]
+  }
+
+  # List of replacements to run
+  REPLACEMENTS = [ I18N_LOGGERS ]
+  #REPLACEMENTS = [ VALIDATOR, MESSAGES, TYPES, EXCEPTIONS, LOGGERS ]
+
+  # Run replacements
+  def run
+    REPLACEMENTS.each { |repl|
+      puts "Replacing " + Replace.constants.find{ |name| Replace.const_get(name)==repl }.to_s
+      stopwords = repl[:stopwords] || ["--nostopword--"]
+      replace_dirs(repl[:replacements], repl[:dirs], stopwords, repl[:extensions])
+    }
+  end
+
+  def replace_dirs(replacements, dirs, stopwords, extensions)
+    count_files = 0
+    count_total = 0
+    dirs.each { |directory|
+      files = files_under_directory(directory, extensions)
+      files.each { |file|
+        exclude_file = stopwords.any? { |stopword| file.include?(stopword) }
+        next if exclude_file
+        count = replace_file(file, replacements)
+        if count > 0
+          count_files += 1
+          count_total += count
+        end
+      }
+    }
+    puts "Replaced in #{count_files} files, for a total of #{count_total} replacements"
+  end
+
+  def replace_file(file, replacements)
+    count = 0
+    File.open(file) { |source|
+      contents = source.read
+      (0..replacements.size-1).step(2).each { |index|
+        pattern, replace = replacements[index], replacements[index+1]
+        replace = replace.gsub('{CLASSNAME}', classname(file))
+        is_replaced = contents.gsub!(pattern, replace)
+        if is_replaced then count += 1 end
+      }
+      File.open(file + ".copy", "w+") { |f| f.write(contents) }
+    }
+    FileUtils.mv(file + ".copy", file, :verbose => false)
+    count
+  end
+
+  def classname(file)
+    name = file.gsub(/.*\/(.*).java$/, '\1')
+    if name.nil? then '' else name end
+  end
+
+  def files_under_directory(directory, extensions)
+    Dir[directory + '/**/*.{' + extensions.join(",") + '}']
+  end
+
+end
+
+# Launch replacement
+Replace.new.run
+
diff --git a/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContextHelper.java b/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContextHelper.java
index 2683cda..0b245b0 100644
--- a/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContextHelper.java
+++ b/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContextHelper.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.admin.ads;
@@ -102,7 +103,7 @@
         if (suffixes != null)
         {
           if (suffixes.remove(
-              DN.decode(ADSContext.getAdministrationSuffixDN())))
+              DN.valueOf(ADSContext.getAdministrationSuffixDN())))
           {
             if (suffixes.size() > 0)
             {
@@ -170,7 +171,7 @@
       {
         suffixes = new TreeSet<DN>();
       }
-      DN newDN = DN.decode(ADSContext.getAdministrationSuffixDN());
+      DN newDN = DN.valueOf(ADSContext.getAdministrationSuffixDN());
       if (!suffixes.contains(newDN))
       {
         suffixes.add(newDN);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/browser/NodeRefresher.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/browser/NodeRefresher.java
index c2da6de..9f9ba05 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/browser/NodeRefresher.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/browser/NodeRefresher.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012-2013 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.browser;
@@ -809,8 +809,8 @@
       int parentComponents;
       try
       {
-        DN dn = DN.decode(parentDn);
-        parentComponents = dn.getNumComponents();
+        DN dn = DN.valueOf(parentDn);
+        parentComponents = dn.size();
       }
       catch (Throwable t)
       {
@@ -844,8 +844,8 @@
             DN dn = null;
             try
             {
-              dn = DN.decode(name);
-              add = dn.getNumComponents() == parentComponents + 1;
+              dn = DN.valueOf(name);
+              add = dn.size() == parentComponents + 1;
             }
             catch (Throwable t)
             {
@@ -858,7 +858,7 @@
               // if it is the case, do not add the parent.  If is not the case,
               // search for the parent and add it.
               RDN[] rdns = new RDN[parentComponents + 1];
-              int diff = dn.getNumComponents() - rdns.length;
+              int diff = dn.size() - rdns.length;
               for (int i=0; i < rdns.length; i++)
               {
                 rdns[i] = dn.getRDN(i + diff);
@@ -869,7 +869,7 @@
               {
                 try
                 {
-                  DN addedDN = DN.decode(addedEntry.getName());
+                  DN addedDN = DN.valueOf(addedEntry.getName());
                   if (addedDN.equals(parentToAddDN))
                   {
                     mustAddParent = false;
@@ -897,7 +897,7 @@
                         BasicNode node = (BasicNode)getNode().getChildAt(i);
                         try
                         {
-                          DN dn = DN.decode(node.getDN());
+                          DN dn = DN.valueOf(node.getDN());
                           if (dn.equals(parentToAddDN))
                           {
                             resultValue[0] = false;
@@ -1186,7 +1186,7 @@
     boolean checkSucceeded = true;
     try
     {
-      DN dn1 = DN.decode(getNode().getDN());
+      DN dn1 = DN.valueOf(getNode().getDN());
       DN dn2 = url.getBaseDN();
       if (dn2.isAncestorOf(dn1))
       {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
index 88d9d4a..8f861a7 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CustomSearchResult.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.datamodel;
@@ -305,7 +305,7 @@
    */
   public Entry getEntry() throws OpenDsException
   {
-    DN dn = DN.decode(this.getDN());
+    DN dn = DN.valueOf(this.getDN());
     Map<ObjectClass,String> objectClasses = new HashMap<ObjectClass,String>();
     Map<AttributeType,List<org.opends.server.types.Attribute>> userAttributes =
       new HashMap<AttributeType,List<org.opends.server.types.Attribute>>();
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java
index 4d2dd06..65a014b 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -252,7 +253,7 @@
         getInfo().stopPooling();
         if (getInfo().mustDeregisterConfig())
         {
-          DirectoryServer.deregisterBaseDN(DN.decode("cn=config"));
+          DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config"));
         }
         DirectoryServer.getInstance().initializeConfiguration(
             org.opends.server.extensions.ConfigFileHandler.class.getName(),
@@ -460,7 +461,7 @@
     String dn = Utilities.getRDNString("ds-cfg-backend-id", backendName)+
     ",cn=Backends,cn=config";
     ConfigEntry configEntry =
-      DirectoryServer.getConfigHandler().getConfigEntry(DN.decode(dn));
+      DirectoryServer.getConfigHandler().getConfigEntry(DN.valueOf(dn));
 
     DNConfigAttribute baseDNAttr =
       new DNConfigAttribute(
@@ -510,7 +511,7 @@
   {
     String dn = getDN(backend);
     Utilities.deleteConfigSubtree(
-        DirectoryServer.getConfigHandler(), DN.decode(dn));
+        DirectoryServer.getConfigHandler(), DN.valueOf(dn));
   }
 
   /**
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
index 67cb859..e909f33 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -103,7 +103,7 @@
       BasicNode node = (BasicNode)path.getLastPathComponent();
       try
       {
-        DN dn = DN.decode(node.getDN());
+        DN dn = DN.valueOf(node.getDN());
         entries.add(dn);
       }
       catch (DirectoryException de)
@@ -225,7 +225,7 @@
         BasicNode node = (BasicNode)path.getLastPathComponent();
         try
         {
-          DN dn = DN.decode(node.getDN());
+          DN dn = DN.valueOf(node.getDN());
           boolean isDnDeleted = false;
           for (DN deletedDn : alreadyDeleted)
           {
@@ -378,7 +378,7 @@
           {
             CustomSearchResult res =
               new CustomSearchResult(sr, dnToRemove.toString());
-            entryDNFound = DN.decode(res.getDN());
+            entryDNFound = DN.valueOf(res.getDN());
             deleteSubtreeRecursively(ctx, entryDNFound, null, toNotify);
           }
         }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java
index 5605598..bbf2c6b 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -159,7 +160,7 @@
         getInfo().stopPooling();
         if (getInfo().mustDeregisterConfig())
         {
-          DirectoryServer.deregisterBaseDN(DN.decode("cn=config"));
+          DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config"));
         }
         DirectoryServer.getInstance().initializeConfiguration(
             org.opends.server.extensions.ConfigFileHandler.class.getName(),
@@ -277,14 +278,14 @@
       String dn = Utilities.getRDNString("ds-cfg-name", index.getName())+
       ",cn=VLV Index,"+Utilities.getRDNString("ds-cfg-backend-id",
           index.getBackend().getBackendID())+",cn=Backends,cn=config";
-      DirectoryServer.getConfigHandler().deleteEntry(DN.decode(dn), null);
+      DirectoryServer.getConfigHandler().deleteEntry(DN.valueOf(dn), null);
     }
     else
     {
       String dn = Utilities.getRDNString("ds-cfg-attribute", index.getName())+
       ",cn=Index,"+Utilities.getRDNString("ds-cfg-backend-id",
           index.getBackend().getBackendID())+",cn=Backends,cn=config";
-      DirectoryServer.getConfigHandler().deleteEntry(DN.decode(dn), null);
+      DirectoryServer.getConfigHandler().deleteEntry(DN.valueOf(dn), null);
     }
   }
 
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/IndexTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/IndexTask.java
index a799ff2..cb14ca1 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/IndexTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/IndexTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -96,7 +97,7 @@
     {
       try
       {
-        theDN = DN.decode(baseDN);
+        theDN = DN.valueOf(baseDN);
       }
       catch (Throwable t)
       {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
index 97a753f..3fae7a6 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -104,7 +105,7 @@
     DN newDn = newEntry.getDN();
     try
     {
-      oldDn = DN.decode(oldEntry.getDN());
+      oldDn = DN.valueOf(oldEntry.getDN());
       for (BackendDescriptor backend : info.getServerDescriptor().getBackends())
       {
         for (BaseDNDescriptor baseDN : backend.getBaseDns())
@@ -362,8 +363,8 @@
   final ArrayList<ModificationItem> originalMods)
   throws CannotRenameException, NamingException
   {
-    RDN oldRDN = oldDN.getRDN();
-    RDN newRDN = newEntry.getDN().getRDN();
+    RDN oldRDN = oldDN.rdn();
+    RDN newRDN = newEntry.getDN().rdn();
 
     boolean rdnTypeChanged =
     newRDN.getNumValues() != oldRDN.getNumValues();
@@ -521,7 +522,7 @@
 
       boolean isAttributeInNewRdn = false;
       AttributeValue rdnValue = null;
-      RDN rdn = newEntry.getDN().getRDN();
+      RDN rdn = newEntry.getDN().rdn();
       for (int i=0; i<rdn.getNumValues() && !isAttributeInNewRdn; i++)
       {
         isAttributeInNewRdn =
@@ -546,7 +547,7 @@
       RDN oldRDN = null;
       try
       {
-        oldRDN = DN.decode(oldEntry.getDN()).getRDN();
+        oldRDN = DN.valueOf(oldEntry.getDN()).rdn();
       }
       catch (DirectoryException de)
       {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java
index 3aaf075..b97a53a 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -254,9 +255,9 @@
             boolean isReallyParentNode = false;
             try
             {
-              DN parentDN = DN.decode(parentNode.getDN());
+              DN parentDN = DN.valueOf(parentNode.getDN());
               isReallyParentNode =
-                parentDN.equals(newEntry.getDN().getParent());
+                parentDN.equals(newEntry.getDN().parent());
             }
             catch (Throwable t)
             {
@@ -342,10 +343,10 @@
         (BasicNode)controller.getTreeModel().getChild(root, i);
       try
       {
-        DN nodeDN = DN.decode(node.getDN());
+        DN nodeDN = DN.valueOf(node.getDN());
         if (dn.isDescendantOf(nodeDN))
         {
-          if (dn.getNumComponents() == nodeDN.getNumComponents() + 1)
+          if (dn.size() == nodeDN.size() + 1)
           {
             parentNode = node;
             break;
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
index 445cebf..777730f 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -85,7 +86,7 @@
     this.newPassword = pwd;
     try
     {
-      dn = DN.decode(node.getDN());
+      dn = DN.valueOf(node.getDN());
       for (BackendDescriptor backend : info.getServerDescriptor().getBackends())
       {
         for (BaseDNDescriptor baseDN : backend.getBaseDns())
@@ -269,11 +270,11 @@
   private boolean isBoundAs(DN dn, InitialLdapContext ctx)
   {
     boolean isBoundAs = false;
-    DN bindDN = DN.nullDN();
+    DN bindDN = DN.rootDN();
     try
     {
       String b = ConnectionUtils.getBindDN(ctx);
-      bindDN = DN.decode(b);
+      bindDN = DN.valueOf(b);
       isBoundAs = dn.equals(bindDN);
     }
     catch (Throwable t)
@@ -301,7 +302,7 @@
             Set<String> dns = ConnectionUtils.getValues(sr, attrName);
             for (String sDn : dns)
             {
-              if (bindDN.equals(DN.decode(sDn)))
+              if (bindDN.equals(DN.valueOf(sDn)))
               {
                 isBoundAs = true;
                 break;
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/Task.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/Task.java
index ca6bd65..9e52ddd 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/Task.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/Task.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -1092,7 +1092,7 @@
     sb.append("dn: "+oldDN);
     sb.append("<br>");
     sb.append("changetype: moddn<br>");
-    sb.append("newrdn: "+newDN.getRDN()+"<br>");
+    sb.append("newrdn: "+newDN.rdn()+"<br>");
     sb.append("deleteoldrdn: 1");
     sb.append("</b><br><br>");
     getProgressDialog().appendProgressHtml(
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
index b63a4a0..2afc9a7 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -422,7 +422,7 @@
 
             try
             {
-              DN dn = DN.decode(newBaseDn);
+              DN dn = DN.valueOf(newBaseDn);
               newElement = new CategorizedComboBoxElement(
                   Utilities.unescapeUtf8(dn.toString()),
                   CategorizedComboBoxElement.Type.REGULAR);
@@ -697,7 +697,7 @@
       {
         try
         {
-          theDN = DN.decode(s);
+          theDN = DN.valueOf(s);
         }
         catch (Throwable t)
         {
@@ -799,7 +799,7 @@
     try
     {
       return theDN.equals(
-          DN.decode(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT));
+          DN.valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT));
     }
     catch (Throwable t)
     {
@@ -918,7 +918,7 @@
         {
           try
           {
-            theDN = DN.decode(s);
+            theDN = DN.valueOf(s);
           }
           catch (Throwable t)
           {
@@ -1477,7 +1477,7 @@
             {
               try
               {
-                theDN = DN.decode(s);
+                theDN = DN.valueOf(s);
               }
               catch (Throwable t)
               {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractVLVIndexPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractVLVIndexPanel.java
index 5bb0914..ba0a2e2 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractVLVIndexPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractVLVIndexPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 
@@ -792,7 +793,7 @@
     {
       try
       {
-        DN.decode(baseDN);
+        DN.valueOf(baseDN);
       }
       catch (OpenDsException oe)
       {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AddToGroupPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AddToGroupPanel.java
index 4031eff..6d16664 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AddToGroupPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AddToGroupPanel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -383,7 +383,7 @@
       {
         try
         {
-          DN.decode(groupDn);
+          DN.valueOf(groupDn);
           if (!entryExists(groupDn))
           {
             errors.add(
@@ -444,7 +444,7 @@
           groupDn = groupDn.trim();
           if (groupDn.length() > 0)
           {
-            groupDns.add(DN.decode(groupDn));
+            groupDns.add(DN.valueOf(groupDn));
           }
         }
       }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BaseDNPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BaseDNPanel.java
index 59b6ef5..ae446ba 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BaseDNPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BaseDNPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -134,7 +135,7 @@
     {
       try
       {
-        DN.decode(dn.getText());
+        DN.valueOf(dn.getText());
       }
       catch (OpenDsException ode)
       {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java
index dcf5019..05ddcbf 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -1144,7 +1144,7 @@
         BasicNode node = (BasicNode)path.getLastPathComponent();
         try
         {
-          dns.add(DN.decode(node.getDN()));
+          dns.add(DN.valueOf(node.getDN()));
         }
         catch (OpenDsException ode)
         {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
index 4701123..5491b5b 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -141,16 +141,16 @@
     String aRdn;
     try
     {
-      DN nodeDN = DN.decode(node.getDN());
-      if (nodeDN.isNullDN())
+      DN nodeDN = DN.valueOf(node.getDN());
+      if (nodeDN.isRootDN())
       {
         aParentDN = nodeDN;
         aRdn = "(1)";
       }
       else
       {
-        aParentDN = nodeDN.getParent();
-        aRdn = nodeDN.getRDN().getAttributeValue(0).toString()+"-1";
+        aParentDN = nodeDN.parent();
+        aRdn = nodeDN.rdn().getAttributeValue(0).toString()+"-1";
       }
     }
     catch (DirectoryException de)
@@ -431,8 +431,8 @@
         String newValue = null;
         try
         {
-          DN theDN = DN.decode(dn);
-          newValue = theDN.getRDN().getAttributeValue(0).toString();
+          DN theDN = DN.valueOf(dn);
+          newValue = theDN.rdn().getAttributeValue(0).toString();
         }
         catch (DirectoryException de)
         {
@@ -449,8 +449,8 @@
           String oldValue = null;
           try
           {
-            DN oldDN = DN.decode(entryToDuplicate.getDN());
-            oldValue = oldDN.getRDN().getAttributeValue(0).toString();
+            DN oldDN = DN.valueOf(entryToDuplicate.getDN());
+            oldValue = oldDN.rdn().getAttributeValue(0).toString();
           }
           catch (DirectoryException de)
           {
@@ -533,8 +533,8 @@
           entryToDuplicate = sr;
           try
           {
-            DN dn = DN.decode(sr.getDN());
-            rdnAttribute = dn.getRDN().getAttributeType(0).getNameOrOID();
+            DN dn = DN.valueOf(sr.getDN());
+            rdnAttribute = dn.rdn().getAttributeType(0).getNameOrOID();
 
             updateDNValue();
             Boolean hasPassword = !sr.getAttributeValues(
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/InclusionExclusionPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/InclusionExclusionPanel.java
index ac91dae..286b854 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/InclusionExclusionPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/InclusionExclusionPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -486,7 +487,7 @@
             {
               try
               {
-                DN dn = DN.decode(dnArray[i]);
+                DN dn = DN.valueOf(dnArray[i]);
                 if (dn.isDescendantOf(baseDN.getDn()))
                 {
                   found = true;
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java
index 7ea4f1a..c23eefe 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -619,7 +620,7 @@
           getInfo().stopPooling();
           if (getInfo().mustDeregisterConfig())
           {
-            DirectoryServer.deregisterBaseDN(DN.decode("cn=config"));
+            DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config"));
           }
           DirectoryServer.getInstance().initializeConfiguration(
               org.opends.server.extensions.ConfigFileHandler.class.getName(),
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntryPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntryPanel.java
index f137a10..986fac7 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntryPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntryPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -469,16 +470,16 @@
     try
     {
       parentReadOnly = new DN[] {
-        DN.decode(ConfigConstants.DN_TASK_ROOT),
-        DN.decode(ConfigConstants.DN_MONITOR_ROOT),
-        DN.decode(ConfigConstants.DN_BACKUP_ROOT),
-        DN.decode(Constants.REPLICATION_CHANGES_DN),
-        DN.decode(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT)
+        DN.valueOf(ConfigConstants.DN_TASK_ROOT),
+        DN.valueOf(ConfigConstants.DN_MONITOR_ROOT),
+        DN.valueOf(ConfigConstants.DN_BACKUP_ROOT),
+        DN.valueOf(Constants.REPLICATION_CHANGES_DN),
+        DN.valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT)
       };
       nonDeletable = new DN[] {
-          DN.decode(ConfigConstants.DN_CONFIG_ROOT),
-          DN.decode(ConfigConstants.DN_DEFAULT_SCHEMA_ROOT),
-          DN.decode(ConfigConstants.DN_TRUST_STORE_ROOT)
+          DN.valueOf(ConfigConstants.DN_CONFIG_ROOT),
+          DN.valueOf(ConfigConstants.DN_DEFAULT_SCHEMA_ROOT),
+          DN.valueOf(ConfigConstants.DN_TRUST_STORE_ROOT)
       };
     }
     catch (Throwable t)
@@ -499,7 +500,7 @@
     boolean isReadOnly = false;
     try
     {
-      DN dn = DN.decode(sDn);
+      DN dn = DN.valueOf(sDn);
       for (DN parentDN : parentReadOnly)
       {
         if (dn.isDescendantOf(parentDN))
@@ -532,7 +533,7 @@
     boolean canDelete = true;
     try
     {
-      DN dn = DN.decode(sDn);
+      DN dn = DN.valueOf(sDn);
       for (DN parentDN : parentReadOnly)
       {
         if (dn.isDescendantOf(parentDN))
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java
index 194a963..b42971e 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -686,7 +687,7 @@
    */
   public static Entry getEntry(CustomSearchResult csr) throws OpenDsException
   {
-    DN dn = DN.decode(csr.getDN());
+    DN dn = DN.valueOf(csr.getDN());
     Map<ObjectClass,String> objectClasses = new HashMap<ObjectClass,String>();
     Map<AttributeType,List<Attribute>> userAttributes =
       new HashMap<AttributeType,List<Attribute>>();
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
index d258d7d..92c3eea 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -539,7 +539,7 @@
     {
       try
       {
-        DN theDN = DN.decode(dn);
+        DN theDN = DN.valueOf(dn);
         // Check that the DN is not defined.
         boolean baseDNAlreadyDefined = false;
         for (BackendDescriptor backend : backendObjects)
@@ -861,7 +861,7 @@
           getInfo().stopPooling();
           if (getInfo().mustDeregisterConfig())
           {
-            DirectoryServer.deregisterBaseDN(DN.decode("cn=config"));
+            DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config"));
           }
           DirectoryServer.getInstance().initializeConfiguration(
                 org.opends.server.extensions.ConfigFileHandler.class.getName(),
@@ -1173,7 +1173,7 @@
           backendName, null);
       backend.setEnabled(true);
       Set<DN> baseDNs = new HashSet<DN>();
-      baseDNs.add(DN.decode(baseDN));
+      baseDNs.add(DN.valueOf(baseDN));
       backend.setBaseDN(baseDNs);
       backend.setBackendId(backendName);
       backend.setWritabilityMode(BackendCfgDefn.WritabilityMode.ENABLED);
@@ -1499,12 +1499,12 @@
           break;
         }
       }
-      baseDNs.add(DN.decode(baseDN));
+      baseDNs.add(DN.valueOf(baseDN));
 
       String dn = Utilities.getRDNString("ds-cfg-backend-id", backendName)+
       ",cn=Backends,cn=config";
       ConfigEntry configEntry =
-        DirectoryServer.getConfigHandler().getConfigEntry(DN.decode(dn));
+        DirectoryServer.getConfigHandler().getConfigEntry(DN.valueOf(dn));
 
       DNConfigAttribute baseDNAttr =
         new DNConfigAttribute(
@@ -1525,7 +1525,7 @@
         (LocalDBBackendCfgClient)root.getBackend(backendName);
 
       Set<DN> baseDNs = backend.getBaseDN();
-      DN dn = DN.decode(baseDN);
+      DN dn = DN.valueOf(baseDN);
       baseDNs.add(dn);
       backend.setBaseDN(baseDNs);
       backend.commit();
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewGroupPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewGroupPanel.java
index 83aa482..b33e570 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewGroupPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewGroupPanel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -225,7 +225,7 @@
         {
           try
           {
-            DN.decode(member);
+            DN.valueOf(member);
             if (!entryExists(member))
             {
               errorFound = true;
@@ -294,7 +294,7 @@
       String ref = referenceGroup.getText().trim();
       try
       {
-        DN.decode(ref);
+        DN.valueOf(ref);
         if (!entryExists(ref))
         {
           errorFound = true;
@@ -760,7 +760,7 @@
         {
           try
           {
-            dns.add(DN.decode(member));
+            dns.add(DN.valueOf(member));
           }
           catch (OpenDsException ode)
           {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java
index 156a434..72c922f 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -478,7 +479,7 @@
           getInfo().stopPooling();
           if (getInfo().mustDeregisterConfig())
           {
-            DirectoryServer.deregisterBaseDN(DN.decode("cn=config"));
+            DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config"));
           }
           DirectoryServer.getInstance().initializeConfiguration(
               org.opends.server.extensions.ConfigFileHandler.class.getName(),
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java
index d58f696..a450f8d 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -271,7 +272,7 @@
           getInfo().stopPooling();
           if (getInfo().mustDeregisterConfig())
           {
-            DirectoryServer.deregisterBaseDN(DN.decode("cn=config"));
+            DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config"));
           }
           DirectoryServer.getInstance().initializeConfiguration(
               org.opends.server.extensions.ConfigFileHandler.class.getName(),
@@ -350,7 +351,7 @@
           backendName.getText())+",cn=Backends,cn=config";
         boolean topEntryExists =
           DirectoryServer.getConfigHandler().entryExists(
-              DN.decode(topEntryDN));
+              DN.valueOf(topEntryDN));
 
         if (!topEntryExists)
         {
@@ -405,7 +406,7 @@
 
       index.setFilter(filter.getText().trim());
       index.setSortOrder(getSortOrderStringValue(getSortOrder()));
-      index.setBaseDN(DN.decode(getBaseDN()));
+      index.setBaseDN(DN.valueOf(getBaseDN()));
       index.setScope(getScope());
       index.setMaxBlockSize(Integer.parseInt(maxBlockSize.getText().trim()));
       index.commit();
@@ -459,7 +460,7 @@
           if (backend.getBackendID().equalsIgnoreCase(backendID))
           {
             newIndex = new VLVIndexDescriptor(
-                indexName, backend, DN.decode(baseDN),
+                indexName, backend, DN.valueOf(baseDN),
                 scope, filterValue, sortOrder, maxBlock);
             getInfo().registerModifiedIndex(newIndex);
             notifyConfigurationElementCreated(newIndex);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
index d874034..2931716 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -1329,7 +1329,7 @@
 
     try
     {
-      DN.decode(getDisplayedDN());
+      DN.valueOf(getDisplayedDN());
     }
     catch (Throwable t)
     {
@@ -1611,10 +1611,10 @@
     StringBuilder sb = new StringBuilder();
     try
     {
-      DN oldDN = DN.decode(searchResult.getDN());
-      if (oldDN.getNumComponents() > 0)
+      DN oldDN = DN.valueOf(searchResult.getDN());
+      if (oldDN.size() > 0)
       {
-        RDN rdn = oldDN.getRDN();
+        RDN rdn = oldDN.rdn();
         List<AttributeType> attributeTypes = new ArrayList<AttributeType>();
         List<String> attributeNames = new ArrayList<String>();
         List<AttributeValue> attributeValues = new ArrayList<AttributeValue>();
@@ -1694,7 +1694,7 @@
             }
           }
         }
-        DN parent = oldDN.getParent();
+        DN parent = oldDN.parent();
         if (attributeTypes.size() > 0)
         {
           DN newDN;
@@ -1706,7 +1706,7 @@
           }
           else
           {
-            newDN = parent.concat(newRDN);
+            newDN = parent.child(newRDN);
           }
           sb.append(newDN.toString());
         }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java
index a78bbcb..327df66 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -297,10 +298,10 @@
     StringBuilder sb = new StringBuilder();
     try
     {
-      DN oldDN = DN.decode(searchResult.getDN());
-      if (oldDN.getNumComponents() > 0)
+      DN oldDN = DN.valueOf(searchResult.getDN());
+      if (oldDN.size() > 0)
       {
-        RDN rdn = oldDN.getRDN();
+        RDN rdn = oldDN.rdn();
         List<AttributeType> attributeTypes = new ArrayList<AttributeType>();
         List<String> attributeNames = new ArrayList<String>();
         List<AttributeValue> attributeValues = new ArrayList<AttributeValue>();
@@ -379,7 +380,7 @@
             }
           }
         }
-        DN parent = oldDN.getParent();
+        DN parent = oldDN.parent();
         if (attributeTypes.size() > 0)
         {
           DN newDN;
@@ -391,7 +392,7 @@
           }
           else
           {
-            newDN = parent.concat(newRDN);
+            newDN = parent.child(newRDN);
           }
           sb.append(newDN.toString());
         }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java
index 3e05a08..1cad8e1 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -588,7 +588,7 @@
   {
     try
     {
-      return !index.getBaseDN().equals(DN.decode(getBaseDN())) ||
+      return !index.getBaseDN().equals(DN.valueOf(getBaseDN())) ||
       (getScope() != index.getScope()) ||
       !filter.getText().trim().equals(index.getFilter()) ||
       !getSortOrder().equals(index.getSortOrder()) ||
@@ -704,7 +704,7 @@
           getInfo().stopPooling();
           if (getInfo().mustDeregisterConfig())
           {
-            DirectoryServer.deregisterBaseDN(DN.decode("cn=config"));
+            DirectoryServer.deregisterBaseDN(DN.valueOf("cn=config"));
           }
           DirectoryServer.getInstance().initializeConfiguration(
               org.opends.server.extensions.ConfigFileHandler.class.getName(),
@@ -822,7 +822,7 @@
       LocalDBBackendCfgClient backend =
         (LocalDBBackendCfgClient)root.getBackend(backendID);
       LocalDBVLVIndexCfgClient index = backend.getLocalDBVLVIndex(indexName);
-      DN b = DN.decode(baseDN);
+      DN b = DN.valueOf(baseDN);
       if (!indexToModify.getBaseDN().equals(b))
       {
         index.setBaseDN(b);
@@ -882,7 +882,7 @@
       {
         updateConfiguration();
         modifiedIndex = new VLVIndexDescriptor(
-            indexName, indexToModify.getBackend(), DN.decode(baseDN),
+            indexName, indexToModify.getBackend(), DN.valueOf(baseDN),
             scope, filterValue, sortOrder, maxBlock);
         getInfo().registerModifiedIndex(modifiedIndex);
         state = State.FINISHED_SUCCESSFULLY;
@@ -918,7 +918,7 @@
 
       try
       {
-        DN b = DN.decode(baseDN);
+        DN b = DN.valueOf(baseDN);
         if (!indexToModify.getBaseDN().equals(b))
         {
           args.add("--set");
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
index 228a903..7339fe9 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -342,7 +342,7 @@
   protected void addValuesInRDN(Entry entry)
   {
 //  Add the values in the RDN if  they are not there
-    RDN rdn = entry.getDN().getRDN();
+    RDN rdn = entry.getDN().rdn();
     for (int i=0; i<rdn.getNumValues(); i++)
     {
       String attrName = rdn.getAttributeName(i);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/nodes/BasicNode.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/nodes/BasicNode.java
index 41820d2..56d0fa9 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/nodes/BasicNode.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/nodes/BasicNode.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.nodes;
@@ -409,9 +410,9 @@
     {
       try
       {
-        DN dnObj = DN.decode(dn);
-        if (dnObj.getNumComponents() >= 1) {
-          RDN rdn = dnObj.getRDN();
+        DN dnObj = DN.valueOf(dn);
+        if (dnObj.size() >= 1) {
+          RDN rdn = dnObj.rdn();
           if (showAttributeName)
           {
             result = rdn.toString();
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
index cf1f15e..d0f38aa 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2011 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock, AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.guitools.controlpanel.util;
@@ -102,37 +102,37 @@
   /**
    * The monitor root entry DN.
    */
-  protected DN monitorDN = DN.nullDN();
+  protected DN monitorDN = DN.rootDN();
   /**
    * The JVM memory usage monitoring entry DN.
    */
-  protected DN jvmMemoryUsageDN = DN.nullDN();
+  protected DN jvmMemoryUsageDN = DN.rootDN();
   /**
    * The system information monitoring entry DN.
    */
-  protected DN systemInformationDN = DN.nullDN();
+  protected DN systemInformationDN = DN.rootDN();
   /**
    * The entry cache monitoring entry DN.
    */
-  protected DN entryCachesDN = DN.nullDN();
+  protected DN entryCachesDN = DN.rootDN();
   /**
    * The work queue monitoring entry DN.
    */
-  protected DN workQueueDN = DN.nullDN();
+  protected DN workQueueDN = DN.rootDN();
   /**
    * The version monitoring entry DN.
    */
-  protected DN versionDN = DN.nullDN();
+  protected DN versionDN = DN.rootDN();
 
   {
     try
     {
-      monitorDN = DN.decode("cn=monitor");
-      jvmMemoryUsageDN = DN.decode("cn=JVM Memory Usage,cn=monitor");
-      systemInformationDN = DN.decode("cn=System Information,cn=monitor");
-      entryCachesDN = DN.decode("cn=Entry Caches,cn=monitor");
-      workQueueDN = DN.decode("cn=Work Queue,cn=monitor");
-      versionDN = DN.decode("cn=Version,cn=monitor");
+      monitorDN = DN.valueOf("cn=monitor");
+      jvmMemoryUsageDN = DN.valueOf("cn=JVM Memory Usage,cn=monitor");
+      systemInformationDN = DN.valueOf("cn=System Information,cn=monitor");
+      entryCachesDN = DN.valueOf("cn=Entry Caches,cn=monitor");
+      workQueueDN = DN.valueOf("cn=Work Queue,cn=monitor");
+      versionDN = DN.valueOf("cn=Version,cn=monitor");
     }
     catch (Throwable t)
     {
@@ -631,7 +631,7 @@
         {
           try
           {
-            if (baseDN.getDn().equals(DN.decode(dn)) &&
+            if (baseDN.getDn().equals(DN.valueOf(dn)) &&
                 String.valueOf(baseDN.getReplicaID()).equals(replicaId))
             {
               try
@@ -1007,45 +1007,45 @@
   private boolean isRootMonitor(CustomSearchResult csr)
   throws OpenDsException
   {
-    return monitorDN.equals(DN.decode(csr.getDN()));
+    return monitorDN.equals(DN.valueOf(csr.getDN()));
   }
 
   private boolean isVersionMonitor(CustomSearchResult csr)
   throws OpenDsException
   {
-    return versionDN.equals(DN.decode(csr.getDN()));
+    return versionDN.equals(DN.valueOf(csr.getDN()));
   }
 
   private boolean isSystemInformation(CustomSearchResult csr)
   throws OpenDsException
   {
-    return systemInformationDN.equals(DN.decode(csr.getDN()));
+    return systemInformationDN.equals(DN.valueOf(csr.getDN()));
   }
 
   private boolean isJvmMemoryUsage(CustomSearchResult csr)
   throws OpenDsException
   {
-    return jvmMemoryUsageDN.equals(DN.decode(csr.getDN()));
+    return jvmMemoryUsageDN.equals(DN.valueOf(csr.getDN()));
   }
 
   private boolean isWorkQueue(CustomSearchResult csr)
   throws OpenDsException
   {
-    return workQueueDN.equals(DN.decode(csr.getDN()));
+    return workQueueDN.equals(DN.valueOf(csr.getDN()));
   }
 
   private boolean isEntryCaches(CustomSearchResult csr)
   throws OpenDsException
   {
-    return entryCachesDN.equals(DN.decode(csr.getDN()));
+    return entryCachesDN.equals(DN.valueOf(csr.getDN()));
   }
 
   private boolean isConnectionHandler(CustomSearchResult csr)
   throws OpenDsException
   {
     boolean isConnectionHandler = false;
-    DN dn = DN.decode(csr.getDN());
-    DN parent = dn.getParent();
+    DN dn = DN.valueOf(csr.getDN());
+    DN parent = dn.parent();
     if ((parent != null) && parent.equals(monitorDN))
     {
       List<?> vs = csr.getAttributeValues("cn");
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/NumSubordinateHacker.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/NumSubordinateHacker.java
index 45192c3..bf68f70 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/NumSubordinateHacker.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/NumSubordinateHacker.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.util;
@@ -73,7 +74,7 @@
         {
           try
           {
-            if (dn.equals(DN.decode(parentUrl.getRawBaseDN())))
+            if (dn.equals(DN.valueOf(parentUrl.getRawBaseDN())))
             {
               containsChildren = true;
               break;
@@ -110,7 +111,7 @@
         {
           try
           {
-            if (dn.equals(DN.decode(url.getRawBaseDN())))
+            if (dn.equals(DN.valueOf(url.getRawBaseDN())))
             {
               contains = true;
               break;
@@ -147,7 +148,7 @@
       unreliableEntryList.clear();
 
       for (DN subSuffixDN : subSuffixes) {
-        unreliableEntryList.add(subSuffixDN.getParent());
+        unreliableEntryList.add(subSuffixDN.parent());
       }
       isUnreliableEntryListEmpty = unreliableEntryList.isEmpty();
     }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ReadOnlyConfigFileHandler.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ReadOnlyConfigFileHandler.java
index 3981564..a372ea7 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ReadOnlyConfigFileHandler.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ReadOnlyConfigFileHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.util;
@@ -186,7 +187,7 @@
           if (entry != null)
           {
             DN entryDN = entry.getDN();
-            DN parentDN = entryDN.getParent();
+            DN parentDN = entryDN.parent();
             ConfigEntry parentEntry = null;
             if (parentDN != null)
             {
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java
index 572f2ff..0ae0c2c 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.installer;
@@ -285,7 +285,7 @@
 
       LDIFWriter writer = new LDIFWriter(exportConfig);
 
-      DN dn = DN.decode(baseDn);
+      DN dn = DN.valueOf(baseDn);
       Entry entry = StaticUtils.createEntry(dn);
 
       writer.writeEntry(entry);
@@ -352,7 +352,7 @@
       String dn = Utilities.getRDNString("ds-cfg-backend-id",
           backendName)+",cn=Backends,cn=config";
       Utilities.deleteConfigSubtree(
-          DirectoryServer.getConfigHandler(), DN.decode(dn));
+          DirectoryServer.getConfigHandler(), DN.valueOf(dn));
     }
     catch (OpenDsException ode)
     {
@@ -388,7 +388,7 @@
       Set<DN> setBaseDNs = new HashSet<DN>();
       for (String baseDN : baseDNs)
       {
-        setBaseDNs.add(DN.decode(baseDN));
+        setBaseDNs.add(DN.valueOf(baseDN));
       }
       backend.setBaseDN(setBaseDNs);
       backend.setBackendId(backendName);
@@ -429,7 +429,7 @@
       Set<DN> setBaseDNs = new HashSet<DN>();
       for (String baseDN : baseDNs)
       {
-        setBaseDNs.add(DN.decode(baseDN));
+        setBaseDNs.add(DN.valueOf(baseDN));
       }
       backend.setBaseDN(setBaseDNs);
       backend.commit();
@@ -621,7 +621,7 @@
               ReplicationDomainCfgDefn.getInstance(), domainName,
               new ArrayList<DefaultBehaviorException>());
           domain.setServerId(domainId);
-          domain.setBaseDN(DN.decode(dn));
+          domain.setBaseDN(DN.valueOf(dn));
           isCreated = true;
         }
         else
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/DNPropertyDefinition.java b/opendj3-server-dev/src/server/org/opends/server/admin/DNPropertyDefinition.java
index 0b1f88e..891d388 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/DNPropertyDefinition.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/DNPropertyDefinition.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
@@ -85,7 +86,7 @@
         setBaseDN((DN) null);
       } else {
         try {
-          setBaseDN(DN.decode(baseDN));
+          setBaseDN(DN.valueOf(baseDN));
         } catch (DirectoryException e) {
           throw new IllegalArgumentException(e);
         }
@@ -174,10 +175,10 @@
     ensureNotNull(value);
 
     if (baseDN != null) {
-      DN parent = value.getParent();
+      DN parent = value.parent();
 
       if (parent == null) {
-        parent = DN.nullDN();
+        parent = DN.rootDN();
       }
 
       if (!parent.equals(baseDN)) {
@@ -197,7 +198,7 @@
     ensureNotNull(value);
 
     try {
-      DN dn = DN.decode(value);
+      DN dn = DN.valueOf(value);
       validateValue(dn);
       return dn;
     } catch (DirectoryException e) {
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/ManagedObjectPath.java b/opendj3-server-dev/src/server/org/opends/server/admin/ManagedObjectPath.java
index 8e70dd2..fec2d05 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/ManagedObjectPath.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/ManagedObjectPath.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
@@ -137,7 +137,7 @@
 
     // Create a new DN builder.
     private DNSerializer() {
-      this.dn = DN.nullDN();
+      this.dn = DN.rootDN();
       this.profile = LDAPProfile.getInstance();
     }
 
@@ -158,7 +158,7 @@
       AttributeType atype = DirectoryServer.getAttributeType(
           type.toLowerCase(), true);
       AttributeValue avalue = AttributeValues.create(atype, name);
-      dn = dn.concat(RDN.create(atype, avalue));
+      dn = dn.child(RDN.create(atype, avalue));
     }
 
 
@@ -178,7 +178,7 @@
       AttributeType atype = DirectoryServer.getAttributeType(
           type.toLowerCase(), true);
       AttributeValue avalue = AttributeValues.create(atype, d.getName());
-      dn = dn.concat(RDN.create(atype, avalue));
+      dn = dn.child(RDN.create(atype, avalue));
     }
 
 
@@ -213,8 +213,8 @@
     private void appendManagedObjectPathElement(RelationDefinition<?, ?> r) {
       // Add the RDN sequence representing the relation.
       try {
-        DN localName = DN.decode(profile.getRelationRDNSequence(r));
-        dn = dn.concat(localName);
+        DN localName = DN.valueOf(profile.getRelationRDNSequence(r));
+        dn = dn.child(localName);
       } catch (DirectoryException e) {
         throw new RuntimeException(e);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/Reference.java b/opendj3-server-dev/src/server/org/opends/server/admin/Reference.java
index 6fa21d3..f7aeb0e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/Reference.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/Reference.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin;
 
@@ -85,13 +86,13 @@
 
     DN dn;
     try {
-      dn = DN.decode(s);
+      dn = DN.valueOf(s);
     } catch (DirectoryException e) {
       throw new IllegalArgumentException("Unabled to decode the DN string: \""
           + s + "\"");
     }
 
-    RDN rdn = dn.getRDN();
+    RDN rdn = dn.rdn();
     if (rdn == null) {
       throw new IllegalArgumentException("Unabled to decode the DN string: \""
           + s + "\"");
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java
index 243e24b..85d2f20 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -214,7 +215,7 @@
   public boolean configAddIsAcceptable(ConfigEntry configEntry,
       MessageBuilder unacceptableReason) {
     DN dn = configEntry.getDN();
-    AttributeValue av = dn.getRDN().getAttributeValue(0);
+    AttributeValue av = dn.rdn().getAttributeValue(0);
     String name = av.getValue().toString().trim();
 
     try {
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java
index 8fb0f38..7bcaa36 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -316,9 +317,9 @@
 
     };
 
-    DN parent = dn.getParent();
+    DN parent = dn.parent();
     if (parent != null) {
-      ConfigEntry configEntry = getConfigEntry(dn.getParent());
+      ConfigEntry configEntry = getConfigEntry(dn.parent());
       if (configEntry != null) {
         configEntry.registerDeleteListener(cleanerListener);
       }
@@ -439,7 +440,7 @@
 
     // Now remove the cleaner listener as it will no longer be
     // needed.
-    ConfigEntry parentConfigEntry = getConfigEntry(dn.getParent());
+    ConfigEntry parentConfigEntry = getConfigEntry(dn.parent());
     if (parentConfigEntry != null) {
       parentConfigEntry.deregisterDeleteListener(cleanerListener);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java
index 81f7037..99f5d3d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -215,7 +216,7 @@
   public boolean configDeleteIsAcceptable(ConfigEntry configEntry,
       MessageBuilder unacceptableReason) {
     DN dn = configEntry.getDN();
-    AttributeValue av = dn.getRDN().getAttributeValue(0);
+    AttributeValue av = dn.rdn().getAttributeValue(0);
     String name = av.getValue().toString().trim();
 
     try {
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/DNBuilder.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/DNBuilder.java
index 8da8340..6eb97eb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/DNBuilder.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/DNBuilder.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.server;
@@ -73,8 +74,8 @@
 
     try {
       LDAPProfile profile = LDAPProfile.getInstance();
-      DN localName = DN.decode(profile.getRelationRDNSequence(relation));
-      return dn.concat(localName);
+      DN localName = DN.valueOf(profile.getRelationRDNSequence(relation));
+      return dn.child(localName);
     } catch (DirectoryException e) {
       throw new RuntimeException(e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/DelayedConfigAddListener.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/DelayedConfigAddListener.java
index 6f08890..11df7dc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/DelayedConfigAddListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/DelayedConfigAddListener.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -85,7 +86,7 @@
    *          when it is added.
    */
   public DelayedConfigAddListener(DN child, ConfigAddListener addListener) {
-    this.parent = child.getParent();
+    this.parent = child.parent();
     this.child = child;
     this.delayedAddListener = addListener;
     this.delayedDeleteListener = null;
@@ -106,7 +107,7 @@
    */
   public DelayedConfigAddListener(DN child,
       ConfigDeleteListener deleteListener) {
-    this.parent = child.getParent();
+    this.parent = child.parent();
     this.child = child;
     this.delayedAddListener = null;
     this.delayedDeleteListener = deleteListener;
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObject.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObject.java
index b22fbc0..4490d1c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObject.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObject.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.server;
@@ -190,7 +191,7 @@
       throws IllegalArgumentException {
     validateRelationDefinition(d);
 
-    DN baseDN = DNBuilder.create(path, d).getParent();
+    DN baseDN = DNBuilder.create(path, d).parent();
     deregisterAddListener(baseDN, listener);
   }
 
@@ -215,7 +216,7 @@
       throws IllegalArgumentException {
     validateRelationDefinition(d);
 
-    DN baseDN = DNBuilder.create(path, d).getParent();
+    DN baseDN = DNBuilder.create(path, d).parent();
     deregisterAddListener(baseDN, listener);
   }
 
@@ -387,7 +388,7 @@
       ConfigurationDeleteListener<M> listener) throws IllegalArgumentException {
     validateRelationDefinition(d);
 
-    DN baseDN = DNBuilder.create(path, d).getParent();
+    DN baseDN = DNBuilder.create(path, d).parent();
     deregisterDeleteListener(baseDN, listener);
   }
 
@@ -412,7 +413,7 @@
       throws IllegalArgumentException {
     validateRelationDefinition(d);
 
-    DN baseDN = DNBuilder.create(path, d).getParent();
+    DN baseDN = DNBuilder.create(path, d).parent();
     deregisterDeleteListener(baseDN, listener);
   }
 
@@ -599,7 +600,7 @@
     if (configEntry != null) {
       return configEntry.getDN();
     } else {
-      return DN.nullDN();
+      return DN.rootDN();
     }
   }
 
@@ -850,7 +851,7 @@
       ServerManagedObjectAddListener<M> listener)
       throws IllegalArgumentException, ConfigException {
     validateRelationDefinition(d);
-    DN baseDN = DNBuilder.create(path, d).getParent();
+    DN baseDN = DNBuilder.create(path, d).parent();
     ConfigAddListener adaptor = new ConfigAddListenerAdaptor<M>(path, d,
         listener);
     registerAddListener(baseDN, adaptor);
@@ -1071,7 +1072,7 @@
       ServerManagedObjectDeleteListener<M> listener)
       throws IllegalArgumentException, ConfigException {
     validateRelationDefinition(d);
-    DN baseDN = DNBuilder.create(path, d).getParent();
+    DN baseDN = DNBuilder.create(path, d).parent();
     ConfigDeleteListener adaptor = new ConfigDeleteListenerAdaptor<M>(path, d,
         listener);
     registerDeleteListener(baseDN, adaptor);
@@ -1396,13 +1397,13 @@
   // entry to the provided base DN.
   private void registerDelayedListener(DN baseDN,
       ConfigAddListener delayedListener) throws ConfigException {
-    DN parentDN = baseDN.getParent();
+    DN parentDN = baseDN.parent();
     while (parentDN != null) {
       ConfigEntry relationEntry = getListenerConfigEntry(parentDN);
       if (relationEntry == null) {
         delayedListener = new DelayedConfigAddListener(parentDN,
             delayedListener);
-        parentDN = parentDN.getParent();
+        parentDN = parentDN.parent();
       } else {
         relationEntry.registerAddListener(delayedListener);
         return;
@@ -1419,12 +1420,12 @@
   // entry to the provided base DN.
   private <M extends Configuration> void deregisterDelayedAddListener(DN baseDN,
       ConfigurationAddListener<M> listener) throws ConfigException {
-    DN parentDN = baseDN.getParent();
+    DN parentDN = baseDN.parent();
     int delayWrappers = 0;
     while (parentDN != null) {
       ConfigEntry relationEntry = getListenerConfigEntry(parentDN);
       if (relationEntry == null) {
-        parentDN = parentDN.getParent();
+        parentDN = parentDN.parent();
         delayWrappers++;
       } else {
         for (ConfigAddListener l : relationEntry.getAddListeners()) {
@@ -1486,12 +1487,12 @@
   private <M extends Configuration> void deregisterDelayedDeleteListener(
       DN baseDN, ConfigurationDeleteListener<M> listener)
       throws ConfigException {
-    DN parentDN = baseDN.getParent();
+    DN parentDN = baseDN.parent();
     int delayWrappers = 0;
     while (parentDN != null) {
       ConfigEntry relationEntry = getListenerConfigEntry(parentDN);
       if (relationEntry == null) {
-        parentDN = parentDN.getParent();
+        parentDN = parentDN.parent();
         delayWrappers++;
       } else {
         for (ConfigAddListener l : relationEntry.getAddListeners()) {
@@ -1551,12 +1552,12 @@
   // entry to the provided base DN.
   private <M extends Configuration> void deregisterDelayedAddListener(DN baseDN,
       ServerManagedObjectAddListener<M> listener) throws ConfigException {
-    DN parentDN = baseDN.getParent();
+    DN parentDN = baseDN.parent();
     int delayWrappers = 0;
     while (parentDN != null) {
       ConfigEntry relationEntry = getListenerConfigEntry(parentDN);
       if (relationEntry == null) {
-        parentDN = parentDN.getParent();
+        parentDN = parentDN.parent();
         delayWrappers++;
       } else {
         for (ConfigAddListener l : relationEntry.getAddListeners()) {
@@ -1612,12 +1613,12 @@
   private <M extends Configuration> void deregisterDelayedDeleteListener(
       DN baseDN, ServerManagedObjectDeleteListener<M> listener)
       throws ConfigException {
-    DN parentDN = baseDN.getParent();
+    DN parentDN = baseDN.parent();
     int delayWrappers = 0;
     while (parentDN != null) {
       ConfigEntry relationEntry = getListenerConfigEntry(parentDN);
       if (relationEntry == null) {
-        parentDN = parentDN.getParent();
+        parentDN = parentDN.parent();
         delayWrappers++;
       } else {
         for (ConfigAddListener l : relationEntry.getAddListeners()) {
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagementContext.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagementContext.java
index 58948ed..4d21950 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagementContext.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagementContext.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.server;
@@ -662,7 +663,7 @@
     ArrayList<String> names = new ArrayList<String>(children.size());
     for (DN child : children) {
       // Assume that RDNs are single-valued and can be trimmed.
-      AttributeValue av = child.getRDN().getAttributeValue(0);
+      AttributeValue av = child.rdn().getAttributeValue(0);
       names.add(av.getValue().toString().trim());
     }
 
@@ -714,7 +715,7 @@
     ArrayList<String> names = new ArrayList<String>(children.size());
     for (DN child : children) {
       // Assume that RDNs are single-valued and can be trimmed.
-      AttributeValue av = child.getRDN().getAttributeValue(0);
+      AttributeValue av = child.rdn().getAttributeValue(0);
       names.add(av.toString().trim());
     }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/ClientConnection.java b/opendj3-server-dev/src/server/org/opends/server/api/ClientConnection.java
index b1f9ef2..e2a2786 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/ClientConnection.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/ClientConnection.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.api;
 
@@ -1579,7 +1579,7 @@
       authzDN = operation.getAuthorizationDN();
     }
 
-    if ((authzDN == null) || authzDN.isNullDN())
+    if ((authzDN == null) || authzDN.isRootDN())
     {
       return Collections.<Group<?>>emptySet();
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/DITCacheMap.java b/opendj3-server-dev/src/server/org/opends/server/api/DITCacheMap.java
index 7ee84f0..da33479 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/DITCacheMap.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/DITCacheMap.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.server.api;
@@ -249,9 +249,9 @@
     size++;
 
     // Update parent hierarchy.
-    for (DN parentDN = key.getParent();
+    for (DN parentDN = key.parent();
          parentDN != null;
-         parentDN = parentDN.getParent())
+         parentDN = parentDN.parent())
     {
       final Node<T> parentNode = ditCacheMap.get(parentDN);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciContainer.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciContainer.java
index 7c0986b..5e141f1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciContainer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciContainer.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -667,7 +667,7 @@
         return this.authzid;
       else if (this.authorizationEntry != null)
         return this.authorizationEntry.getDN();
-      return DN.nullDN();
+      return DN.rootDN();
     }
 
    /**
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciEffectiveRights.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciEffectiveRights.java
index 3942109..ba2647c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciEffectiveRights.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciEffectiveRights.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -744,7 +744,7 @@
     }
     //Actually build the string.
     String user=anonymous;
-    if(!evalCtx.getClientDN().isNullDN())
+    if(!evalCtx.getClientDN().isRootDN())
       user=evalCtx.getClientDN().toString();
     String right=evalCtx.rightToString();
     AttributeType aType=evalCtx.getCurrentAttributeType();
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciHandler.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
index 693390d..8a0ff12 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  *      Portions Copyright 2013 Manuel Gaupp
  */
 package org.opends.server.authorization.dseecompat;
@@ -134,7 +134,7 @@
 
     try
     {
-      debugSearchIndexDN = DN.decode("cn=debugsearch");
+      debugSearchIndexDN = DN.valueOf("cn=debugsearch");
     }
     catch (DirectoryException ex)
     {
@@ -409,7 +409,7 @@
       return true;
     }
 
-    final RDN oldRDN = operation.getOriginalEntry().getDN().getRDN();
+    final RDN oldRDN = operation.getOriginalEntry().getDN().rdn();
     final RDN newRDN = operation.getNewRDN();
     final DN newSuperiorDN = operation.getNewSuperior();
 
@@ -627,7 +627,7 @@
       {
         DNString =
             container.getCurrentAttributeValue().getValue().toString();
-        DN tmpDN = DN.decode(DNString);
+        DN tmpDN = DN.valueOf(DNString);
         // Have a valid DN, compare to clientDN to see if the ACI_SELF
         // right should be set.
         if (tmpDN.equals(container.getClientDN()))
@@ -926,7 +926,7 @@
               // modification.
               if (modAttrType.equals(globalAciType))
               {
-                dn = DN.nullDN();
+                dn = DN.rootDN();
               }
               Aci.decode(v.getValue(), dn);
             }
@@ -1266,7 +1266,7 @@
       final SortedSet<Aci> globalAcis = configuration.getGlobalACI();
       if (globalAcis != null)
       {
-        aciList.addAci(DN.nullDN(), globalAcis);
+        aciList.addAci(DN.rootDN(), globalAcis);
         logError(INFO_ACI_ADD_LIST_GLOBAL_ACIS.get(
             Integer.toString(globalAcis.size())));
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciList.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciList.java
index 83a0876..07399e4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciList.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciList.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -95,7 +95,7 @@
         List<Aci> acis = aciList.get(baseDN);
         if (acis != null) {
           //Check if there are global ACIs. Global ACI has a NULL DN.
-          if (baseDN.isNullDN()) {
+          if (baseDN.isRootDN()) {
             for (Aci aci : acis) {
               AciTargets targets = aci.getTargets();
               //If there is a target, evaluate it to see if this ACI should
@@ -110,12 +110,12 @@
             candidates.addAll(acis);
           }
         }
-        if(baseDN.isNullDN()) {
+        if(baseDN.isRootDN()) {
           break;
         }
-        DN parentDN=baseDN.getParent();
+        DN parentDN=baseDN.parent();
         if(parentDN == null) {
-          baseDN=DN.nullDN();
+          baseDN=DN.rootDN();
         } else {
           baseDN=parentDN;
         }
@@ -207,7 +207,7 @@
       //attributes are skipped.
       if(hasGlobalAci && entry.getDN().equals(configDN)) {
           List<Attribute> attributeList = entry.getAttribute(globalAciType);
-          validAcis = addAciAttributeList(aciList, DN.nullDN(), configDN,
+          validAcis = addAciAttributeList(aciList, DN.rootDN(), configDN,
                                           attributeList, failedACIMsgs);
       }
 
@@ -259,7 +259,7 @@
           validAcis++;
         } catch (AciException ex) {
           DN msgDN=dn;
-          if(dn == DN.nullDN()) {
+          if(dn == DN.rootDN()) {
             msgDN=configDN;
           }
           Message message = WARN_ACI_ADD_LIST_FAILED_DECODE.get(
@@ -308,10 +308,10 @@
       //DN is checked to verify it is equal to the config DN. If not those
       //attributes are skipped.
       if(hasGlobalAci && oldEntry.getDN().equals(configDN)) {
-          aciList.remove(DN.nullDN());
+          aciList.remove(DN.rootDN());
           List<Attribute> attributeList =
                   newEntry.getAttribute(globalAciType);
-          addAciAttributeList(aciList, DN.nullDN(), configDN,
+          addAciAttributeList(aciList, DN.rootDN(), configDN,
                               attributeList, failedACIMsgs);
       }
     }
@@ -360,7 +360,7 @@
     try
     {
       if (hasGlobalAci && entryDN.equals(configDN) &&
-          aciList.remove(DN.nullDN()) == null)
+          aciList.remove(DN.rootDN()) == null)
       {
         return false;
       }
@@ -416,8 +416,8 @@
    */
   public void renameAci(DN oldDN, DN newDN ) {
 
-    int oldRDNCount=oldDN.getNumComponents();
-    int newRDNCount=newDN.getNumComponents();
+    int oldRDNCount=oldDN.size();
+    int newRDNCount=newDN.size();
 
     lock.writeLock().lock();
     try
@@ -428,7 +428,7 @@
       while (iterator.hasNext()) {
         Map.Entry<DN,List<Aci>> hashEntry = iterator.next();
         if(hashEntry.getKey().isDescendantOf(oldDN)) {
-          int keyRDNCount=hashEntry.getKey().getNumComponents();
+          int keyRDNCount=hashEntry.getKey().size();
           int keepRDNCount=keyRDNCount - oldRDNCount;
           RDN[] newRDNs = new RDN[keepRDNCount + newRDNCount];
           for (int i=0; i < keepRDNCount; i++) {
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciTargets.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciTargets.java
index 88afe1c..cefcd7c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciTargets.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciTargets.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -604,7 +604,7 @@
              * Sun CR 6535035 has been raised on DSEE:
              * Non-standard interpretation of onelevel in ACI targetScope.
              */
-            if(!targetDN.equals(entryDN.getParent()))
+            if(!targetDN.equals(entryDN.parent()))
                 return false;
             break;
         case WHOLE_SUBTREE:
@@ -612,7 +612,7 @@
                 return false;
             break;
         case SUBORDINATE_SUBTREE:
-            if ((entryDN.getNumComponents() <= targetDN.getNumComponents()) ||
+            if ((entryDN.size() <= targetDN.size()) ||
                  !entryDN.isDescendantOf(targetDN)) {
               return false;
             }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/GroupDN.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/GroupDN.java
index 346ad65..57eaf8b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/GroupDN.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/GroupDN.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -144,7 +144,7 @@
         List<Attribute> attrs = e.getAttribute(attributeType);
         for(AttributeValue v : attrs.get(0)) {
             try {
-                DN groupDN=DN.decode(v.getValue().toString());
+                DN groupDN=DN.valueOf(v.getValue().toString());
                 if(suffixDN != null &&
                    !groupDN.isDescendantOf(suffixDN))
                         continue;
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java
index b3992b1..3996018 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.authorization.dseecompat;
@@ -186,7 +187,7 @@
                 throw new AciException(message);
               }
               baseDN=url.getBaseDN();
-              if(baseDN.isNullDN()){
+              if(baseDN.isRootDN()){
                 Message message =
                     WARN_ACI_SYNTAX_INVALID_USERATTR_BASEDN_URL.get(pattern);
                 throw new AciException(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternDN.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternDN.java
index 6f2465b..4ccc1eb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternDN.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternDN.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.authorization.dseecompat;
@@ -137,12 +138,12 @@
     if (equality != null)
     {
       // There are no Multiple-Whole-RDN wildcards in the pattern.
-      if (equality.length != dn.getNumComponents())
+      if (equality.length != dn.size())
       {
         return false;
       }
 
-      for (int i = 0; i < dn.getNumComponents(); i++)
+      for (int i = 0; i < dn.size(); i++)
       {
         if (!equality[i].matchesRDN(dn.getRDN(i)))
         {
@@ -155,7 +156,7 @@
     else
     {
       // There are Multiple-Whole-RDN wildcards in the pattern.
-      int valueLength = dn.getNumComponents();
+      int valueLength = dn.size();
 
       int pos = 0;
       if (subInitial != null)
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java
index 1c0f013..6b14f13 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -427,7 +427,7 @@
                                               AttributeValue value,
                                               SearchFilter filter) {
         Attribute attr = Attributes.create(attrType, value);
-        Entry e = new Entry(DN.nullDN(), null, null, null);
+        Entry e = new Entry(DN.rootDN(), null, null, null);
         e.addAttribute(attr, new ArrayList<AttributeValue>());
         try {
             return filter.matchesEntry(e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserAttr.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserAttr.java
index 8901a50..be78720 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserAttr.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserAttr.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -372,12 +372,12 @@
      * than the  rdn count.
      */
     private DN getDNParentLevel(int l, DN dn) {
-        int rdns=dn.getNumComponents();
+        int rdns=dn.size();
         if(l > rdns)
             return null;
         DN theDN=dn;
         for(int i=0; i < l;i++) {
-            theDN=theDN.getParent();
+            theDN=theDN.parent();
         }
         return theDN;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserDN.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserDN.java
index 8d833d0..94e8e15 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserDN.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserDN.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -230,7 +230,7 @@
             }
             case PARENT:
             {
-                DN parentDN = resDN.getParent();
+                DN parentDN = resDN.parent();
                 if ((parentDN != null) &&
                         (parentDN.equals(clientDN)))
                     matched = EnumEvalResult.TRUE;
@@ -319,12 +319,12 @@
             if(!evalCtx.getClientDN().isDescendantOf(urlDN))
                 return EnumEvalResult.FALSE;
         } else if(scope == SearchScope.SINGLE_LEVEL) {
-            DN parent=evalCtx.getClientDN().getParent();
+            DN parent=evalCtx.getClientDN().parent();
             if((parent != null) && !parent.equals(urlDN))
                 return EnumEvalResult.FALSE;
         } else if(scope == SearchScope.SUBORDINATE_SUBTREE) {
             DN userDN = evalCtx.getClientDN();
-            if ((userDN.getNumComponents() <= urlDN.getNumComponents()) ||
+            if ((userDN.size() <= urlDN.size()) ||
                  !userDN.isDescendantOf(urlDN)) {
               return EnumEvalResult.FALSE;
             }
@@ -364,7 +364,7 @@
         List<Attribute> attrs =  e.getAttribute(attrType);
         for(AttributeValue v : attrs.get(0)) {
             try {
-                DN dn=DN.decode(v.getValue().toString());
+                DN dn=DN.valueOf(v.getValue().toString());
                 if(dn.equals(clientDN)) {
                     matched=EnumEvalResult.TRUE;
                     break;
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/BackupBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/BackupBackend.java
index 3dde569..39ce742 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/BackupBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/BackupBackend.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends;
 
@@ -144,7 +145,7 @@
     // the DN of the base backup entry.
     try
     {
-      backupBaseDN = DN.decode(DN_BACKUP_ROOT);
+      backupBaseDN = DN.valueOf(DN_BACKUP_ROOT);
     }
     catch (Exception e)
     {
@@ -185,7 +186,7 @@
     LinkedHashMap<AttributeType,List<Attribute>> userAttrs =
          new LinkedHashMap<AttributeType,List<Attribute>>(1);
 
-    RDN rdn = backupBaseDN.getRDN();
+    RDN rdn = backupBaseDN.rdn();
     int numAVAs = rdn.getNumValues();
     for (int i=0; i < numAVAs; i++)
     {
@@ -513,7 +514,7 @@
     // Make sure that the DN specifies a backup directory.
     AttributeType t =
          DirectoryServer.getAttributeType(ATTR_BACKUP_DIRECTORY_PATH, true);
-    AttributeValue v = entryDN.getRDN().getAttributeValue(t);
+    AttributeValue v = entryDN.rdn().getAttributeValue(t);
     if (v == null)
     {
       Message message =
@@ -606,7 +607,7 @@
     // First, get the backup ID from the entry DN.
     AttributeType idType = DirectoryServer.getAttributeType(ATTR_BACKUP_ID,
         true);
-    AttributeValue idValue = entryDN.getRDN().getAttributeValue(idType);
+    AttributeValue idValue = entryDN.rdn().getAttributeValue(idType);
     if (idValue == null) {
       Message message = ERR_BACKUP_NO_BACKUP_ID_IN_DN.get(String
           .valueOf(entryDN));
@@ -624,7 +625,7 @@
 
     AttributeType t = DirectoryServer.getAttributeType(
         ATTR_BACKUP_DIRECTORY_PATH, true);
-    AttributeValue v = parentDN.getRDN().getAttributeValue(t);
+    AttributeValue v = parentDN.rdn().getAttributeValue(t);
     if (v == null) {
       Message message = ERR_BACKUP_NO_BACKUP_DIR_IN_DN.get(String
           .valueOf(entryDN));
@@ -1216,7 +1217,7 @@
   {
     AttributeValue attrValue =
         AttributeValues.create(rdnAttrType, rdnStringValue);
-    return parentDN.concat(RDN.create(rdnAttrType, attrValue));
+    return parentDN.child(RDN.create(rdnAttrType, attrValue));
   }
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/LDIFBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/LDIFBackend.java
index 626a495..26b6c14 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/LDIFBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/LDIFBackend.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends;
 
@@ -892,7 +892,7 @@
   private void subtreeRename(DN entryDN, DN newParentDN)
   {
     Set<DN> childDNSet = childDNs.remove(entryDN);
-    DN newEntryDN = new DN(entryDN.getRDN(), newParentDN);
+    DN newEntryDN = new DN(entryDN.rdn(), newParentDN);
 
     Entry oldEntry = entryMap.remove(entryDN);
     if (oldEntry == null)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/MonitorBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/MonitorBackend.java
index f00af85..bf862f1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/MonitorBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/MonitorBackend.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2012 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.backends;
 
@@ -253,7 +253,7 @@
     // the DN of the base monitor entry.
     try
     {
-      baseMonitorDN = DN.decode(DN_MONITOR_ROOT);
+      baseMonitorDN = DN.valueOf(DN_MONITOR_ROOT);
     }
     catch (final Exception e)
     {
@@ -652,14 +652,14 @@
     else
     {
       long count = 0;
-      final int childDNSize = entryDN.getNumComponents() + 1;
+      final int childDNSize = entryDN.size() + 1;
       for (final DN dn : dit.tailMap(entryDN, false).navigableKeySet())
       {
         if (!dn.isDescendantOf(entryDN))
         {
           break;
         }
-        else if (subtree || dn.getNumComponents() == childDNSize)
+        else if (subtree || dn.size() == childDNSize)
         {
           count++;
         }
@@ -756,14 +756,14 @@
     if (!dit.containsKey(baseDN))
     {
       // Not found, so find the nearest match.
-      DN matchedDN = baseDN.getParent();
+      DN matchedDN = baseDN.parent();
       while (matchedDN != null)
       {
         if (dit.containsKey(matchedDN))
         {
           break;
         }
-        matchedDN = matchedDN.getParent();
+        matchedDN = matchedDN.parent();
       }
       final Message message = ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String
           .valueOf(baseDN));
@@ -1043,7 +1043,7 @@
     final HashMap<AttributeType, List<Attribute>> monitorUserAttrs =
         new LinkedHashMap<AttributeType, List<Attribute>>();
 
-    final RDN rdn = dn.getRDN();
+    final RDN rdn = dn.rdn();
     if (rdn != null)
     {
       // Add the RDN values
@@ -1084,7 +1084,7 @@
       dit.put(dn, monitorProvider);
 
       // Added glue records.
-      for (dn = dn.getParent(); dn != null; dn = dn.getParent())
+      for (dn = dn.parent(); dn != null; dn = dn.parent())
       {
         if (dit.containsKey(dn))
         {
@@ -1162,7 +1162,7 @@
           monitorAttrs.size() + 1);
 
     // Make sure to include the RDN attribute.
-    final RDN entryRDN = entryDN.getRDN();
+    final RDN entryRDN = entryDN.rdn();
     final AttributeType rdnType = entryRDN.getAttributeType(0);
     final AttributeValue rdnValue = entryRDN.getAttributeValue(0);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/RootDSEBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/RootDSEBackend.java
index 7f0c329..ea15978 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/RootDSEBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/RootDSEBackend.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends;
 
@@ -214,7 +214,7 @@
 
     // Create the set of base DNs that we will handle.  In this case, it's just
     // the root DSE.
-    rootDSEDN    = DN.nullDN();
+    rootDSEDN    = DN.rootDN();
     this.baseDNs = new DN[] { rootDSEDN };
 
 
@@ -427,7 +427,7 @@
   public long numSubordinates(DN entryDN, boolean subtree)
          throws DirectoryException
   {
-    if (entryDN == null || ! entryDN.isNullDN())
+    if (entryDN == null || ! entryDN.isRootDN())
     {
       return -1;
     }
@@ -478,7 +478,7 @@
          throws DirectoryException
   {
     // If the requested entry was the root DSE, then create and return it.
-    if ((entryDN == null) || entryDN.isNullDN())
+    if ((entryDN == null) || entryDN.isRootDN())
     {
       return getRootDSE();
     }
@@ -1018,7 +1018,7 @@
          throws DirectoryException
   {
     // If the specified DN was the null DN, then it exists.
-    if (entryDN.isNullDN())
+    if (entryDN.isRootDN())
     {
       return true;
     }
@@ -1118,7 +1118,7 @@
   public void search(SearchOperation searchOperation)
          throws DirectoryException, CanceledOperationException {
     DN baseDN = searchOperation.getBaseDN();
-    if (! baseDN.isNullDN())
+    if (! baseDN.isRootDN())
     {
       Message message = ERR_ROOTDSE_INVALID_SEARCH_BASE.
           get(searchOperation.getConnectionID(),
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java
index 6583dd8..0df87c6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends;
 
@@ -717,7 +717,7 @@
       new LinkedHashMap<AttributeType, List<Attribute>>();
 
     // Add the RDN attribute(s) for the provided entry.
-    RDN rdn = entryDN.getRDN();
+    RDN rdn = entryDN.rdn();
     if (rdn != null)
     {
       int numAVAs = rdn.getNumValues();
@@ -1601,7 +1601,7 @@
     DN authzDN = modifyOperation.getAuthorizationDN();
     if (authzDN == null)
     {
-      authzDN = DN.nullDN();
+      authzDN = DN.rootDN();
     }
 
     modifiersName = AttributeValues.create(
@@ -3477,7 +3477,7 @@
          new LinkedHashMap<AttributeType,List<Attribute>>();
 
     DN  dn  = DirectoryServer.getSchemaDN();
-    RDN rdn = dn.getRDN();
+    RDN rdn = dn.rdn();
     for (int i=0; i < rdn.getNumValues(); i++)
     {
       AttributeType type = rdn.getAttributeType(i);
@@ -5732,7 +5732,7 @@
       newBaseDNs = new HashSet<DN>(backendCfg.getSchemaEntryDN());
       if (newBaseDNs.isEmpty())
       {
-        newBaseDNs.add(DN.decode(DN_DEFAULT_SCHEMA_ROOT));
+        newBaseDNs.add(DN.valueOf(DN_DEFAULT_SCHEMA_ROOT));
       }
     }
     catch (Exception e)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/TrustStoreBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/TrustStoreBackend.java
index 2f0a703..517d35a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/TrustStoreBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/TrustStoreBackend.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends;
 
@@ -352,7 +352,7 @@
     LinkedHashMap<AttributeType,List<Attribute>> userAttrs =
          new LinkedHashMap<AttributeType,List<Attribute>>(1);
 
-    RDN rdn = baseDN.getRDN();
+    RDN rdn = baseDN.rdn();
     int numAVAs = rdn.getNumValues();
     for (int i=0; i < numAVAs; i++)
     {
@@ -549,7 +549,7 @@
     // Make sure that the DN specifies a certificate alias.
     AttributeType t =
          DirectoryServer.getAttributeType(ATTR_CRYPTO_KEY_ID, true);
-    AttributeValue v = entryDN.getRDN().getAttributeValue(t);
+    AttributeValue v = entryDN.rdn().getAttributeValue(t);
     if (v == null)
     {
       Message message = ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE.
@@ -1348,7 +1348,7 @@
   {
     AttributeValue attrValue =
         AttributeValues.create(rdnAttrType, rdnStringValue);
-    return parentDN.concat(RDN.create(rdnAttrType, attrValue));
+    return parentDN.child(RDN.create(rdnAttrType, attrValue));
   }
 
 
@@ -1576,7 +1576,7 @@
     // Make sure that the DN specifies a certificate alias.
     AttributeType t =
          DirectoryServer.getAttributeType(ATTR_CRYPTO_KEY_ID, true);
-    AttributeValue v = entryDN.getRDN().getAttributeValue(t);
+    AttributeValue v = entryDN.rdn().getAttributeValue(t);
     if (v == null)
     {
       Message message = ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE.get(
@@ -1714,7 +1714,7 @@
     // Make sure that the DN specifies a certificate alias.
     AttributeType t =
          DirectoryServer.getAttributeType(ATTR_CRYPTO_KEY_ID, true);
-    AttributeValue v = entryDN.getRDN().getAttributeValue(t);
+    AttributeValue v = entryDN.rdn().getAttributeValue(t);
     if (v == null)
     {
       Message message = ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE.get(
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java
index 5a234a7..74a991e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java
@@ -346,7 +346,7 @@
 
           Message message =
               INFO_ERGONOMIC_SIZING_OF_JE_CLEANER_THREADS.get(String
-                  .valueOf(cfg.dn().getRDN().getAttributeValue(0)),
+                  .valueOf(cfg.dn().rdn().getAttributeValue(0)),
                   (Number) value);
           logError(message);
         }
@@ -364,7 +364,7 @@
 
           Message message =
               INFO_ERGONOMIC_SIZING_OF_JE_LOCK_TABLES.get(String
-                  .valueOf(cfg.dn().getRDN().getAttributeValue(0)),
+                  .valueOf(cfg.dn().rdn().getAttributeValue(0)),
                   (Number) value);
           logError(message);
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2ID.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2ID.java
index ad3c930..18c8a7f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2ID.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2ID.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
@@ -67,7 +68,7 @@
     super(name, env, entryContainer);
 
     comparator = new AttributeIndex.KeyComparator();
-    prefixRDNComponents = entryContainer.getBaseDN().getNumComponents();
+    prefixRDNComponents = entryContainer.getBaseDN().size();
     DatabaseConfig dn2idConfig = new DatabaseConfig();
 
     if(env.getConfig().getReadOnly())
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2URI.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2URI.java
index f91e0a2..384ba5a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2URI.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2URI.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
@@ -100,7 +100,7 @@
     super(name, env, entryContainer);
 
     dn2uriComparator = new AttributeIndex.KeyComparator();
-    prefixRDNComponents = entryContainer.getBaseDN().getNumComponents();
+    prefixRDNComponents = entryContainer.getBaseDN().size();
     DatabaseConfig dn2uriConfig = new DatabaseConfig();
 
     if(env.getConfig().getReadOnly())
@@ -466,7 +466,7 @@
           {
             urlBaseDN =
                  EntryContainer.modDN(targetDN,
-                                      referralDN.getNumComponents(),
+                                      referralDN.size(),
                                       ldapurl.getBaseDN());
           }
           ldapurl.setBaseDN(urlBaseDN);
@@ -700,7 +700,7 @@
 
               if (ldapurl.getScheme().equalsIgnoreCase("ldap"))
               {
-                if (ldapurl.getBaseDN().isNullDN())
+                if (ldapurl.getBaseDN().isRootDN())
                 {
 
                   ldapurl.setBaseDN(dn);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java
index 2305812..fbf60d8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java
@@ -1095,7 +1095,7 @@
           debugBuffer.toString());
 
       Entry debugEntry =
-          new Entry(DN.decode("cn=debugsearch"), null, null, null);
+          new Entry(DN.valueOf("cn=debugsearch"), null, null, null);
       debugEntry.addAttribute(attr, new ArrayList<AttributeValue>());
 
       searchOperation.returnEntry(debugEntry, null);
@@ -1239,7 +1239,7 @@
      * "ou=people,dc=example,dc=com".
      */
     byte[] baseDNKey = JebFormat.dnToDNKey(aBaseDN,
-                                             this.baseDN.getNumComponents());
+                                             this.baseDN.size());
     byte[] suffix = Arrays.copyOf(baseDNKey, baseDNKey.length+1);
     suffix[suffix.length-1] = 0x00;
 
@@ -1532,8 +1532,8 @@
           else if (searchScope == SearchScope.SINGLE_LEVEL)
           {
             // Check if this entry is an immediate child.
-            if ((entryDN.getNumComponents() ==
-                aBaseDN.getNumComponents() + 1) &&
+            if ((entryDN.size() ==
+                aBaseDN.size() + 1) &&
                 entryDN.isDescendantOf(aBaseDN))
             {
               isInScope = true;
@@ -1548,8 +1548,8 @@
           }
           else if (searchScope == SearchScope.SUBORDINATE_SUBTREE)
           {
-            if ((entryDN.getNumComponents() >
-            aBaseDN.getNumComponents()) &&
+            if ((entryDN.size() >
+            aBaseDN.size()) &&
             entryDN.isDescendantOf(aBaseDN))
             {
               isInScope = true;
@@ -1832,7 +1832,7 @@
        * downwards.
        */
       byte[] entryDNKey = JebFormat.dnToDNKey(entryDN,
-                                               this.baseDN.getNumComponents());
+                                               this.baseDN.size());
       byte[] suffix = Arrays.copyOf(entryDNKey, entryDNKey.length+1);
       suffix[suffix.length-1] = 0x00;
 
@@ -2016,7 +2016,7 @@
       {
         leafDNKey =
             new DatabaseEntry(JebFormat.dnToDNKey(
-                targetDN, this.baseDN.getNumComponents()));
+                targetDN, this.baseDN.size()));
       }
       DatabaseEntry value = new DatabaseEntry();
       OperationStatus status;
@@ -2493,7 +2493,7 @@
        * downwards.
        */
       byte[] currentDNKey = JebFormat.dnToDNKey(currentDN,
-                                               this.baseDN.getNumComponents());
+                                               this.baseDN.size());
       byte[] suffix = Arrays.copyOf(currentDNKey, currentDNKey.length+1);
       suffix[suffix.length-1] = 0x00;
 
@@ -2541,7 +2541,7 @@
 
           // Construct the new DN of the entry.
           DN newDN = modDN(oldEntry.getDN(),
-              currentDN.getNumComponents(),
+              currentDN.size(),
               entry.getDN());
 
           // Assign a new entry ID if we are renumbering.
@@ -2895,9 +2895,9 @@
    */
   public static DN modDN(DN oldDN, int oldSuffixLen, DN newSuffixDN)
   {
-    int oldDNNumComponents    = oldDN.getNumComponents();
+    int oldDNNumComponents    = oldDN.size();
     int oldDNKeepComponents   = oldDNNumComponents - oldSuffixLen;
-    int newSuffixDNComponents = newSuffixDN.getNumComponents();
+    int newSuffixDNComponents = newSuffixDN.size();
 
     RDN[] newDNComponents = new RDN[oldDNKeepComponents+newSuffixDNComponents];
     for (int i=0; i < oldDNKeepComponents; i++)
@@ -3567,7 +3567,7 @@
     {
       return null;
     }
-    return dn.getParent();
+    return dn.parent();
   }
 
   /**
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebFormat.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebFormat.java
index 76870e8..da7327d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebFormat.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebFormat.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
@@ -269,7 +270,7 @@
       {
         if(buffer.length() > 0)
         {
-          dn = dn.concat(RDN.decode(buffer.toString()));
+          dn = dn.child(RDN.decode(buffer.toString()));
           buffer.clear();
         }
       }
@@ -286,7 +287,7 @@
 
     if(buffer.length() > 0)
     {
-      dn = dn.concat(RDN.decode(buffer.toString()));
+      dn = dn.child(RDN.decode(buffer.toString()));
     }
 
     return dn;
@@ -332,7 +333,7 @@
   public static byte[] dnToDNKey(DN dn, int prefixRDNs)
   {
     StringBuilder buffer = new StringBuilder();
-    for (int i = dn.getNumComponents() - prefixRDNs - 1; i >= 0; i--)
+    for (int i = dn.size() - prefixRDNs - 1; i >= 0; i--)
     {
       buffer.append('\u0000');
       formatRDNKey(dn.getRDN(i), buffer);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VerifyJob.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VerifyJob.java
index 2354949..1037ad7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VerifyJob.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VerifyJob.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 import com.sleepycat.je.*;
@@ -632,7 +632,7 @@
         else
         {
           if (!Arrays.equals(JebFormat.dnToDNKey(
-              entry.getDN(), verifyConfig.getBaseDN().getNumComponents()),
+              entry.getDN(), verifyConfig.getBaseDN().size()),
                              key.getData()))
           {
             errorCount++;
@@ -770,8 +770,8 @@
             }
 
             if (!childEntry.getDN().isDescendantOf(entry.getDN()) ||
-                 childEntry.getDN().getNumComponents() !=
-                 entry.getDN().getNumComponents() + 1)
+                 childEntry.getDN().size() !=
+                 entry.getDN().size() + 1)
             {
               errorCount++;
               if (debugEnabled())
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
index bcaab2d..a27440d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/Importer.java
@@ -1307,7 +1307,7 @@
             {
               byte[] bytes =
                   JebFormat.dnToDNKey(excludedDN, suffix.getBaseDN()
-                      .getNumComponents());
+                      .size());
               key.setData(bytes);
               status = cursor.getSearchKeyRange(key, data, lockMode);
               if (status == OperationStatus.SUCCESS
@@ -1375,7 +1375,7 @@
           if (includeBranch.isDescendantOf(suffix.getBaseDN()))
           {
             includeBranches.add(JebFormat.dnToDNKey(includeBranch, suffix
-                .getBaseDN().getNumComponents()));
+                .getBaseDN().size()));
           }
         }
 
@@ -1872,7 +1872,7 @@
     {
       DN2ID dn2id = suffix.getDN2ID();
       byte[] dnBytes =
-          JebFormat.dnToDNKey(dn, suffix.getBaseDN().getNumComponents());
+          JebFormat.dnToDNKey(dn, suffix.getBaseDN().size());
       int id =
           processKey(dn2id, dnBytes, entryID, indexComparator, new IndexKey(
               dnType, ImportIndexType.DN, 1), true);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskBackend.java
index 262255e..9f9df48 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskBackend.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends.task;
 
@@ -175,7 +175,7 @@
                                        taskRootDN.toString();
       try
       {
-        recurringTaskParentDN = DN.decode(recurringTaskBaseString);
+        recurringTaskParentDN = DN.valueOf(recurringTaskBaseString);
       }
       catch (Exception e)
       {
@@ -194,7 +194,7 @@
                                        taskRootDN.toString();
       try
       {
-        scheduledTaskParentDN = DN.decode(scheduledTaskBaseString);
+        scheduledTaskParentDN = DN.valueOf(scheduledTaskBaseString);
       }
       catch (Exception e)
       {
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/DNConfigAttribute.java b/opendj3-server-dev/src/server/org/opends/server/config/DNConfigAttribute.java
index 5ef7095..776720b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/DNConfigAttribute.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/DNConfigAttribute.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.config;
 import org.opends.messages.Message;
@@ -572,7 +573,7 @@
     // Make sure that it can be parsed as a DN.
     try
     {
-      DN.decode(value.getValue().toString());
+      DN.valueOf(value.getValue().toString());
     }
     catch (Exception e)
     {
@@ -662,7 +663,7 @@
       DN dn;
       try
       {
-        dn = DN.decode(valueString);
+        dn = DN.valueOf(valueString);
       }
       catch (Exception e)
       {
@@ -836,7 +837,7 @@
               DN dn;
               try
               {
-                dn = DN.decode(v.getValue().toString());
+                dn = DN.valueOf(v.getValue().toString());
               }
               catch (Exception e)
               {
@@ -906,7 +907,7 @@
             DN dn;
             try
             {
-              dn = DN.decode(v.getValue().toString());
+              dn = DN.valueOf(v.getValue().toString());
             }
             catch (Exception e)
             {
@@ -1199,7 +1200,7 @@
       DN dn;
       try
       {
-        dn = DN.decode((String) value);
+        dn = DN.valueOf((String) value);
       }
       catch (Exception e)
       {
@@ -1243,7 +1244,7 @@
             DN dn;
             try
             {
-              dn = DN.decode(valueStr);
+              dn = DN.valueOf(valueStr);
             }
             catch (Exception e)
             {
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/EntryChangeNotificationControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/EntryChangeNotificationControl.java
index 0aa5fec..b9ffc57 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/EntryChangeNotificationControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/EntryChangeNotificationControl.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
 import org.opends.messages.Message;
@@ -93,7 +94,7 @@
                 ResultCode.PROTOCOL_ERROR, message);
           }
 
-          previousDN = DN.decode(reader.readOctetStringAsString());
+          previousDN = DN.valueOf(reader.readOctetStringAsString());
         }
         if(reader.hasNextElement() &&
             reader.peekType() == UNIVERSAL_INTEGER_TYPE)
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/GetEffectiveRightsRequestControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/GetEffectiveRightsRequestControl.java
index f1ed182..1033d4b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/GetEffectiveRightsRequestControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/GetEffectiveRightsRequestControl.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.controls;
@@ -101,7 +102,7 @@
           String lowerAuthzIDString = authzIDString.toLowerCase();
           //Make sure authzId starts with "dn:" and is a valid DN.
           if (lowerAuthzIDString.startsWith("dn:"))
-            authzDN = DN.decode(authzIDString.substring(3));
+            authzDN = DN.valueOf(authzIDString.substring(3));
           else {
             Message message = INFO_GETEFFECTIVERIGHTS_INVALID_AUTHZID.get(
                 lowerAuthzIDString);
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV1Control.java b/opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV1Control.java
index aa36f68..fbc5d69 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV1Control.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV1Control.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.controls;
 
@@ -278,7 +278,7 @@
          throws DirectoryException
   {
     DN authzDN = getAuthorizationDN();
-    if (authzDN.isNullDN())
+    if (authzDN.isRootDN())
     {
       return null;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV2Control.java b/opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
index a03ca6e..6c14d69 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.controls;
 
@@ -230,8 +230,8 @@
     {
       // It's a DN, so decode it and see if it exists.  If it's the null DN,
       // then just assume that it does.
-      DN authzDN = DN.decode(lowerAuthzID.substring(3));
-      if (authzDN.isNullDN())
+      DN authzDN = DN.valueOf(lowerAuthzID.substring(3));
+      if (authzDN.isRootDN())
       {
         return null;
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/AddOperationBasis.java b/opendj3-server-dev/src/server/org/opends/server/core/AddOperationBasis.java
index 47e9c81..7a884ef 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/AddOperationBasis.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/AddOperationBasis.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -795,7 +795,7 @@
         // This is fine.  This entry is one of the configured suffixes.
         return;
       }
-      if (entryDN.isNullDN())
+      if (entryDN.isRootDN())
       {
         // This is not fine.  The root DSE cannot be added.
         setResultCode(ResultCode.UNWILLING_TO_PERFORM);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/AuthenticatedUsers.java b/opendj3-server-dev/src/server/org/opends/server/core/AuthenticatedUsers.java
index 050d1b6..0bcdd40 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/AuthenticatedUsers.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/AuthenticatedUsers.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.core;
 import java.util.HashSet;
@@ -325,7 +325,7 @@
               builder.replace(oldDNIndex, builder.length(),
                       newDNString);
               String newAuthNDNString = builder.toString();
-              newAuthNDN = DN.decode(newAuthNDNString);
+              newAuthNDN = DN.valueOf(newAuthNDNString);
             }
             catch (Exception e)
             {
@@ -347,7 +347,7 @@
               builder.replace(oldDNIndex, builder.length(),
                       newDNString);
               String newAuthZDNString = builder.toString();
-              newAuthZDN = DN.decode(newAuthZDNString);
+              newAuthZDN = DN.valueOf(newAuthZDNString);
             }
             catch (Exception e)
             {
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/BackendConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/BackendConfigManager.java
index 7145f84..4bc7833 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/BackendConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/BackendConfigManager.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 import org.opends.messages.Message;
@@ -125,7 +126,7 @@
     ConfigEntry backendRoot;
     try
     {
-      DN configEntryDN = DN.decode(ConfigConstants.DN_BACKEND_BASE);
+      DN configEntryDN = DN.valueOf(ConfigConstants.DN_BACKEND_BASE);
       backendRoot   = DirectoryServer.getConfigEntry(configEntryDN);
     }
     catch (Exception e)
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/BaseDnRegistry.java b/opendj3-server-dev/src/server/org/opends/server/core/BaseDnRegistry.java
index dd72808..85213de 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/BaseDnRegistry.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/BaseDnRegistry.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.core;
@@ -116,7 +117,7 @@
     // backend must also be subordinate to the same base DN.
     Backend superiorBackend = null;
     DN      superiorBaseDN        ;
-    DN      parentDN        = baseDN.getParent();
+    DN      parentDN        = baseDN.parent();
     while (parentDN != null)
     {
       if (baseDNs.containsKey(parentDN))
@@ -139,7 +140,7 @@
         break;
       }
 
-      parentDN = parentDN.getParent();
+      parentDN = parentDN.parent();
     }
 
     if (superiorBackend == null)
@@ -162,7 +163,7 @@
     for (DN dn : baseDNs.keySet())
     {
       Backend b = baseDNs.get(dn);
-      parentDN = dn.getParent();
+      parentDN = dn.parent();
       while (parentDN != null)
       {
         if (parentDN.equals(baseDN))
@@ -176,7 +177,7 @@
           break;
         }
 
-        parentDN = parentDN.getParent();
+        parentDN = parentDN.parent();
       }
     }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/BindOperationBasis.java b/opendj3-server-dev/src/server/org/opends/server/core/BindOperationBasis.java
index 0fbd475..91463a1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/BindOperationBasis.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/BindOperationBasis.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -711,7 +711,7 @@
       // Issue #3502 has been logged to track this request.
       boolean isInConfig;
       try {
-        isInConfig = bindDN.isDescendantOf(DN.decode(DN_CONFIG_ROOT));
+        isInConfig = bindDN.isDescendantOf(DN.valueOf(DN_CONFIG_ROOT));
       } catch (DirectoryException ex) {
         // can not happen
         isInConfig = false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java b/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java
index 35ed81b..4a51be1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2010-2013 ForgeRock AS.
+ *      Portions Copyright 2010-2014 ForgeRock AS.
  */
 package org.opends.server.core;
 
@@ -1850,7 +1850,7 @@
     {
       try
       {
-        DN dn = DN.decode(dnStr);
+        DN dn = DN.valueOf(dnStr);
         for (ConfigAddListener listener : addListeners.get(dnStr))
         {
           configHandler.getConfigEntry(dn).registerAddListener(listener);
@@ -1867,7 +1867,7 @@
     {
       try
       {
-        DN dn = DN.decode(dnStr);
+        DN dn = DN.valueOf(dnStr);
         for (ConfigDeleteListener listener : deleteListeners.get(dnStr))
         {
           configHandler.getConfigEntry(dn).registerDeleteListener(listener);
@@ -1884,7 +1884,7 @@
     {
       try
       {
-        DN dn = DN.decode(dnStr);
+        DN dn = DN.valueOf(dnStr);
         for (ConfigChangeListener listener : changeListeners.get(dnStr))
         {
           configHandler.getConfigEntry(dn).registerChangeListener(listener);
@@ -2132,7 +2132,7 @@
       registerWorkflowWithInternalNetworkGroup(workflowImpl);
       // Special case for cn=config
       // it must not be added to the default ng except in auto mode
-      if (!curBaseDN.equals(DN.decode(DN_CONFIG_ROOT))
+      if (!curBaseDN.equals(DN.valueOf(DN_CONFIG_ROOT))
           || workflowConfigurationModeIsAuto()) {
         registerWorkflowWithDefaultNetworkGroup(workflowImpl);
       }
@@ -6170,7 +6170,7 @@
    */
   public static Backend getBackend(DN entryDN)
   {
-    if (entryDN.isNullDN())
+    if (entryDN.isRootDN())
     {
       return directoryServer.rootDSEBackend;
     }
@@ -6179,7 +6179,7 @@
     Backend b = baseDNs.get(entryDN);
     while (b == null)
     {
-      entryDN = entryDN.getParent();
+      entryDN = entryDN.parent();
       if (entryDN == null)
       {
         return null;
@@ -6247,7 +6247,7 @@
       // the workflow in manual mode because in that case the workflows
       // are created explicitly.
       if (workflowConfigurationModeIsAuto()
-          && !baseDN.equals(DN.decode("cn=config")))
+          && !baseDN.equals(DN.valueOf("cn=config")))
       {
         // Now create a workflow for the registered baseDN and register
         // the workflow with the default network group, but don't register
@@ -6416,7 +6416,7 @@
          throws DirectoryException
   {
     // If the entry is the root DSE, then get and return that.
-    if (entryDN.isNullDN())
+    if (entryDN.isRootDN())
     {
       return directoryServer.rootDSEBackend.getRootDSE();
     }
@@ -6451,7 +6451,7 @@
          throws DirectoryException
   {
     // If the entry is the root DSE, then it will always exist.
-    if (entryDN.isNullDN())
+    if (entryDN.isRootDN())
     {
       return true;
     }
@@ -8887,7 +8887,7 @@
       {
         // The config handler hasn't been initialized yet.  Just return the DN
         // of the root DSE.
-        return DN.nullDN();
+        return DN.rootDN();
       }
 
       return configHandler.getConfigRootEntry().getDN();
@@ -8901,7 +8901,7 @@
 
       // This could theoretically happen if an alert needs to be sent before the
       // configuration is initialized.  In that case, just return an empty DN.
-      return DN.nullDN();
+      return DN.rootDN();
     }
   }
 
@@ -9420,7 +9420,7 @@
     try
     {
       // Get a complete DN which could be a tree naming schema
-      return DN.decode("cn="+monitorName+","+DN_MONITOR_ROOT);
+      return DN.valueOf("cn="+monitorName+","+DN_MONITOR_ROOT);
     }
     catch (DirectoryException e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/EntryCacheConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/EntryCacheConfigManager.java
index 23cdc67..335ce4e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/EntryCacheConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/EntryCacheConfigManager.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.core;
 import org.opends.messages.Message;
@@ -176,7 +176,7 @@
     // Get the base entry cache configuration entry.
     ConfigEntry entryCacheBase;
     try {
-      DN configEntryDN = DN.decode(ConfigConstants.DN_ENTRY_CACHE_BASE);
+      DN configEntryDN = DN.valueOf(ConfigConstants.DN_ENTRY_CACHE_BASE);
       entryCacheBase   = DirectoryServer.getConfigEntry(configEntryDN);
     } catch (Exception e) {
       if (debugEnabled())
@@ -571,7 +571,7 @@
     // Install and register the monitor for this cache.
     EntryCacheMonitorProvider monitor =
         new EntryCacheMonitorProvider(configuration.dn().
-        getRDN().getAttributeValue(0).toString(), entryCache);
+        rdn().getAttributeValue(0).toString(), entryCache);
     try {
       monitor.initializeMonitorProvider((EntryCacheMonitorProviderCfg)
         rootConfiguration.getMonitorProvider(
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/GroupManager.java b/opendj3-server-dev/src/server/org/opends/server/core/GroupManager.java
index 945ac6b..31fa61b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/GroupManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/GroupManager.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -123,7 +123,7 @@
    */
   public GroupManager() throws DirectoryException
   {
-    super(DN.decode(CONFIG_DN), EnumSet.of(
+    super(DN.valueOf(CONFIG_DN), EnumSet.of(
           PluginType.POST_OPERATION_ADD,
           PluginType.POST_OPERATION_DELETE,
           PluginType.POST_OPERATION_MODIFY,
@@ -856,7 +856,7 @@
         DN groupDN;
         try
         {
-          groupDN = DN.decode(groupDNString);
+          groupDN = DN.valueOf(groupDNString);
         }
         catch (DirectoryException de)
         {
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/ModifyDNOperationBasis.java b/opendj3-server-dev/src/server/org/opends/server/core/ModifyDNOperationBasis.java
index 9ff575b..eb29825 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/ModifyDNOperationBasis.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/ModifyDNOperationBasis.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.core;
 
@@ -715,12 +715,12 @@
         parentDN = newSuperior;
       }
 
-      if ((parentDN == null) || parentDN.isNullDN())
+      if ((parentDN == null) || parentDN.isRootDN())
       {
         setResultCode(ResultCode.UNWILLING_TO_PERFORM);
         appendErrorMessage(ERR_MODDN_NO_PARENT.get(String.valueOf(entryDN)));
       }
-      newDN = parentDN.concat(getNewRDN());
+      newDN = parentDN.child(getNewRDN());
     }
     return newDN;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/PersistentSearch.java b/opendj3-server-dev/src/server/org/opends/server/core/PersistentSearch.java
index 3193abb..3148ac9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/PersistentSearch.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/PersistentSearch.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -528,7 +529,7 @@
       }
       break;
     case SINGLE_LEVEL:
-      if (!baseDN.equals(oldEntry.getDN().getParent()))
+      if (!baseDN.equals(oldEntry.getDN().parent()))
       {
         return;
       }
@@ -654,8 +655,8 @@
 
       break;
     case SINGLE_LEVEL:
-      oldMatches = baseDN.equals(oldDN.getParent());
-      newMatches = baseDN.equals(entry.getDN().getParent());
+      oldMatches = baseDN.equals(oldDN.parent());
+      newMatches = baseDN.equals(entry.getDN().parent());
 
       if (!(oldMatches || newMatches))
       {
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/PluginConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/PluginConfigManager.java
index 7c10a35..937ecbc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/PluginConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/PluginConfigManager.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -1051,7 +1051,7 @@
       {
         DN dn = p.getPluginEntryDN();
         String lowerName =
-            toLowerCase(dn.getRDN().getAttributeValue(0).getValue().toString());
+            toLowerCase(dn.rdn().getAttributeValue(0).getValue().toString());
         if (initialPluginNames.contains(lowerName))
         {
           initialPlugins.put(lowerName, p);
@@ -1071,7 +1071,7 @@
       // the correct category.
       DN dn = plugin.getPluginEntryDN();
       String lowerName =
-           toLowerCase(dn.getRDN().getAttributeValue(0).getValue().toString());
+           toLowerCase(dn.rdn().getAttributeValue(0).getValue().toString());
       if (initialPluginNames.contains(lowerName))
       {
         initialPlugins.put(lowerName, plugin);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/SubentryManager.java b/opendj3-server-dev/src/server/org/opends/server/core/SubentryManager.java
index 9413b88..f18b48c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/SubentryManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/SubentryManager.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -119,7 +119,7 @@
    */
   public SubentryManager() throws DirectoryException
   {
-    super(DN.decode(CONFIG_DN), EnumSet.of(
+    super(DN.valueOf(CONFIG_DN), EnumSet.of(
           PluginType.PRE_OPERATION_ADD,
           PluginType.PRE_OPERATION_DELETE,
           PluginType.PRE_OPERATION_MODIFY,
@@ -473,7 +473,7 @@
     try
     {
       for (DN subDN = dn; subDN != null;
-           subDN = subDN.getParent())
+           subDN = subDN.parent())
       {
         List<SubEntry> subList = dn2SubEntry.get(subDN);
         if (subList != null)
@@ -519,7 +519,7 @@
     try
     {
       for (DN subDN = entry.getDN(); subDN != null;
-           subDN = subDN.getParent())
+           subDN = subDN.parent())
       {
         List<SubEntry> subList = dn2SubEntry.get(subDN);
         if (subList != null)
@@ -565,7 +565,7 @@
     try
     {
       for (DN subDN = dn; subDN != null;
-           subDN = subDN.getParent())
+           subDN = subDN.parent())
       {
         List<SubEntry> subList = dn2CollectiveSubEntry.get(subDN);
         if (subList != null)
@@ -611,7 +611,7 @@
     try
     {
       for (DN subDN = entry.getDN(); subDN != null;
-           subDN = subDN.getParent())
+           subDN = subDN.parent())
       {
         List<SubEntry> subList = dn2CollectiveSubEntry.get(subDN);
         if (subList != null)
@@ -887,7 +887,7 @@
                   newDNString);
           String subentryDNString = builder.toString();
           newEntry = subentry.getEntry().duplicate(false);
-          newEntry.setDN(DN.decode(subentryDNString));
+          newEntry.setDN(DN.valueOf(subentryDNString));
           addSubEntry(newEntry);
         }
         catch (Exception e)
@@ -1119,7 +1119,7 @@
                   newDNString);
           String subentryDNString = builder.toString();
           newEntry = subentry.getEntry().duplicate(false);
-          newEntry.setDN(DN.decode(subentryDNString));
+          newEntry.setDN(DN.valueOf(subentryDNString));
         }
         catch (Exception e)
         {
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/VirtualAttributeConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
index c069759..02f5576 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -530,7 +530,7 @@
     try
     {
       String name = rule.getAttributeType().getNameOrOID();
-      return DN.decode("cn=" + name + ",cn=Virtual Attributes,cn=config");
+      return DN.valueOf("cn=" + name + ",cn=Virtual Attributes,cn=config");
     }
     catch (DirectoryException e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/WorkflowConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/WorkflowConfigManager.java
index 170863d..cd9b1a6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/WorkflowConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/WorkflowConfigManager.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -348,7 +349,7 @@
   {
     // The ID of the workflow to create
     String workflowId =
-        workflowCfg.dn().getRDN().getAttributeValue(0).toString();
+        workflowCfg.dn().rdn().getAttributeValue(0).toString();
 
     // Create the root workflow element to associate with the workflow
     String rootWorkflowElementID = workflowCfg.getWorkflowElement();
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/WorkflowTopologyNode.java b/opendj3-server-dev/src/server/org/opends/server/core/WorkflowTopologyNode.java
index 3fb640a..1c2762d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/WorkflowTopologyNode.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/WorkflowTopologyNode.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -145,7 +146,7 @@
       // If the new search scope is 'base' and the search base DN does not
       // map the subordinate workflow then skip the subordinate workflow.
       if ((newScope == SearchScope.BASE_OBJECT)
-          && !subordinateDN.getParent().equals(originalBaseDN))
+          && !subordinateDN.parent().equals(originalBaseDN))
       {
         continue;
       }
@@ -514,7 +515,7 @@
     String workflowID = this.getWorkflowImpl().getWorkflowId();
     sb.append(leftMargin + "Workflow ID = " + workflowID + "\n");
     sb.append(leftMargin + "         baseDN:[");
-    if (baseDN.isNullDN())
+    if (baseDN.isRootDN())
     {
       sb.append(" \"\"");
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroup.java b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroup.java
index 74913ec..4dc9329 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroup.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroup.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -718,7 +719,7 @@
   private static String getNameFromConfiguration(NetworkGroupCfg configuration)
   {
     DN dn = configuration.dn();
-    return dn.getRDN().getAttributeValue(0).toString();
+    return dn.rdn().getAttributeValue(0).toString();
   }
 
 
@@ -963,7 +964,7 @@
       return workflow;
     }
 
-    if (baseDN.isNullDN())
+    if (baseDN.isRootDN())
     {
       // deregister the rootDSE
       deregisterWorkflow(rootDSEWorkflowNode);
@@ -1236,7 +1237,7 @@
     Workflow workflowCandidate = null;
 
     // get the list of workflow candidates
-    if (baseDN.isNullDN())
+    if (baseDN.isRootDN())
     {
       // The rootDSE workflow is the candidate.
       workflowCandidate = rootDSEWorkflowNode;
@@ -1896,7 +1897,7 @@
   {
     // Is it the rootDSE workflow?
     DN baseDN = workflow.getBaseDN();
-    if (baseDN.isNullDN())
+    if (baseDN.isRootDN())
     {
       // NOTE - The rootDSE workflow is stored with the
       // registeredWorkflows.
diff --git a/opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerImpl.java b/opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerImpl.java
index 4d87f09..fd6b9a9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerImpl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerImpl.java
@@ -23,7 +23,7 @@
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
  *      Portions Copyright 2009 Parametric Technology Corporation (PTC)
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.crypto;
 
@@ -257,15 +257,15 @@
 
       try {
         localTruststoreDN
-                = DN.decode(ConfigConstants.DN_TRUST_STORE_ROOT);
-        DN adminSuffixDN = DN.decode(
+                = DN.valueOf(ConfigConstants.DN_TRUST_STORE_ROOT);
+        DN adminSuffixDN = DN.valueOf(
                 ADSContext.getAdministrationSuffixDN());
-        instanceKeysDN = adminSuffixDN.concat(
-                DN.decode("cn=instance keys"));
-        secretKeysDN = adminSuffixDN.concat(
-             DN.decode("cn=secret keys"));
-        serversDN = adminSuffixDN.concat(
-             DN.decode("cn=Servers"));
+        instanceKeysDN = adminSuffixDN.child(
+                DN.valueOf("cn=instance keys"));
+        secretKeysDN = adminSuffixDN.child(
+             DN.valueOf("cn=secret keys"));
+        serversDN = adminSuffixDN.child(
+             DN.valueOf("cn=Servers"));
       }
       catch (DirectoryException ex) {
         if (debugEnabled()) {
@@ -502,7 +502,7 @@
     // Construct the key entry DN.
     final AttributeValue distinguishedValue = AttributeValues.create(
             attrKeyID, ConfigConstants.ADS_CERTIFICATE_ALIAS);
-    final DN entryDN = localTruststoreDN.concat(
+    final DN entryDN = localTruststoreDN.child(
             RDN.create(attrKeyID, distinguishedValue));
     // Construct the search filter.
     final String FILTER_OC_INSTANCE_KEY =
@@ -652,7 +652,7 @@
     // Construct the key entry DN.
     final AttributeValue distinguishedValue =
         AttributeValues.create(attrKeyID, instanceKeyID);
-    final DN entryDN = instanceKeysDN.concat(
+    final DN entryDN = instanceKeysDN.child(
          RDN.create(attrKeyID, distinguishedValue));
     // Construct the search filter.
     final String FILTER_OC_INSTANCE_KEY =
@@ -1730,7 +1730,7 @@
       AttributeValue distinguishedValue =
            AttributeValues.create(attrKeyID,
                keyEntry.getKeyID().getStringValue());
-      DN entryDN = secretKeysDN.concat(
+      DN entryDN = secretKeysDN.child(
            RDN.create(attrKeyID, distinguishedValue));
 
       // Set the entry object classes.
@@ -2278,7 +2278,7 @@
       AttributeValue distinguishedValue =
            AttributeValues.create(attrKeyID,
                               keyEntry.getKeyID().getStringValue());
-      DN entryDN = secretKeysDN.concat(
+      DN entryDN = secretKeysDN.child(
            RDN.create(attrKeyID, distinguishedValue));
 
       // Set the entry object classes.
diff --git a/opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerSync.java b/opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerSync.java
index 34ec46c..4d5ef60 100644
--- a/opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerSync.java
+++ b/opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerSync.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.crypto;
@@ -150,10 +151,10 @@
 
     try
     {
-      adminSuffixDN = DN.decode(ADSContext.getAdministrationSuffixDN());
-      instanceKeysDN = adminSuffixDN.concat(DN.decode("cn=instance keys"));
-      secretKeysDN = adminSuffixDN.concat(DN.decode("cn=secret keys"));
-      trustStoreRootDN = DN.decode(ConfigConstants.DN_TRUST_STORE_ROOT);
+      adminSuffixDN = DN.valueOf(ADSContext.getAdministrationSuffixDN());
+      instanceKeysDN = adminSuffixDN.child(DN.valueOf("cn=instance keys"));
+      secretKeysDN = adminSuffixDN.child(DN.valueOf("cn=secret keys"));
+      trustStoreRootDN = DN.valueOf(ConfigConstants.DN_TRUST_STORE_ROOT);
       keySearchFilter =
            SearchFilter.createFilterFromString("(|" +
                 "(objectclass=" + OC_CRYPTO_INSTANCE_KEY + ")" +
@@ -300,13 +301,13 @@
   private void handleInstanceKeySearchEntry(SearchResultEntry searchEntry)
        throws DirectoryException
   {
-    RDN srcRDN = searchEntry.getDN().getRDN();
+    RDN srcRDN = searchEntry.getDN().rdn();
 
     // Only process the entry if it has the expected form of RDN.
     if (!srcRDN.isMultiValued() &&
          srcRDN.getAttributeType(0).equals(attrAlias))
     {
-      DN dstDN = trustStoreRootDN.concat(srcRDN);
+      DN dstDN = trustStoreRootDN.child(srcRDN);
 
       // Extract any change notification control.
       EntryChangeNotificationControl ecn = null;
@@ -521,13 +522,13 @@
 
   private void handleInstanceKeyAddOperation(Entry entry)
   {
-    RDN srcRDN = entry.getDN().getRDN();
+    RDN srcRDN = entry.getDN().rdn();
 
     // Only process the entry if it has the expected form of RDN.
     if (!srcRDN.isMultiValued() &&
          srcRDN.getAttributeType(0).equals(attrAlias))
     {
-      DN dstDN = trustStoreRootDN.concat(srcRDN);
+      DN dstDN = trustStoreRootDN.child(srcRDN);
 
       if (!entry.hasAttribute(attrCompromisedTime))
       {
@@ -547,7 +548,7 @@
       return;
     }
 
-    RDN srcRDN = entry.getDN().getRDN();
+    RDN srcRDN = entry.getDN().rdn();
 
     // Only process the entry if it has the expected form of RDN.
     // FIXME: Technically it is possible to perform a subtree in
@@ -556,7 +557,7 @@
     if (!srcRDN.isMultiValued() &&
          srcRDN.getAttributeType(0).equals(attrAlias))
     {
-      DN dstDN = trustStoreRootDN.concat(srcRDN);
+      DN dstDN = trustStoreRootDN.child(srcRDN);
 
       deleteEntry(dstDN);
     }
@@ -596,13 +597,13 @@
 
   private void handleInstanceKeyModifyOperation(Entry newEntry)
   {
-    RDN srcRDN = newEntry.getDN().getRDN();
+    RDN srcRDN = newEntry.getDN().rdn();
 
     // Only process the entry if it has the expected form of RDN.
     if (!srcRDN.isMultiValued() &&
          srcRDN.getAttributeType(0).equals(attrAlias))
     {
-      DN dstDN = trustStoreRootDN.concat(srcRDN);
+      DN dstDN = trustStoreRootDN.child(srcRDN);
 
       // Get any existing local trust store entry.
       Entry dstEntry = null;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java b/opendj3-server-dev/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java
index a0c8818..f58fe94 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
@@ -303,7 +303,7 @@
       DN userDN;
       try
       {
-        userDN = DN.decode(userName.substring(3));
+        userDN = DN.valueOf(userName.substring(3));
       }
       catch (DirectoryException de)
       {
@@ -320,7 +320,7 @@
         return;
       }
 
-      if (userDN.isNullDN())
+      if (userDN.isRootDN())
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/ConfigFileHandler.java b/opendj3-server-dev/src/server/org/opends/server/extensions/ConfigFileHandler.java
index 7bb5b20..72cb0f5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/ConfigFileHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/ConfigFileHandler.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -395,7 +395,7 @@
     // Make sure that the DN of this entry is equal to the config root DN.
     try
     {
-      DN configRootDN = DN.decode(DN_CONFIG_ROOT);
+      DN configRootDN = DN.valueOf(DN_CONFIG_ROOT);
       if (! entry.getDN().equals(configRootDN))
       {
         Message message = ERR_CONFIG_FILE_INVALID_BASE_DN.get(
@@ -499,7 +499,7 @@
 
 
       // Make sure that the parent DN of the entry read does exist.
-      DN parentDN = entryDN.getParent();
+      DN parentDN = entryDN.parent();
       if (parentDN == null)
       {
         close(reader);
@@ -1194,7 +1194,7 @@
 
 
       // Make sure that the entry's parent exists.  If it does not, then fail.
-      DN parentDN = entryDN.getParent();
+      DN parentDN = entryDN.parent();
       if (parentDN == null)
       {
         // The entry DN doesn't have a parent.  This is not allowed.
@@ -1213,7 +1213,7 @@
 
         // Get the matched DN, if possible.
         DN matchedDN = null;
-        parentDN = parentDN.getParent();
+        parentDN = parentDN.parent();
         while (parentDN != null)
         {
           if (configEntries.containsKey(parentDN))
@@ -1222,7 +1222,7 @@
             break;
           }
 
-          parentDN = parentDN.getParent();
+          parentDN = parentDN.parent();
         }
 
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
@@ -1353,7 +1353,7 @@
         DN matchedDN = null;
         if (entryDN.isDescendantOf(configRootEntry.getDN()))
         {
-          DN parentDN = entryDN.getParent();
+          DN parentDN = entryDN.parent();
           while (parentDN != null)
           {
             if (configEntries.containsKey(parentDN))
@@ -1362,7 +1362,7 @@
               break;
             }
 
-            parentDN = parentDN.getParent();
+            parentDN = parentDN.parent();
           }
         }
 
@@ -1541,7 +1541,7 @@
         DN matchedDN = null;
         if (entryDN.isDescendantOf(configRootEntry.getDN()))
         {
-          DN parentDN = entryDN.getParent();
+          DN parentDN = entryDN.parent();
           while (parentDN != null)
           {
             if (configEntries.containsKey(parentDN))
@@ -1550,7 +1550,7 @@
               break;
             }
 
-            parentDN = parentDN.getParent();
+            parentDN = parentDN.parent();
           }
         }
 
@@ -1704,7 +1704,7 @@
       DN matchedDN = null;
       if (baseDN.isDescendantOf(configRootEntry.getDN()))
       {
-        DN parentDN = baseDN.getParent();
+        DN parentDN = baseDN.parent();
         while (parentDN != null)
         {
           if (configEntries.containsKey(parentDN))
@@ -1713,7 +1713,7 @@
             break;
           }
 
-          parentDN = parentDN.getParent();
+          parentDN = parentDN.parent();
         }
       }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/FileSystemEntryCache.java b/opendj3-server-dev/src/server/org/opends/server/extensions/FileSystemEntryCache.java
index d569aeb..85b5e2d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/FileSystemEntryCache.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/FileSystemEntryCache.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -599,7 +599,7 @@
       {
         // Get the entry DN from the map by its ID.  If it isn't present,
         // then return null.
-        entryDN = DN.decode(map.get(entryID));
+        entryDN = DN.valueOf(map.get(entryID));
       }
     } catch (Exception e) {
       // Ignore.
@@ -766,7 +766,7 @@
           backendEntriesMap.keySet().iterator();
         while (backendEntriesIterator.hasNext()) {
           Long entryID = backendEntriesIterator.next();
-          DN entryDN = DN.decode(backendEntriesMap.get(entryID));
+          DN entryDN = DN.valueOf(backendEntriesMap.get(entryID));
           entryCacheDB.delete(null, new DatabaseEntry(
             entryDN.toNormalizedString().getBytes("UTF-8")));
           backendEntriesIterator.remove();
@@ -863,7 +863,7 @@
     while (iterator.hasNext())
     {
       try {
-        DN entryDN = DN.decode(iterator.next());
+        DN entryDN = DN.valueOf(iterator.next());
         if (entryDN.isDescendantOf(baseDN)) {
           iterator.remove();
           entryCacheIndex.dnMap.remove(entryDN.toNormalizedString());
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java b/opendj3-server-dev/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java
index 9dd006c..e19a0c2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 import org.opends.server.types.ByteString;
@@ -188,7 +188,7 @@
             break;
 
           case SINGLE_LEVEL:
-            if (! baseDN.equals(nextDN.getParent()))
+            if (! baseDN.equals(nextDN.parent()))
             {
               continue;
             }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProvider.java
index 4e11c03..b6b3475 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProvider.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2012-2013 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -159,7 +159,7 @@
                        AcceptRejectWarn structuralPolicy,
                        Entry entry)
   {
-    RDN rdn = entry.getDN().getRDN();
+    RDN rdn = entry.getDN().rdn();
     if (rdn != null)
     {
       // Make sure that all the required attributes are present.
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java b/opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java
index 2fbdd9d..da0a4c2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -468,7 +469,7 @@
     public Connection getConnection() throws DirectoryException
     {
       final Connection connection = factory.getConnection();
-      if (username != null && !username.isNullDN() && password != null
+      if (username != null && !username.isRootDN() && password != null
           && password.length() > 0)
       {
         try
@@ -2179,7 +2180,7 @@
       final String mappedSearchPassword;
       if (cfg.getMappingPolicy() == MappingPolicy.MAPPED_SEARCH
           && cfg.getMappedSearchBindDN() != null
-          && !cfg.getMappedSearchBindDN().isNullDN())
+          && !cfg.getMappedSearchBindDN().isRootDN())
       {
         mappedSearchPassword = getMappedSearchBindPassword(cfg,
             new LinkedList<Message>());
@@ -2587,7 +2588,7 @@
     // Ensure that the search bind password is defined somewhere.
     if (cfg.getMappingPolicy() == MappingPolicy.MAPPED_SEARCH
         && cfg.getMappedSearchBindDN() != null
-        && !cfg.getMappedSearchBindDN().isNullDN())
+        && !cfg.getMappedSearchBindDN().isRootDN())
     {
       if (getMappedSearchBindPassword(cfg, unacceptableReasons) == null)
       {
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java b/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
index 8bc58b3..b50d3a9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -331,7 +331,7 @@
         {
           try
           {
-            userDN = DN.decode(authzIDStr.substring(3));
+            userDN = DN.valueOf(authzIDStr.substring(3));
           }
           catch (DirectoryException de)
           {
@@ -397,7 +397,7 @@
         {
           try
           {
-            userDN = DN.decode(authzIDStr);
+            userDN = DN.valueOf(authzIDStr);
           }
           catch (DirectoryException ignored)
           {
@@ -407,7 +407,7 @@
             }
           }
 
-          if (userDN != null && !userDN.isNullDN()) {
+          if (userDN != null && !userDN.isRootDN()) {
             // If the provided DN is an alternate DN for a root user,
             // then replace it with the actual root DN.
             DN actualRootDN = DirectoryServer.getActualRootBindDN(userDN);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java b/opendj3-server-dev/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java
index eea88fa..4a2bf6f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
@@ -212,7 +212,7 @@
       DN userDN;
       try
       {
-        userDN = DN.decode(authcID.substring(3));
+        userDN = DN.valueOf(authcID.substring(3));
       }
       catch (DirectoryException de)
       {
@@ -229,7 +229,7 @@
         return;
       }
 
-      if (userDN.isNullDN())
+      if (userDN.isRootDN())
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
@@ -335,7 +335,7 @@
         DN authzDN;
         try
         {
-          authzDN = DN.decode(authzID.substring(3));
+          authzDN = DN.valueOf(authzID.substring(3));
         }
         catch (DirectoryException de)
         {
@@ -375,7 +375,7 @@
             return;
           }
 
-          if (authzDN.isNullDN())
+          if (authzDN.isRootDN())
           {
             authZEntry = null;
           }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SASLContext.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SASLContext.java
index 40bb957..a5dbd93 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SASLContext.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SASLContext.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
@@ -726,7 +726,7 @@
 
     try
     {
-      authzDN = DN.decode(responseAuthzID.substring(3));
+      authzDN = DN.valueOf(responseAuthzID.substring(3));
     }
     catch (final DirectoryException e)
     {
@@ -748,7 +748,7 @@
 
     if (!authzDN.equals(authEntry.getDN()))
     {
-      if (authzDN.isNullDN())
+      if (authzDN.isRootDN())
       {
         authzEntry = null;
       }
@@ -990,7 +990,7 @@
     {
       try
       {
-        e = DirectoryServer.getEntry(DN.nullDN());
+        e = DirectoryServer.getEntry(DN.rootDN());
       }
       catch (final DirectoryException ex)
       {
@@ -1091,7 +1091,7 @@
       DN userDN;
       try
       {
-        userDN = DN.decode(userName.substring(3));
+        userDN = DN.valueOf(userName.substring(3));
       }
       catch (final DirectoryException e)
       {
@@ -1104,7 +1104,7 @@
         return;
       }
 
-      if (userDN.isNullDN())
+      if (userDN.isRootDN())
       {
         setCallbackMsg(ERR_SASL_USERNAME_IS_NULL_DN.get(mechanism));
         return;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java
index 38fed49..5ae0262 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  *      Portions Copyright 2013 Manuel Gaupp
  */
 package org.opends.server.extensions;
@@ -258,7 +258,7 @@
     String peerName = peerPrincipal.getName(X500Principal.RFC2253);
     try
     {
-      peerDN = DN.decode(peerName);
+      peerDN = DN.valueOf(peerName);
     }
     catch (DirectoryException de)
     {
@@ -269,7 +269,7 @@
     }
 
     LinkedList<SearchFilter> filterComps = new LinkedList<SearchFilter>();
-    for (int i=0; i < peerDN.getNumComponents(); i++)
+    for (int i=0; i < peerDN.size(); i++)
     {
       RDN rdn = peerDN.getRDN(i);
       for (int j=0; j < rdn.getNumValues(); j++)
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java
index 9c7d529..d72cb85 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -140,7 +140,7 @@
     DN subjectDN;
     try
     {
-      subjectDN = DN.decode(peerPrincipal.getName(X500Principal.RFC2253));
+      subjectDN = DN.valueOf(peerPrincipal.getName(X500Principal.RFC2253));
     }
     catch (Exception e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/ReferentialIntegrityPlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/ReferentialIntegrityPlugin.java
index a1860b0..659e675 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/ReferentialIntegrityPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/ReferentialIntegrityPlugin.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2012 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  *      Portions copyright 2011 profiq s.r.o.
  */
 package org.opends.server.plugins;
@@ -964,12 +964,12 @@
         while((line=reader.readLine()) != null) {
           try {
             String[] a=line.split("[\t]");
-            DN origDn = DN.decode(a[0]);
+            DN origDn = DN.valueOf(a[0]);
             //If there is only a single DN string than it must be a delete.
             if(a.length == 1) {
               processDelete(Collections.singleton(origDn), false);
             } else {
-              DN movedDN=DN.decode(a[1]);
+              DN movedDN=DN.valueOf(a[1]);
               processModifyDN(origDn, movedDN);
             }
           } catch (DirectoryException ex) {
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/SambaPasswordPlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/SambaPasswordPlugin.java
index fee20a4..f148ad2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/SambaPasswordPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/SambaPasswordPlugin.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2011-2012 profiq s.r.o.
- *      Portions copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.plugins;
 
@@ -694,7 +694,7 @@
      */
     final DN authDN = extendedOperation.getAuthorizationDN();
     final DN sambaAdminDN = config.getSambaAdministratorDN();
-    if (sambaAdminDN != null && !sambaAdminDN.isNullDN())
+    if (sambaAdminDN != null && !sambaAdminDN.isRootDN())
     {
       if (authDN.equals(sambaAdminDN))
       {
@@ -844,7 +844,7 @@
      */
     final DN authDN = modifyOperation.getAuthorizationDN();
     final DN sambaAdminDN = config.getSambaAdministratorDN();
-    if (sambaAdminDN != null && !sambaAdminDN.isNullDN())
+    if (sambaAdminDN != null && !sambaAdminDN.isRootDN())
     {
       if (authDN.equals(sambaAdminDN))
       {
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPConnectionHandler.java b/opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPConnectionHandler.java
index 1e24448..93b6eb8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPConnectionHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPConnectionHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.http;
 
@@ -476,7 +477,7 @@
   {
     if (friendlyName == null)
     {
-      friendlyName = config.dn().getRDN().getAttributeValue(0).toString();
+      friendlyName = config.dn().rdn().getAttributeValue(0).toString();
     }
 
     int listenPort = config.getListenPort();
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalClientConnection.java b/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalClientConnection.java
index c8fa85b..249f7ac 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalClientConnection.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalClientConnection.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.protocols.internal;
 
@@ -178,7 +178,7 @@
       operationalAttrs.put(privType, attrList);
 
 
-      DN internalUserDN = DN.decode(fullDNString);
+      DN internalUserDN = DN.valueOf(fullDNString);
       Entry internalUserEntry =
                  new Entry(internalUserDN, objectClasses, userAttrs,
                            operationalAttrs);
@@ -281,7 +281,7 @@
   private static AuthenticationInfo getAuthInfoForDN(DN userDN)
           throws DirectoryException
   {
-    if ((userDN == null) || userDN.isNullDN())
+    if ((userDN == null) || userDN.isRootDN())
     {
       return new AuthenticationInfo();
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalLDAPSocket.java b/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalLDAPSocket.java
index 27e97ba..dd26ee9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalLDAPSocket.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalLDAPSocket.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.internal;
 
@@ -151,7 +152,7 @@
     {
       try
       {
-        conn = new InternalClientConnection(DN.nullDN());
+        conn = new InternalClientConnection(DN.rootDN());
       }
       catch (Exception e)
       {
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java b/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java
index 08c3b25..cf6c911 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.jmx;
 import org.opends.messages.Message;
@@ -242,7 +243,7 @@
     DN bindDN;
     try
     {
-      bindDN = DN.decode(authcID);
+      bindDN = DN.valueOf(authcID);
     }
     catch (Exception e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java
index 13233e1..037de4a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
 
@@ -681,7 +681,7 @@
   {
     if (friendlyName == null)
     {
-      friendlyName = config.dn().getRDN().getAttributeValue(0).toString();
+      friendlyName = config.dn().rdn().getAttributeValue(0).toString();
     }
 
     // Open the selector.
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPReader.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPReader.java
index b8c0f0f..6f3da7a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPReader.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPReader.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
 
@@ -461,7 +462,7 @@
       }
       else
       {
-        matchedDN = DN.decode(dnString);
+        matchedDN = DN.valueOf(dnString);
       }
     }
     catch (Exception e)
@@ -753,7 +754,7 @@
       }
       else
       {
-        matchedDN = DN.decode(dnString);
+        matchedDN = DN.valueOf(dnString);
       }
     }
     catch (Exception e)
@@ -1064,7 +1065,7 @@
       }
       else
       {
-        matchedDN = DN.decode(dnString);
+        matchedDN = DN.valueOf(dnString);
       }
     }
     catch (Exception e)
@@ -1235,7 +1236,7 @@
       }
       else
       {
-        matchedDN = DN.decode(dnString);
+        matchedDN = DN.valueOf(dnString);
       }
     }
     catch (Exception e)
@@ -1468,7 +1469,7 @@
       }
       else
       {
-        matchedDN = DN.decode(dnString);
+        matchedDN = DN.valueOf(dnString);
       }
     }
     catch (Exception e)
@@ -1896,7 +1897,7 @@
       }
       else
       {
-        matchedDN = DN.decode(dnString);
+        matchedDN = DN.valueOf(dnString);
       }
     }
     catch (Exception e)
@@ -2131,7 +2132,7 @@
       }
       else
       {
-        matchedDN = DN.decode(dnString);
+        matchedDN = DN.valueOf(dnString);
       }
     }
     catch (Exception e)
@@ -2519,7 +2520,7 @@
       }
       else
       {
-        matchedDN = DN.decode(dnString);
+        matchedDN = DN.valueOf(dnString);
       }
     }
     catch (Exception e)
@@ -2639,7 +2640,7 @@
     DN dn;
     try
     {
-      dn = DN.decode(reader.readOctetStringAsString());
+      dn = DN.valueOf(reader.readOctetStringAsString());
     }
     catch (Exception e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
index 99b144e..4c139c6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.common;
 
@@ -77,7 +77,7 @@
   public boolean hasValue(Entry entry, VirtualAttributeRule rule)
   {
     // There's only a value for the rootDSE, i.e. the Null DN.
-    return entry.getDN().isNullDN();
+    return entry.getDN().isRootDN();
   }
 
   /** {@inheritDoc} */
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
index 5479d1a..320edee 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.common;
 
@@ -77,7 +77,7 @@
   public boolean hasValue(Entry entry, VirtualAttributeRule rule)
   {
     // There's only a value for the rootDSE, i.e. the Null DN.
-    return entry.getDN().isNullDN();
+    return entry.getDN().isRootDN();
   }
 
   /** {@inheritDoc} */
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
index dc95096..7a54c96 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.common;
 
@@ -77,7 +77,7 @@
   public boolean hasValue(Entry entry, VirtualAttributeRule rule)
   {
     // There's only a value for the rootDSE, i.e. the Null DN.
-    return entry.getDN().isNullDN();
+    return entry.getDN().isRootDN();
 
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/MultiDomainServerState.java b/opendj3-server-dev/src/server/org/opends/server/replication/common/MultiDomainServerState.java
index f6273b6..b0b834d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/MultiDomainServerState.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/common/MultiDomainServerState.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.common;
 
@@ -349,7 +349,7 @@
               serverStateByDomain.update(csn);
             }
           }
-          startStates.put(DN.decode(domainBaseDN), serverStateByDomain);
+          startStates.put(DN.valueOf(domainBaseDN), serverStateByDomain);
         }
       }
       catch (DirectoryException de)
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ExternalChangelogDomain.java b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ExternalChangelogDomain.java
index 5b052f8..ebc82eb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ExternalChangelogDomain.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ExternalChangelogDomain.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -78,7 +78,7 @@
       if (domain==null)
       {
         DN rdns = DN.decode(
-            configuration.dn().getParent().getRDN().getAttributeValue(0).
+            configuration.dn().parent().rdn().getAttributeValue(0).
             getNormalizedValue());
         domain = MultimasterReplication.findDomain(rdns, null);
       }
@@ -113,7 +113,7 @@
       if (domain==null)
       {
         DN rdns = DN.decode(
-            configuration.dn().getParent().getRDN().getAttributeValue(0).
+            configuration.dn().parent().rdn().getAttributeValue(0).
               getNormalizedValue());
         domain = MultimasterReplication.findDomain(rdns, null);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/FakeModdnOperation.java b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/FakeModdnOperation.java
index 669da72..7a5ec58 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/FakeModdnOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/FakeModdnOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -64,7 +64,7 @@
     DN dn = entry.getDN();
     return new ModifyDNMsg(dn, getCSN(),
         EntryHistorical.getEntryUUID(entry),
-        LDAPReplicationDomain.findEntryUUID(dn.getParent()),
-        false, dn.getParent().toString(), dn.getRDN().toString());
+        LDAPReplicationDomain.findEntryUUID(dn.parent()),
+        false, dn.parent().toString(), dn.rdn().toString());
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java
index ace6d55..c784e47 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -414,7 +414,7 @@
     // If we get here, local domain fractional configuration is enabled.
     // Now filter for potential attributes to be removed.
     LDAPReplicationDomain.fractionalRemoveAttributesFromEntry(
-      localFractionalConfig, entry.getDN().getRDN(),
+      localFractionalConfig, entry.getDN().rdn(),
       entry.getObjectClasses(), entry.getUserAttributes(), true);
 
     return PluginResult.ImportLDIF.continueEntryProcessing();
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
index 5dbbd5c..0d9e656 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -1151,7 +1151,7 @@
     PreOperationAddOperation addOperation, boolean performFiltering)
   {
     return fractionalRemoveAttributesFromEntry(fractionalConfig,
-      addOperation.getEntryDN().getRDN(), addOperation.getObjectClasses(),
+      addOperation.getEntryDN().rdn(), addOperation.getObjectClasses(),
       addOperation.getUserAttributes(), performFiltering);
   }
 
@@ -1201,7 +1201,7 @@
      */
 
     boolean inconsistentOperation = false;
-    RDN rdn = modifyDNOperation.getEntryDN().getRDN();
+    RDN rdn = modifyDNOperation.getEntryDN().rdn();
     RDN newRdn = modifyDNOperation.getNewRDN();
 
     // Go through each attribute of the old RDN
@@ -2255,7 +2255,7 @@
      {
        DN entryDN = entryToRename.getDN();
        ModifyDNOperation newOp = renameEntry(
-           entryDN, freedDN.getRDN(), freedDN.getParent(), false);
+           entryDN, freedDN.rdn(), freedDN.parent(), false);
 
        ResultCode res = newOp.getResultCode();
        if (res != ResultCode.SUCCESS)
@@ -2751,7 +2751,7 @@
       RDN currentRDN;
       if (currentDN != null)
       {
-        currentRDN = currentDN.getRDN();
+        currentRDN = currentDN.rdn();
       }
       else
       {
@@ -2907,7 +2907,7 @@
   }
   else
   {
-    newSuperior = entryDN.getParent();
+    newSuperior = entryDN.parent();
   }
 
   //If we could not find the new parent entry, we missed this entry
@@ -2917,12 +2917,12 @@
   // stop the processing.
   if (newSuperior == null)
   {
-    markConflictEntry(op, currentDN, currentDN.getParent().concat(newRDN));
+    markConflictEntry(op, currentDN, currentDN.parent().child(newRDN));
     numUnresolvedNamingConflicts.incrementAndGet();
     return true;
   }
 
-  DN newDN = newSuperior.concat(newRDN);
+  DN newDN = newSuperior.child(newRDN);
 
   if (currentDN == null)
   {
@@ -3032,8 +3032,8 @@
         addConflict(msg);
 
         String conflictRDN =
-            generateConflictRDN(entryUUID, op.getEntryDN().getRDN().toString());
-        msg.setDN(DN.decode(conflictRDN + "," + getBaseDNString()));
+            generateConflictRDN(entryUUID, op.getEntryDN().rdn().toString());
+        msg.setDN(DN.valueOf(conflictRDN + "," + getBaseDNString()));
         // reset the parent entryUUID so that the check done is the
         // handleConflict phase does not fail.
         msg.setParentEntryUUID(null);
@@ -3041,7 +3041,7 @@
       }
       else
       {
-        msg.setDN(DN.decode(msg.getDN().getRDN() + "," + parentDn));
+        msg.setDN(DN.valueOf(msg.getDN().rdn() + "," + parentDn));
         numResolvedNamingConflicts.incrementAndGet();
       }
       return false;
@@ -3067,7 +3067,7 @@
         addConflict(msg);
         String conflictRDN =
             generateConflictRDN(entryUUID, msg.getDN().toNormalizedString());
-        msg.setDN(DN.decode(conflictRDN));
+        msg.setDN(DN.valueOf(conflictRDN));
         numUnresolvedNamingConflicts.incrementAndGet();
         return false;
       }
@@ -3282,7 +3282,7 @@
    */
   private RDN generateDeleteConflictDn(String entryUUID, DN dn)
   {
-    String newRDN =  "entryuuid=" + entryUUID + "+" + dn.getRDN();
+    String newRDN =  "entryuuid=" + entryUUID + "+" + dn.rdn();
     try
     {
       return RDN.decode(newRDN);
@@ -4151,7 +4151,7 @@
   {
     try
     {
-      DN eclConfigEntryDN = DN.decode("cn=external changeLog," + config.dn());
+      DN eclConfigEntryDN = DN.valueOf("cn=external changeLog," + config.dn());
       if (DirectoryServer.getConfigHandler().entryExists(eclConfigEntryDN))
       {
         DirectoryServer.getConfigHandler().deleteEntry(eclConfigEntryDN, null);
@@ -4190,7 +4190,7 @@
         {
           // no ECL config provided hence create a default one
           // create the default one
-          DN eclConfigEntryDN = DN.decode("cn=external changelog," + configDn);
+          DN eclConfigEntryDN = DN.valueOf("cn=external changelog," + configDn);
           if (!DirectoryServer.getConfigHandler().entryExists(eclConfigEntryDN))
           {
             // no entry exist yet for the ECL config for this domain
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/PersistentServerState.java b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/PersistentServerState.java
index e3bf967..bc9f5ba 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/PersistentServerState.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/PersistentServerState.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.replication.plugin;
 
@@ -233,7 +233,7 @@
       LinkedHashSet<String> attributes = new LinkedHashSet<String>(1);
       attributes.add(REPLICATION_STATE);
       InternalSearchOperation op =
-          conn.processSearch(DN.decode("cn=config"),
+          conn.processSearch(DN.valueOf("cn=config"),
           SearchScope.SUBORDINATE_SUBTREE,
           DereferencePolicy.NEVER_DEREF_ALIASES,
           1, 0, false, filter, attributes);
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ECLUpdateMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ECLUpdateMsg.java
index fc43a71..f5a3f74 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ECLUpdateMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ECLUpdateMsg.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.protocol;
 
@@ -98,7 +98,7 @@
 
       // Decode the baseDN
       length = getNextLength(in, pos);
-      this.baseDN = DN.decode(new String(in, pos, length, "UTF-8"));
+      this.baseDN = DN.valueOf(new String(in, pos, length, "UTF-8"));
       pos += length + 1;
 
       // Decode the changeNumber
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeRequestMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeRequestMsg.java
index 9269105..16bf766 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeRequestMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeRequestMsg.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.replication.protocol;
 
@@ -80,7 +80,7 @@
 
       // baseDN
       int length = getNextLength(in, pos);
-      baseDN = DN.decode(new String(in, pos, length, "UTF-8"));
+      baseDN = DN.valueOf(new String(in, pos, length, "UTF-8"));
       pos += length +1;
 
       // sender
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeTargetMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeTargetMsg.java
index 22003b6..f74cf76 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeTargetMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeTargetMsg.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.replication.protocol;
 
@@ -100,7 +100,7 @@
 
       // baseDN
       length = getNextLength(in, pos);
-      baseDN = DN.decode(new String(in, pos, length, "UTF-8"));
+      baseDN = DN.valueOf(new String(in, pos, length, "UTF-8"));
       pos += length +1;
 
       // sender
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/LDAPUpdateMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/LDAPUpdateMsg.java
index 2efa4b1..8018215 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/LDAPUpdateMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/LDAPUpdateMsg.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.protocol;
 
@@ -473,7 +473,7 @@
 
        // Read the dn
        length = getNextLength(encodedMsg, pos);
-       dn = DN.decode(new String(encodedMsg, pos, length, "UTF-8"));
+       dn = DN.valueOf(new String(encodedMsg, pos, length, "UTF-8"));
        pos += length + 1;
 
        // Read the entryuuid
@@ -544,7 +544,7 @@
 
       // read the dn
       length = getNextLength(encodedMsg, pos);
-      dn = DN.decode(new String(encodedMsg, pos, length, "UTF-8"));
+      dn = DN.valueOf(new String(encodedMsg, pos, length, "UTF-8"));
       pos += length + 1;
 
       // read the entryuuid
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java
index 85e6188..ade8077 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.protocol;
 
@@ -671,13 +671,13 @@
   {
     if (newSuperior == null)
     {
-      DN parentDn = getDN().getParent();
-      return parentDn.concat(RDN.decode(newRDN));
+      DN parentDn = getDN().parent();
+      return parentDn.child(RDN.decode(newRDN));
     }
     else
     {
       String newStringDN = newRDN + "," + newSuperior;
-      return DN.decode(newStringDN);
+      return DN.valueOf(newStringDN);
     }
   }
 
@@ -739,7 +739,7 @@
   {
     try
     {
-      DN newSuperiorDN = DN.decode(newSuperior);
+      DN newSuperiorDN = DN.valueOf(newSuperior);
       return newSuperiorDN.equals(targetDN);
     } catch (DirectoryException e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartDSMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartDSMsg.java
index f0edfef..2cc5f91 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartDSMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartDSMsg.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.replication.protocol;
 
@@ -136,7 +136,7 @@
        * first calculate the length then construct the string
        */
       int length = getNextLength(in, pos);
-      baseDN = DN.decode(new String(in, pos, length, "UTF-8"));
+      baseDN = DN.valueOf(new String(in, pos, length, "UTF-8"));
       pos += length +1;
 
       /*
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java
index 5938813..637f924 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.replication.protocol;
 
@@ -136,7 +136,7 @@
        * first calculate the length then construct the string
        */
       int length = getNextLength(in, pos);
-      baseDN = DN.decode(new String(in, pos, length, "UTF-8"));
+      baseDN = DN.valueOf(new String(in, pos, length, "UTF-8"));
       pos += length +1;
 
       /*
@@ -217,7 +217,7 @@
        * first calculate the length then construct the string
        */
       int length = getNextLength(in, pos);
-      baseDN = DN.decode(new String(in, pos, length, "UTF-8"));
+      baseDN = DN.valueOf(new String(in, pos, length, "UTF-8"));
       pos += length +1;
 
       /*
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ServerStartMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ServerStartMsg.java
index 65a319f..6ce2b9d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ServerStartMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ServerStartMsg.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.replication.protocol;
 
@@ -124,7 +124,7 @@
        * first calculate the length then construct the string
        */
       int length = getNextLength(in, pos);
-      baseDN = DN.decode(new String(in, pos, length, "UTF-8"));
+      baseDN = DN.valueOf(new String(in, pos, length, "UTF-8"));
       pos += length +1;
 
       /*
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerHandler.java
index 93ade2f..6c72591 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -413,7 +413,7 @@
     super(session, queueSize, replicationServer, rcvWindowSize);
     try
     {
-      DN baseDN = DN.decode(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
+      DN baseDN = DN.valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
       setBaseDNAndDomain(baseDN, true);
     }
     catch(DirectoryException de)
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationBackend.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationBackend.java
index b54d33c..948f173 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationBackend.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.server;
 
@@ -533,7 +533,7 @@
 
     for (ReplicationServerDomain domain : domains)
     {
-      DN baseDN = DN.decode(domain.getBaseDN() + "," + BASE_DN);
+      DN baseDN = DN.valueOf(domain.getBaseDN() + "," + BASE_DN);
       for (DN includeBranch : includeBranches)
       {
         if (includeBranch.isDescendantOf(baseDN)
@@ -566,7 +566,7 @@
     try
     {
       ChangeRecordEntry changeRecord =
-        new AddChangeRecordEntry(DN.decode(BASE_DN), attrs);
+        new AddChangeRecordEntry(DN.valueOf(BASE_DN), attrs);
       ldifWriter.writeChangeRecord(changeRecord);
     }
     catch (Exception e) { /* do nothing */ }
@@ -597,7 +597,7 @@
       final String dnString = domain.getBaseDN() + "," + BASE_DN;
       try
       {
-        DN dn = DN.decode(dnString);
+        DN dn = DN.valueOf(dnString);
         ldifWriter.writeChangeRecord(new AddChangeRecordEntry(dn, attrs));
       }
       catch (Exception e)
@@ -775,7 +775,7 @@
           AddMsg addMsg = (AddMsg)msg;
           AddOperation addOperation = (AddOperation)msg.createOperation(conn);
 
-          dn = DN.decode("puid=" + addMsg.getParentEntryUUID() + "+" +
+          dn = DN.valueOf("puid=" + addMsg.getParentEntryUUID() + "+" +
               CHANGE_NUMBER + "=" + msg.getCSN() + "+" +
               msg.getDN() + "," + BASE_DN);
 
@@ -897,7 +897,7 @@
 
   private DN computeDN(LDAPUpdateMsg msg) throws DirectoryException
   {
-    return DN.decode("uuid=" + msg.getEntryUUID() + "," + CHANGE_NUMBER + "="
+    return DN.valueOf("uuid=" + msg.getEntryUUID() + "," + CHANGE_NUMBER + "="
         + msg.getCSN() + "," + msg.getDN() + "," + BASE_DN);
   }
 
@@ -1147,7 +1147,7 @@
     // don't do anything if the search is a base search on the backend suffix.
     try
     {
-      DN backendBaseDN = DN.decode(BASE_DN);
+      DN backendBaseDN = DN.valueOf(BASE_DN);
       if ( searchOperation.getScope().equals(SearchScope.BASE_OBJECT) &&
            backendBaseDN.equals(searchOperation.getBaseDN()) )
       {
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
index 97cb8e0..762ac4b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.server;
 
@@ -151,8 +151,8 @@
     configuration.addChangeListener(this);
     try
     {
-      backendConfigEntryDN =
-         DN.decode("ds-cfg-backend-id=" + backendId + ",cn=Backends,cn=config");
+      backendConfigEntryDN = DN.valueOf("ds-cfg-backend-id=" +
+          backendId + ",cn=Backends,cn=config");
     } catch (DirectoryException e) { /* do nothing */ }
 
     // Creates the backend associated to this ReplicationServer
@@ -469,7 +469,7 @@
 
     // Create the workflow for the base DN
     // and register the workflow with the server.
-    final DN dn = DN.decode(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
+    final DN dn = DN.valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
     final WorkflowImpl workflowImpl = new WorkflowImpl(eclWorkflowID, dn,
         eclwe.getWorkflowElementID(), eclwe);
     if (!eclWorkflowImpl.compareAndSet(null, workflowImpl))
@@ -505,7 +505,7 @@
 
     try
     {
-      Set<DN> baseDNs = Collections.singleton(DN.decode(""));
+      Set<DN> baseDNs = Collections.singleton(DN.valueOf(""));
       Set<DN> groupDNs = Collections.emptySet();
       Set<SearchFilter> filters = Collections.singleton(
           SearchFilter.createFilterFromString("(objectclass=*)"));
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java
index 75f4ff4..3cac7b3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2010-2013 ForgeRock AS.
+ *      Portions Copyright 2010-2014 ForgeRock AS.
  */
 package org.opends.server.replication.server.changelog.je;
 
@@ -104,7 +104,7 @@
     {
       String stringData = new String(data, "UTF-8");
       String[] str = stringData.split(FIELD_SEPARATOR, 3);
-      final DN baseDN = DN.decode(str[1]);
+      final DN baseDN = DN.valueOf(str[1]);
       final CSN csn = new CSN(str[2]);
       return new ChangeNumberIndexRecord(changeNumber, str[0], baseDN, csn);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java
index fb11b44..4fa4099 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java
@@ -218,7 +218,7 @@
         if (str[0].equals(GENERATION_ID_TAG))
         {
           long generationId = toLong(str[1]);
-          DN baseDN = DN.decode(str[2]);
+          DN baseDN = DN.valueOf(str[2]);
 
           if (debugEnabled())
             debug("has read baseDN=" + baseDN + " generationId=" +generationId);
@@ -228,7 +228,7 @@
         else
         {
           int serverId = toInt(str[0]);
-          DN baseDN = DN.decode(str[1]);
+          DN baseDN = DN.valueOf(str[1]);
 
           if (debugEnabled())
             debug("has read: baseDN=" + baseDN + " serverId=" + serverId);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/AciSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/AciSyntax.java
index 32fa9fa..a0554ff 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/AciSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/AciSyntax.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.schema;
 
@@ -224,7 +224,7 @@
   {
     try
     {
-      Aci.decode(value, DN.nullDN());
+      Aci.decode(value, DN.rootDN());
     }
     catch (AciException e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java
index 506be24..8021045 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.schema;
 
@@ -161,7 +162,7 @@
     DN dn;
     try
     {
-      dn = DN.decode(value.toString());
+      dn = DN.valueOf(value.toString());
     }
     catch (DirectoryException de)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameSyntax.java
index 12f8b16..7a03cf3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameSyntax.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.schema;
 
@@ -81,7 +81,7 @@
      */
     public DN decode(AttributeValue value) throws DirectoryException
     {
-      return DN.decode(value.getValue().toString());
+      return DN.valueOf(value.getValue().toString());
     }
   };
 
@@ -241,7 +241,7 @@
     // Use the DN code to make this determination.
     try
     {
-      DN.decode(value.toString());
+      DN.valueOf(value.toString());
 
       return true;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java
index e89cd55..53135dd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.schema;
 
@@ -246,7 +246,7 @@
     // Take the DN portion of the string and try to normalize it.
     try
     {
-      DN.decode(valueString.substring(0, dnEndPos));
+      DN.valueOf(valueString.substring(0, dnEndPos));
     }
     catch (Exception e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java
index afecb0c..f7a617d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.schema;
 
@@ -251,7 +251,7 @@
 
     // Use the subtree specification code to make this determination.
     try {
-      SubtreeSpecification.valueOf(DN.nullDN(), value.toString());
+      SubtreeSpecification.valueOf(DN.rootDN(), value.toString());
 
       return true;
     } catch (DirectoryException e) {
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java
index c4d1b32..75cdbcc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.schema;
 
@@ -180,7 +181,7 @@
     StringBuilder valueBuffer = new StringBuilder(valueLength);
     try
     {
-      DN dn = DN.decode(valueString.substring(0, dnEndPos));
+      DN dn = DN.valueOf(valueString.substring(0, dnEndPos));
       dn.toNormalizedString(valueBuffer);
     }
     catch (Exception e)
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/BackupTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/BackupTask.java
index 08b5584..15f3417 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/BackupTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/BackupTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 import org.opends.messages.Message;
@@ -436,7 +437,7 @@
           {
             Message message = ERR_BACKUPDB_CANNOT_BACKUP_IN_DIRECTORY.get(
                 b.getBackendID(),backupLocation.getPath(),
-                backupDir.getConfigEntryDN().getRDN().
+                backupDir.getConfigEntryDN().rdn().
                 getAttributeValue(0).toString());
             logError(message);
             return false ;
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/ExportTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/ExportTask.java
index db79f29..78e407f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/ExportTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/ExportTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 import org.opends.messages.Message;
@@ -450,7 +451,7 @@
         DN excludeBranch;
         try
         {
-          excludeBranch = DN.decode(s);
+          excludeBranch = DN.valueOf(s);
         }
         catch (DirectoryException de)
         {
@@ -484,7 +485,7 @@
         DN includeBranch;
         try
         {
-          includeBranch = DN.decode(s);
+          includeBranch = DN.valueOf(s);
         }
         catch (DirectoryException de)
         {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/ImportTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/ImportTask.java
index 9d7c460..efcb0b4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/ImportTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/ImportTask.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 import org.opends.messages.Message;
@@ -413,7 +413,7 @@
       DN includeBranch;
       try
       {
-        includeBranch = DN.decode(s);
+        includeBranch = DN.valueOf(s);
       }
       catch (DirectoryException de)
       {
@@ -438,7 +438,7 @@
       DN excludeBranch;
       try
       {
-        excludeBranch = DN.decode(s);
+        excludeBranch = DN.valueOf(s);
       }
       catch (DirectoryException de)
       {
@@ -682,7 +682,7 @@
       DN includeBranch;
       try
       {
-        includeBranch = DN.decode(s);
+        includeBranch = DN.valueOf(s);
       }
       catch (DirectoryException de)
       {
@@ -802,7 +802,7 @@
       DN excludeBranch;
       try
       {
-        excludeBranch = DN.decode(s);
+        excludeBranch = DN.valueOf(s);
       }
       catch (DirectoryException de)
       {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTargetTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTargetTask.java
index 5ccfab6..d944520 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTargetTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTargetTask.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 
@@ -92,7 +92,7 @@
 
     try
     {
-      DN dn = DN.decode(domainString);
+      DN dn = DN.valueOf(domainString);
       // We can assume that this is an LDAP replication domain
       domain = LDAPReplicationDomain.retrievesReplicationDomain(dn);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTask.java
index 498f01a..5ef1a48 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTask.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 
@@ -107,7 +107,7 @@
 
     try
     {
-      DN dn = DN.decode(domainString);
+      DN dn = DN.valueOf(domainString);
       // We can assume that this is an LDAP replication domain
       domain = LDAPReplicationDomain.retrievesReplicationDomain(dn);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/PurgeConflictsHistoricalTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/PurgeConflictsHistoricalTask.java
index 1f210f7..313aecb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/PurgeConflictsHistoricalTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/PurgeConflictsHistoricalTask.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 
@@ -121,7 +121,7 @@
 
     try
     {
-      DN dn = DN.decode(domainString);
+      DN dn = DN.valueOf(domainString);
       // We can assume that this is an LDAP replication domain
       domain = LDAPReplicationDomain.retrievesReplicationDomain(dn);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/RebuildTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/RebuildTask.java
index d792245..0892012 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/RebuildTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/RebuildTask.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.tasks;
 
@@ -174,7 +174,7 @@
 
     try
     {
-      rebuildConfig.setBaseDN(DN.decode(baseDN));
+      rebuildConfig.setBaseDN(DN.valueOf(baseDN));
     }
     catch (DirectoryException de)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/SetGenerationIdTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/SetGenerationIdTask.java
index b403b87..995b642 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/SetGenerationIdTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/SetGenerationIdTask.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 
@@ -108,7 +108,7 @@
 
     try
     {
-      DN dn = DN.decode(domainString);
+      DN dn = DN.valueOf(domainString);
       domain = LDAPReplicationDomain.retrievesReplicationDomain(dn);
     }
     catch(DirectoryException e)
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/TaskUtils.java b/opendj3-server-dev/src/server/org/opends/server/tasks/TaskUtils.java
index 9ed9ee3..d9dc606 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/TaskUtils.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/TaskUtils.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 
@@ -122,7 +123,7 @@
     DN backendBaseDN;
     try
     {
-      backendBaseDN = DN.decode(DN_BACKEND_BASE);
+      backendBaseDN = DN.valueOf(DN_BACKEND_BASE);
     }
     catch (DirectoryException de)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/BackendToolUtils.java b/opendj3-server-dev/src/server/org/opends/server/tools/BackendToolUtils.java
index 320b1bc..da1cb30 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/BackendToolUtils.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/BackendToolUtils.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tools;
 
@@ -77,7 +77,7 @@
     DN backendBaseDN;
     try
     {
-      backendBaseDN = DN.decode(DN_BACKEND_BASE);
+      backendBaseDN = DN.valueOf(DN_BACKEND_BASE);
     }
     catch (DirectoryException de)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/ConfigureDS.java b/opendj3-server-dev/src/server/org/opends/server/tools/ConfigureDS.java
index b1721e5..3875ef2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/ConfigureDS.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/ConfigureDS.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.tools;
 
@@ -553,7 +553,7 @@
         {
           try
           {
-            baseDNs.add(DN.decode(dnString));
+            baseDNs.add(DN.valueOf(dnString));
           }
           catch (DirectoryException de)
           {
@@ -575,7 +575,7 @@
       {
         try
         {
-          rootDN = DN.decode(rootDNString.getValue());
+          rootDN = DN.valueOf(rootDNString.getValue());
         }
         catch (DirectoryException de)
         {
@@ -615,9 +615,9 @@
         DN JCEKSProviderDN = null;
         try
         {
-          dn = DN.decode(keyManagerProviderDN.getValue());
+          dn = DN.valueOf(keyManagerProviderDN.getValue());
           JCEKSProviderDN =
-            DN.decode("cn=JCEKS,cn=Key Manager Providers,cn=config");
+            DN.valueOf("cn=JCEKS,cn=Key Manager Providers,cn=config");
         }
         catch (DirectoryException de)
         {
@@ -687,9 +687,9 @@
         DN JCEKSTrustManagerDN = null;
         try
         {
-          dn = DN.decode(trustManagerProviderDN.getValue());
+          dn = DN.valueOf(trustManagerProviderDN.getValue());
           JCEKSTrustManagerDN =
-            DN.decode("cn=JCEKS,cn=Trust Manager Providers,cn=config");
+            DN.valueOf("cn=JCEKS,cn=Trust Manager Providers,cn=config");
         }
         catch (DirectoryException de)
         {
@@ -766,7 +766,7 @@
       {
         try
         {
-          DN jeBackendDN = DN.decode(DN_JE_BACKEND);
+          DN jeBackendDN = DN.valueOf(DN_JE_BACKEND);
           ConfigEntry configEntry = configHandler.getConfigEntry(jeBackendDN);
 
           DNConfigAttribute baseDNAttr =
@@ -791,7 +791,7 @@
       {
         try
         {
-          DN ldapListenerDN = DN.decode(DN_LDAP_CONNECTION_HANDLER);
+          DN ldapListenerDN = DN.valueOf(DN_LDAP_CONNECTION_HANDLER);
           ConfigEntry configEntry =
                configHandler.getConfigEntry(ldapListenerDN);
 
@@ -818,7 +818,7 @@
       {
         try
         {
-          DN adminConnectorDN = DN.decode(DN_ADMIN_CONNECTOR);
+          DN adminConnectorDN = DN.valueOf(DN_ADMIN_CONNECTOR);
           ConfigEntry configEntry =
                configHandler.getConfigEntry(adminConnectorDN);
 
@@ -845,7 +845,7 @@
       {
         try
         {
-          DN ldapListenerDN = DN.decode(DN_LDAPS_CONNECTION_HANDLER);
+          DN ldapListenerDN = DN.valueOf(DN_LDAPS_CONNECTION_HANDLER);
           ConfigEntry configEntry =
                configHandler.getConfigEntry(ldapListenerDN);
 
@@ -877,7 +877,7 @@
       {
         try
         {
-          DN jmxListenerDN = DN.decode(DN_JMX_CONNECTION_HANDLER);
+          DN jmxListenerDN = DN.valueOf(DN_JMX_CONNECTION_HANDLER);
           ConfigEntry configEntry =
                configHandler.getConfigEntry(jmxListenerDN);
 
@@ -909,7 +909,7 @@
       {
         try
         {
-          DN ldapListenerDN = DN.decode(DN_LDAP_CONNECTION_HANDLER);
+          DN ldapListenerDN = DN.valueOf(DN_LDAP_CONNECTION_HANDLER);
           ConfigEntry configEntry =
                configHandler.getConfigEntry(ldapListenerDN);
 
@@ -937,7 +937,7 @@
           try
           {
             // Enable the key manager
-            DN dn = DN.decode(keyManagerProviderDN.getValue());
+            DN dn = DN.valueOf(keyManagerProviderDN.getValue());
             ConfigEntry configEntry = configHandler.getConfigEntry(dn);
 
             BooleanConfigAttribute enableAttr =
@@ -960,7 +960,7 @@
           if (enableStartTLS.isPresent())
           {
             // Use the key manager specified for the LDAP connection handler.
-            DN ldapListenerDN = DN.decode(DN_LDAP_CONNECTION_HANDLER);
+            DN ldapListenerDN = DN.valueOf(DN_LDAP_CONNECTION_HANDLER);
             ConfigEntry configEntry =
               configHandler.getConfigEntry(ldapListenerDN);
 
@@ -974,7 +974,7 @@
           if (ldapsPort.isPresent())
           {
             // Use the key manager specified for the LDAPS connection handler.
-            DN ldapsListenerDN = DN.decode(DN_LDAPS_CONNECTION_HANDLER);
+            DN ldapsListenerDN = DN.valueOf(DN_LDAPS_CONNECTION_HANDLER);
             ConfigEntry configEntry =
               configHandler.getConfigEntry(ldapsListenerDN);
 
@@ -999,7 +999,7 @@
           try
           {
             // Enable the key manager
-            DN dn = DN.decode(keyManagerProviderDN.getValue());
+            DN dn = DN.valueOf(keyManagerProviderDN.getValue());
             ConfigEntry configEntry = configHandler.getConfigEntry(dn);
 
             StringConfigAttribute pathAttr =
@@ -1023,7 +1023,7 @@
           // Enable the trust manager
           try
           {
-            DN dn = DN.decode(trustManagerProviderDN.getValue());
+            DN dn = DN.valueOf(trustManagerProviderDN.getValue());
             ConfigEntry configEntry = configHandler.getConfigEntry(dn);
 
             BooleanConfigAttribute enableAttr =
@@ -1046,7 +1046,7 @@
           if (enableStartTLS.isPresent())
           {
             // Use the trust manager specified for the LDAP connection handler.
-            DN ldapListenerDN = DN.decode(DN_LDAP_CONNECTION_HANDLER);
+            DN ldapListenerDN = DN.valueOf(DN_LDAP_CONNECTION_HANDLER);
             ConfigEntry configEntry =
               configHandler.getConfigEntry(ldapListenerDN);
 
@@ -1061,7 +1061,7 @@
           if (ldapsPort.isPresent())
           {
             // Use the trust manager specified for the LDAPS connection handler.
-            DN ldapsListenerDN = DN.decode(DN_LDAPS_CONNECTION_HANDLER);
+            DN ldapsListenerDN = DN.valueOf(DN_LDAPS_CONNECTION_HANDLER);
             ConfigEntry configEntry =
               configHandler.getConfigEntry(ldapsListenerDN);
 
@@ -1093,7 +1093,7 @@
                     INFO_LDAP_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME.get(),
                 false, false, true, certNickName.getValue());
 
-          DN ldapListenerDN = DN.decode(DN_LDAP_CONNECTION_HANDLER);
+          DN ldapListenerDN = DN.valueOf(DN_LDAP_CONNECTION_HANDLER);
           ConfigEntry configEntry =
             configHandler.getConfigEntry(ldapListenerDN);
           if (ldapPort.isPresent())
@@ -1108,7 +1108,7 @@
           }
 
           // Use the key manager specified for the LDAPS connection handler.
-          DN ldapsListenerDN = DN.decode(DN_LDAPS_CONNECTION_HANDLER);
+          DN ldapsListenerDN = DN.valueOf(DN_LDAPS_CONNECTION_HANDLER);
           configEntry = configHandler.getConfigEntry(ldapsListenerDN);
           if (ldapsPort.isPresent())
           {
@@ -1125,7 +1125,7 @@
                   false, false, true, certNickName.getValue());
 
           // Use the key manager specified for the JMX connection handler.
-          DN jmxListenerDN = DN.decode(DN_JMX_CONNECTION_HANDLER);
+          DN jmxListenerDN = DN.valueOf(DN_JMX_CONNECTION_HANDLER);
           configEntry = configHandler.getConfigEntry(jmxListenerDN);
           if (jmxPort.isPresent())
           {
@@ -1150,7 +1150,7 @@
         try
         {
           // Use the key manager specified for the LDAP connection handler.
-          DN ldapListenerDN = DN.decode(DN_LDAP_CONNECTION_HANDLER);
+          DN ldapListenerDN = DN.valueOf(DN_LDAP_CONNECTION_HANDLER);
           ConfigEntry configEntry =
             configHandler.getConfigEntry(ldapListenerDN);
 
@@ -1158,14 +1158,14 @@
               ATTR_SSL_CERT_NICKNAME.toLowerCase());
 
           // Use the key manager specified for the LDAPS connection handler.
-          DN ldapsListenerDN = DN.decode(DN_LDAPS_CONNECTION_HANDLER);
+          DN ldapsListenerDN = DN.valueOf(DN_LDAPS_CONNECTION_HANDLER);
           configEntry = configHandler.getConfigEntry(ldapsListenerDN);
 
           configEntry.removeConfigAttribute(
               ATTR_SSL_CERT_NICKNAME.toLowerCase());
 
           // Use the key manager specified for the JMX connection handler.
-          DN jmxListenerDN = DN.decode(DN_JMX_CONNECTION_HANDLER);
+          DN jmxListenerDN = DN.valueOf(DN_JMX_CONNECTION_HANDLER);
           configEntry = configHandler.getConfigEntry(jmxListenerDN);
 
           configEntry.removeConfigAttribute(
@@ -1186,7 +1186,7 @@
       {
         try
         {
-          DN rootUserDN = DN.decode(DN_ROOT_USER);
+          DN rootUserDN = DN.valueOf(DN_ROOT_USER);
           ConfigEntry configEntry = configHandler.getConfigEntry(rootUserDN);
 
           DNConfigAttribute bindDNAttr =
@@ -1217,7 +1217,7 @@
       // Set the FQDN for the DIGEST-MD5 SASL mechanism.
       try
       {
-        DN digestMD5DN = DN.decode(DN_DIGEST_MD5_SASL_MECHANISM);
+        DN digestMD5DN = DN.valueOf(DN_DIGEST_MD5_SASL_MECHANISM);
         ConfigEntry configEntry = configHandler.getConfigEntry(digestMD5DN);
         StringConfigAttribute fqdnAttr = new StringConfigAttribute(
             "ds-cfg-server-fqdn", Message.EMPTY, false, false, false,
@@ -1264,7 +1264,7 @@
           {
             try
             {
-              DN cipherDN = DN.decode(DN_CRYPTO_MANAGER);
+              DN cipherDN = DN.valueOf(DN_CRYPTO_MANAGER);
               ConfigEntry configEntry = configHandler.getConfigEntry(cipherDN);
 
               // Set the alternative cipher
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java b/opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java
index 234a930..27588e8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tools;
 
@@ -741,7 +741,7 @@
     {
       try
       {
-        base = DN.decode(baseDN.getValue());
+        base = DN.valueOf(baseDN.getValue());
       }
       catch(DirectoryException de)
       {
@@ -916,7 +916,7 @@
     {
       try
       {
-        base = DN.decode(baseDN.getValue());
+        base = DN.valueOf(baseDN.getValue());
       }
       catch(DirectoryException de)
       {
@@ -1173,7 +1173,7 @@
 
     try
     {
-      base = DN.decode(baseDN.getValue());
+      base = DN.valueOf(baseDN.getValue());
     }
     catch(DirectoryException de)
     {
@@ -1316,7 +1316,7 @@
               {
                 // Encode the value as a DN
                 start = StaticUtils.getBytes(
-                    DN.decode(minKeyValue.getValue()).toNormalizedString());
+                    DN.valueOf(minKeyValue.getValue()).toNormalizedString());
               }
               else if(databaseContainer instanceof ID2Entry)
               {
@@ -1365,7 +1365,7 @@
               {
                 // Encode the value as a DN
                 end = StaticUtils.getBytes(
-                    DN.decode(maxKeyValue.getValue()).toNormalizedString());
+                    DN.valueOf(maxKeyValue.getValue()).toNormalizedString());
               }
               else if(databaseContainer instanceof ID2Entry)
               {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/EncodePassword.java b/opendj3-server-dev/src/server/org/opends/server/tools/EncodePassword.java
index 4ab89bd..9f57408 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/EncodePassword.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/EncodePassword.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.tools;
 
@@ -887,7 +887,7 @@
     RootCfg root = context.getRootConfiguration();
     ConfigEntry backendRoot;
     try {
-      DN configEntryDN = DN.decode(ConfigConstants.DN_BACKEND_BASE);
+      DN configEntryDN = DN.valueOf(ConfigConstants.DN_BACKEND_BASE);
       backendRoot   = DirectoryServer.getConfigEntry(configEntryDN);
     } catch (Exception e) {
       if (debugEnabled()) {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/ExportLDIF.java b/opendj3-server-dev/src/server/org/opends/server/tools/ExportLDIF.java
index 1ac2726..5f0596f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/ExportLDIF.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/ExportLDIF.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.tools;
 
@@ -843,7 +843,7 @@
         DN excludeBranch;
         try
         {
-          excludeBranch = DN.decode(s);
+          excludeBranch = DN.valueOf(s);
         }
         catch (DirectoryException de)
         {
@@ -877,7 +877,7 @@
         DN includeBranch;
         try
         {
-          includeBranch = DN.decode(s);
+          includeBranch = DN.valueOf(s);
         }
         catch (DirectoryException de)
         {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/ImportLDIF.java b/opendj3-server-dev/src/server/org/opends/server/tools/ImportLDIF.java
index 1000488..02b9af6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/ImportLDIF.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/ImportLDIF.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.tools;
 
@@ -1141,7 +1141,7 @@
         DN includeBranch;
         try
         {
-          includeBranch = DN.decode(s);
+          includeBranch = DN.valueOf(s);
         }
         catch (DirectoryException de)
         {
@@ -1282,7 +1282,7 @@
       DN excludeBranch;
       try
       {
-        excludeBranch = DN.decode(s);
+        excludeBranch = DN.valueOf(s);
       }
       catch (DirectoryException de)
       {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDIFDiff.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDIFDiff.java
index 94fdb73..9ce208a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDIFDiff.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDIFDiff.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.tools;
 import java.io.BufferedReader;
@@ -387,7 +387,7 @@
         {
           try
           {
-            DN dn = DN.decode(line);
+            DN dn = DN.valueOf(line);
             ignoreEntries.add(dn);
           }
           catch (DirectoryException e)
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDIFSearch.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDIFSearch.java
index 0c266e0..2a56cd0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDIFSearch.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDIFSearch.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tools;
 import java.io.BufferedReader;
@@ -593,7 +593,7 @@
       {
         try
         {
-          baseDNs.add(DN.decode(dnString));
+          baseDNs.add(DN.valueOf(dnString));
         }
         catch (Exception e)
         {
@@ -606,7 +606,7 @@
     }
     else
     {
-      baseDNs.add(DN.nullDN());
+      baseDNs.add(DN.rootDN());
     }
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/ListBackends.java b/opendj3-server-dev/src/server/org/opends/server/tools/ListBackends.java
index 2903149..8b78069 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/ListBackends.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/ListBackends.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012-2013 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.tools;
 import org.opends.messages.Message;
@@ -353,7 +353,7 @@
         DN dn;
         try
         {
-          dn = DN.decode(dnStr);
+          dn = DN.valueOf(dnStr);
         }
         catch (DirectoryException de)
         {
@@ -378,7 +378,7 @@
                   dn.toString());
           out.println(message);
 
-          DN parentDN = dn.getParent();
+          DN parentDN = dn.parent();
           while (true)
           {
             if (parentDN == null)
@@ -401,7 +401,7 @@
               }
             }
 
-            parentDN = parentDN.getParent();
+            parentDN = parentDN.parent();
           }
         }
         else
@@ -483,7 +483,7 @@
           {
             isFirst = false;
           }
-          if (dn.getNumComponents() > 1)
+          if (dn.size() > 1)
           {
             buf.append("\""+dn.toString()+"\"");
           }
@@ -522,7 +522,7 @@
     DN backendBaseDN = null;
     try
     {
-      backendBaseDN = DN.decode(DN_BACKEND_BASE);
+      backendBaseDN = DN.valueOf(DN_BACKEND_BASE);
     }
     catch (DirectoryException de)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/RebuildIndex.java b/opendj3-server-dev/src/server/org/opends/server/tools/RebuildIndex.java
index 7c660ea..7806018 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/RebuildIndex.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/RebuildIndex.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.tools;
 
@@ -360,7 +360,7 @@
     DN rebuildBaseDN = null;
     try
     {
-      rebuildBaseDN = DN.decode(dn);
+      rebuildBaseDN = DN.valueOf(dn);
     }
     catch (Exception e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/VerifyIndex.java b/opendj3-server-dev/src/server/org/opends/server/tools/VerifyIndex.java
index bbfe9f8..950d1e5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/VerifyIndex.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/VerifyIndex.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.tools;
 
@@ -391,7 +391,7 @@
     DN verifyBaseDN ;
     try
     {
-      verifyBaseDN = DN.decode(baseDNString.getValue());
+      verifyBaseDN = DN.valueOf(baseDNString.getValue());
     }
     catch (DirectoryException de)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java
index 02ff829..cc24549 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.tools.dsreplication;
 
@@ -163,7 +163,7 @@
       // launch the job
       for (String baseDN : uData.getBaseDNs())
       {
-        DN dn = DN.decode(baseDN);
+        DN dn = DN.valueOf(baseDN);
         // We can assume that this is an LDAP replication domain
         LDAPReplicationDomain domain =
             LDAPReplicationDomain.retrievesReplicationDomain(dn);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
index 9ca5a8f..b728e55 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  *      Portions Copyright 2012 profiq s.r.o.
  */
 
@@ -7791,7 +7791,7 @@
           ReplicationDomainCfgDefn.getInstance(), domainName,
           new ArrayList<DefaultBehaviorException>());
       domain.setServerId(domainId);
-      domain.setBaseDN(DN.decode(baseDN));
+      domain.setBaseDN(DN.valueOf(baseDN));
       domain.setReplicationServer(replicationServers);
       mustCommit = true;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Branch.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Branch.java
index 628787e..56d3793 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Branch.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Branch.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
 import org.opends.messages.Message;
@@ -355,7 +356,7 @@
    */
   public boolean hasAttribute(AttributeType attributeType)
   {
-    if (branchDN.getRDN().hasAttributeType(attributeType))
+    if (branchDN.rdn().hasAttributeType(attributeType))
     {
       return true;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/DNTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/DNTag.java
index 7a0e5bb..ecc388f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/DNTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/DNTag.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
 import org.opends.messages.Message;
@@ -190,7 +191,7 @@
                                  TemplateValue templateValue)
   {
     DN dn = templateEntry.getDN();
-    if ((dn == null) || dn.isNullDN())
+    if ((dn == null) || dn.isRootDN())
     {
       return TagResult.SUCCESS_RESULT;
     }
@@ -201,7 +202,7 @@
     }
     else if (numComponents > 0)
     {
-      int count = Math.min(numComponents, dn.getNumComponents());
+      int count = Math.min(numComponents, dn.size());
 
       dn.getRDN(0).toString(templateValue.getValue());
       for (int i = 1; i < count; i++)
@@ -212,7 +213,7 @@
     }
     else
     {
-      int sz = dn.getNumComponents();
+      int sz = dn.size();
       int count = Math.min(Math.abs(numComponents), sz);
 
       dn.getRDN(sz - count).toString(templateValue.getValue());
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ParentDNTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ParentDNTag.java
index da4d55c..3813a35 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ParentDNTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ParentDNTag.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
 import org.opends.messages.Message;
@@ -123,7 +124,7 @@
                                  TemplateValue templateValue)
   {
     DN parentDN = templateEntry.getParentDN();
-    if ((parentDN == null) || parentDN.isNullDN())
+    if ((parentDN == null) || parentDN.isRootDN())
     {
       return TagResult.SUCCESS_RESULT;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RDNTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RDNTag.java
index 3eac2a8..96bcef4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RDNTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RDNTag.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
 import org.opends.messages.Message;
@@ -153,13 +154,13 @@
                                  TemplateValue templateValue)
   {
     DN dn = templateEntry.getDN();
-    if ((dn == null) || dn.isNullDN())
+    if ((dn == null) || dn.isRootDN())
     {
       return TagResult.SUCCESS_RESULT;
     }
     else
     {
-      dn.getRDN().toString(templateValue.getValue());
+      dn.rdn().toString(templateValue.getValue());
       return TagResult.SUCCESS_RESULT;
     }
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateEntry.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateEntry.java
index 98b7084..f5b492e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateEntry.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateEntry.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
 
@@ -189,7 +190,7 @@
         rdn = new RDN(rdnAttrs, names, values);
       }
 
-      dn = parentDN.concat(rdn);
+      dn = parentDN.child(rdn);
     }
 
     return dn;
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateFile.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateFile.java
index eaec5d7..aa2bbe9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateFile.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateFile.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.tools.makeldif;
 import org.opends.messages.Message;
@@ -1000,7 +1000,7 @@
     DN branchDN;
     try
     {
-      branchDN = DN.decode(dnString);
+      branchDN = DN.valueOf(dnString);
     }
     catch (Exception e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java
index 2c2ae9a..3ffbb6e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
 import org.opends.messages.Message;
@@ -190,7 +191,7 @@
                                  TemplateValue templateValue)
   {
     DN dn = templateEntry.getDN();
-    if ((dn == null) || dn.isNullDN())
+    if ((dn == null) || dn.isRootDN())
     {
       return TagResult.SUCCESS_RESULT;
     }
@@ -198,7 +199,7 @@
     if (numComponents == 0)
     {
       dn.getRDN(0).toString(templateValue.getValue());
-      for (int i=1; i < dn.getNumComponents(); i++)
+      for (int i=1; i < dn.size(); i++)
       {
         templateValue.append("_");
         dn.getRDN(i).toString(templateValue.getValue());
@@ -206,7 +207,7 @@
     }
     else if (numComponents > 0)
     {
-      int count = Math.min(numComponents, dn.getNumComponents());
+      int count = Math.min(numComponents, dn.size());
 
       dn.getRDN(0).toString(templateValue.getValue());
       for (int i = 1; i < count; i++)
@@ -217,7 +218,7 @@
     }
     else
     {
-      int sz = dn.getNumComponents();
+      int sz = dn.size();
       int count = Math.min(Math.abs(numComponents), sz);
 
       dn.getRDN(sz - count).toString(templateValue.getValue());
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java
index 9af61c3..6c1a8a8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
 import org.opends.messages.Message;
@@ -123,13 +124,13 @@
                                  TemplateValue templateValue)
   {
     DN parentDN = templateEntry.getParentDN();
-    if ((parentDN == null) || parentDN.isNullDN())
+    if ((parentDN == null) || parentDN.isRootDN())
     {
       return TagResult.SUCCESS_RESULT;
     }
 
     parentDN.getRDN(0).toString(templateValue.getValue());
-    for (int i=1; i < parentDN.getNumComponents(); i++)
+    for (int i=1; i < parentDN.size(); i++)
     {
       templateValue.append("_");
       parentDN.getRDN(i).toString(templateValue.getValue());
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/AbstractOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/AbstractOperation.java
index 8e85ffc..bd1814a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/AbstractOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/AbstractOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -541,7 +541,7 @@
     {
       return authorizationEntry.getDN();
     }
-    return DN.nullDN();
+    return DN.rootDN();
   }
 
   /** {@inheritDoc} */
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/BackupDirectory.java b/opendj3-server-dev/src/server/org/opends/server/types/BackupDirectory.java
index e03a52c..8197d62 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/BackupDirectory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/BackupDirectory.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types;
 import org.opends.messages.Message;
@@ -514,7 +515,7 @@
     DN configEntryDN;
     try
     {
-      configEntryDN = DN.decode(dnString);
+      configEntryDN = DN.valueOf(dnString);
     }
     catch (DirectoryException de)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/DN.java b/opendj3-server-dev/src/server/org/opends/server/types/DN.java
index aef4b37..3b76481 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/DN.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/DN.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2012-2013 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -175,7 +175,7 @@
   public DN(RDN rdn, DN parentDN)
   {
     ensureNotNull(rdn, parentDN);
-    if (parentDN.isNullDN())
+    if (parentDN.isRootDN())
     {
       rdnComponents = new RDN[] { rdn };
     }
@@ -199,7 +199,7 @@
    *
    * @return  A singleton instance of the null DN.
    */
-  public static DN nullDN()
+  public static DN rootDN()
   {
     return NULL_DN;
   }
@@ -214,7 +214,7 @@
    * @return  <CODE>true</CODE> if this does represent a null DN, or
    *          <CODE>false</CODE> if it does not.
    */
-  public boolean isNullDN()
+  public boolean isRootDN()
   {
     return (numComponents == 0);
   }
@@ -226,7 +226,7 @@
    *
    * @return  The number of RDN components for this DN.
    */
-  public int getNumComponents()
+  public int size()
   {
     return numComponents;
   }
@@ -241,7 +241,7 @@
    *          <CODE>null</CODE> if there are no RDN components in the
    *          DN.
    */
-  public RDN getRDN()
+  public RDN rdn()
   {
     if (numComponents == 0)
     {
@@ -281,7 +281,7 @@
    *          this entry, or <CODE>null</CODE> if the entry with this
    *          DN does not have a parent.
    */
-  public DN getParent()
+  public DN parent()
   {
     if (numComponents <= 1)
     {
@@ -334,7 +334,7 @@
    * @return  A new DN that is a child of this DN, using the specified
    *          RDN.
    */
-  public DN concat(RDN rdn)
+  public DN child(RDN rdn)
   {
     RDN[] newComponents = new RDN[rdnComponents.length+1];
     newComponents[0] = rdn;
@@ -382,7 +382,7 @@
    * @return  A new DN that is a descendant of this DN, using the
    *          specified DN as a relative base DN.
    */
-  public DN concat(DN relativeBaseDN)
+  public DN child(DN relativeBaseDN)
   {
     RDN[] newComponents =
                new RDN[rdnComponents.length+
@@ -485,7 +485,7 @@
 
       case SINGLE_LEVEL:
         // The parent DN must equal the base DN.
-        return baseDN.equals(getParent());
+        return baseDN.equals(parent());
 
       case WHOLE_SUBTREE:
         // This DN must be a descendant of the provided base DN.
@@ -541,7 +541,7 @@
       b = dnString.byteAt(i);
       if (((b & 0x7F) != b) || (b == '\\'))
       {
-        return decode(dnString.toString());
+        return valueOf(dnString.toString());
       }
     }
 
@@ -891,7 +891,7 @@
    * @throws  DirectoryException  If a problem occurs while trying to
    *                              decode the provided string as a DN.
    */
-  public static DN decode(String dnString)
+  public static DN valueOf(String dnString)
          throws DirectoryException
   {
     // A null or empty DN is acceptable.
@@ -2862,11 +2862,11 @@
     {
       return 0;
     }
-    else if (isNullDN())
+    else if (isRootDN())
     {
       return -1;
     }
-    else if (dn.isNullDN())
+    else if (dn.isRootDN())
     {
       return 1;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/Entry.java b/opendj3-server-dev/src/server/org/opends/server/types/Entry.java
index 74f4a12..da0017c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/Entry.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/Entry.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -192,7 +192,7 @@
   {
     if (dn == null)
     {
-      this.dn = DN.nullDN();
+      this.dn = DN.rootDN();
     }
     else
     {
@@ -2147,7 +2147,7 @@
                        AcceptRejectWarn structuralPolicy,
                        MessageBuilder invalidReason)
   {
-    RDN rdn = dn.getRDN();
+    RDN rdn = dn.rdn();
     if (rdn != null)
     {
         // Make sure that all the required attributes are present.
@@ -3021,7 +3021,7 @@
       Attribute aliasAttr = aliasAttrs.get(0);
       if (!aliasAttr.isEmpty())
       {
-        return DN.decode(aliasAttr.iterator().next().getValue().toString());
+        return DN.valueOf(aliasAttr.iterator().next().getValue().toString());
       }
     }
     return null;
@@ -3261,7 +3261,7 @@
                   inheritFromDN = DN.decode(value.getNormalizedValue());
                   // Respect subentry root scope.
                   if (!inheritFromDN.isDescendantOf(
-                       subEntry.getDN().getParent()))
+                       subEntry.getDN().parent()))
                   {
                     inheritFromDN = null;
                   }
@@ -3298,7 +3298,7 @@
                   inheritFromDN = subEntry.getInheritFromBaseDN();
                   for (AttributeValue value : attr)
                   {
-                    inheritFromDN = inheritFromDN.concat(
+                    inheritFromDN = inheritFromDN.child(
                         RDN.create(subEntry.getInheritFromRDNType(),
                         value));
                     break;
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/LDAPURL.java b/opendj3-server-dev/src/server/org/opends/server/types/LDAPURL.java
index 45bbf26..00a8d57 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/LDAPURL.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/LDAPURL.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.types;
 import java.util.Iterator;
@@ -75,7 +75,7 @@
   /**
    * The default base DN that will be used if none is provided.
    */
-  public static final DN DEFAULT_BASE_DN = DN.nullDN();
+  public static final DN DEFAULT_BASE_DN = DN.rootDN();
 
 
 
@@ -453,7 +453,7 @@
     DN baseDN;
     if (fullyDecode)
     {
-      baseDN = DN.decode(baseDNString);
+      baseDN = DN.valueOf(baseDNString);
     }
     else
     {
@@ -1085,7 +1085,7 @@
         return DEFAULT_BASE_DN;
       }
 
-      baseDN = DN.decode(rawBaseDN);
+      baseDN = DN.valueOf(rawBaseDN);
     }
 
     return baseDN;
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/SearchFilter.java b/opendj3-server-dev/src/server/org/opends/server/types/SearchFilter.java
index ba6c269..2835826 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/SearchFilter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/SearchFilter.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types;
 import org.opends.messages.Message;
@@ -3574,7 +3575,7 @@
     if (dnAttributes)
     {
       DN entryDN = entry.getDN();
-      int count = entryDN.getNumComponents();
+      int count = entryDN.size();
       for (int rdnIndex = 0; rdnIndex < count; rdnIndex++)
       {
         RDN rdn = entryDN.getRDN(rdnIndex);
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/SubEntry.java b/opendj3-server-dev/src/server/org/opends/server/types/SubEntry.java
index fefeec3..63f86ca 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/SubEntry.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/SubEntry.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.server.types;
@@ -210,7 +210,7 @@
           try
           {
             this.subTreeSpec = SubtreeSpecification.valueOf(
-                    entry.getDN().getParent(), specString);
+                    entry.getDN().parent(), specString);
             isValidSpec = true;
           }
           catch (DirectoryException de)
@@ -245,7 +245,7 @@
     {
       // There is none for some reason eg this could be
       // old Draft based ldapSubEntry so create a dummy.
-      this.subTreeSpec = new SubtreeSpecification(entry.getDN().getParent(),
+      this.subTreeSpec = new SubtreeSpecification(entry.getDN().parent(),
           null, -1, -1, null, null, null);
     }
 
@@ -367,7 +367,7 @@
               // Has to have a parent since subentry itself
               // cannot be a suffix entry within the server.
               this.inheritFromBaseDN =
-                      getDN().getParent().concat(
+                      getDN().parent().child(
                         inheritFromBaseDN);
               break;
             }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/SubtreeSpecification.java b/opendj3-server-dev/src/server/org/opends/server/types/SubtreeSpecification.java
index 6eeaa3a..ebc7bc1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/SubtreeSpecification.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/SubtreeSpecification.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -852,11 +852,11 @@
         skipColon();
         if (type.equals("chopbefore"))
         {
-          chopBefore.add(DN.decode(nextStringValue()));
+          chopBefore.add(DN.valueOf(nextStringValue()));
         }
         else if (type.equals("chopafter"))
         {
-          chopAfter.add(DN.decode(nextStringValue()));
+          chopAfter.add(DN.valueOf(nextStringValue()));
         }
         else
         {
@@ -1069,7 +1069,7 @@
             // Relative base DN specified more than once.
             throw new InputMismatchException();
           }
-          relativeBaseDN = DN.decode(parser.nextStringValue());
+          relativeBaseDN = DN.valueOf(parser.nextStringValue());
         }
         else if (key.equals("minimum"))
         {
@@ -1324,7 +1324,7 @@
       final Iterable<DN> chopAfter, final Refinement refinements)
   {
     this.baseDN = relativeBaseDN == null ? rootDN : rootDN
-        .concat(relativeBaseDN);
+        .child(relativeBaseDN);
     this.minimumDepth = minimumDepth;
     this.maximumDepth = maximumDepth;
 
@@ -1334,7 +1334,7 @@
       final TreeMap<DN, DN> map = new TreeMap<DN, DN>();
       for (final DN localName : chopBefore)
       {
-        map.put(baseDN.concat(localName), localName);
+        map.put(baseDN.child(localName), localName);
       }
       this.chopBefore = Collections.unmodifiableMap(map);
     }
@@ -1350,7 +1350,7 @@
       final TreeMap<DN, DN> map = new TreeMap<DN, DN>();
       for (final DN localName : chopAfter)
       {
-        map.put(baseDN.concat(localName), localName);
+        map.put(baseDN.child(localName), localName);
       }
       this.chopAfter = Collections.unmodifiableMap(map);
     }
@@ -1559,11 +1559,11 @@
     }
 
     // Check minimum and maximum depths.
-    final int baseRDNCount = baseDN.getNumComponents();
+    final int baseRDNCount = baseDN.size();
 
     if (minimumDepth > 0)
     {
-      final int entryRDNCount = dn.getNumComponents();
+      final int entryRDNCount = dn.size();
 
       if (entryRDNCount - baseRDNCount < minimumDepth)
       {
@@ -1573,7 +1573,7 @@
 
     if (maximumDepth >= 0)
     {
-      final int entryRDNCount = dn.getNumComponents();
+      final int entryRDNCount = dn.size();
 
       if (entryRDNCount - baseRDNCount > maximumDepth)
       {
@@ -1666,7 +1666,7 @@
 
     // Output the optional base DN.
     builder.append("{");
-    if (relativeBaseDN != null && !relativeBaseDN.isNullDN())
+    if (relativeBaseDN != null && !relativeBaseDN.isRootDN())
     {
       builder.append(" base ");
       StaticUtils.toRFC3641StringValue(builder,
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/LDIFReader.java b/opendj3-server-dev/src/server/org/opends/server/util/LDIFReader.java
index 147b0e0..1db53ff 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/LDIFReader.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/LDIFReader.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012-2013 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -859,7 +859,7 @@
     // base64-encoded.  Otherwise, it may be one or more spaces.
     if (colonPos == line.length() - 1)
     {
-      return DN.nullDN();
+      return DN.rootDN();
     }
 
     if (line.charAt(colonPos+1) == ':')
@@ -920,7 +920,7 @@
   {
     try
     {
-      return DN.decode(dnString);
+      return DN.valueOf(dnString);
     }
     catch (DirectoryException de)
     {
@@ -1550,7 +1550,7 @@
           entryDN, "newsuperior");
       try
       {
-        newSuperiorDN = DN.decode(dnStr);
+        newSuperiorDN = DN.valueOf(dnStr);
       } catch (DirectoryException de)
       {
         if (debugEnabled())
@@ -1989,7 +1989,7 @@
           Map<AttributeType,List<Attribute>>userAttributes,
           Map<AttributeType,List<Attribute>> operationalAttributes)
   {
-    RDN rdn = entryDN.getRDN();
+    RDN rdn = entryDN.rdn();
     int numAVAs = rdn.getNumValues();
     for (int i=0; i < numAVAs; i++)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/StaticUtils.java b/opendj3-server-dev/src/server/org/opends/server/util/StaticUtils.java
index f94bb98..0be4444 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/StaticUtils.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/StaticUtils.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -3678,14 +3678,14 @@
   {
     // If the provided DN was null or empty, then return null because we don't
     // support it.
-    if ((dn == null) || dn.isNullDN())
+    if ((dn == null) || dn.isRootDN())
     {
       return null;
     }
 
 
     // Get the information about the RDN attributes.
-    RDN rdn = dn.getRDN();
+    RDN rdn = dn.rdn();
     int numAVAs = rdn.getNumValues();
 
     // If there is only one RDN attribute, then see which objectclass we should
diff --git a/opendj3-server-dev/src/server/org/opends/server/workflowelement/WorkflowElementConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/workflowelement/WorkflowElementConfigManager.java
index 27e9d12..720983a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/workflowelement/WorkflowElementConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/workflowelement/WorkflowElementConfigManager.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.workflowelement;
 
@@ -237,7 +238,7 @@
 
     WorkflowElement<?> workflowElement =
             DirectoryServer.getWorkflowElement(
-            configuration.dn().getRDN().getAttributeValue(0).toString());
+            configuration.dn().rdn().getAttributeValue(0).toString());
     if (workflowElement != null)
     {
       // Notify to observers that the workflow element is now disabled
@@ -303,7 +304,7 @@
     // Get the existing workflow element if it's already enabled.
     WorkflowElement<?> existingWorkflowElement =
       DirectoryServer.getWorkflowElement(
-      configuration.dn().getRDN().getAttributeValue(0).toString());
+      configuration.dn().rdn().getAttributeValue(0).toString());
 
     // If the new configuration has the workflow element disabled,
     // then disable it if it is enabled, or do nothing if it's already disabled.
diff --git a/opendj3-server-dev/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java b/opendj3-server-dev/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
index 919b038..564c68a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2010-2013 ForgeRock AS
+ *      Portions Copyright 2010-2014 ForgeRock AS
  */
 package org.opends.server.workflowelement.externalchangelog;
 
@@ -125,7 +125,7 @@
     try
     {
       CHANGELOG_ROOT_DN = DN
-          .decode(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
+          .valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
     }
     catch (Exception e)
     {
@@ -482,7 +482,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
@@ -506,7 +506,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
@@ -1069,7 +1069,7 @@
     }
 
     // at the end build the CL entry to be returned
-    return new Entry(DN.decode(dnString), CHANGELOG_ENTRY_OBJECT_CLASSES,
+    return new Entry(DN.valueOf(dnString), CHANGELOG_ENTRY_OBJECT_CLASSES,
         uAttrs, operationalAttrs);
   }
 
@@ -1113,7 +1113,7 @@
       DN baseDN, SearchFilter sf) throws DirectoryException
   {
     // Select whether to use the DN or the filter.
-    switch (baseDN.getNumComponents())
+    switch (baseDN.size())
     {
     case 1:
       // cn=changelog - use user provided search filter.
@@ -1124,7 +1124,7 @@
 
       // The DN could also be a new ECL <service-id>,cn=changelog so be sure it
       // is draft ECL.
-      RDN rdn = baseDN.getRDN();
+      RDN rdn = baseDN.rdn();
 
       AttributeType at = DirectoryServer.getAttributeType("changenumber");
       if (at == null)
@@ -1141,7 +1141,7 @@
     default:
       // replicationCSN=xxx,<service-id>,cn=changelog - new ECL - use faked up
       // equality filter.
-      rdn = baseDN.getRDN();
+      rdn = baseDN.rdn();
 
       at = DirectoryServer.getAttributeType("replicationcsn");
       if (at == null)
diff --git a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
index 6afe7b5..dddf2a6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -661,7 +661,7 @@
       // This is fine.  This entry is one of the configured suffixes.
       return null;
     }
-    else if (entryDN.isNullDN())
+    else if (entryDN.isRootDN())
     {
       // This is not fine.  The root DSE cannot be added.
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -687,7 +687,7 @@
    */
   private void addRDNAttributesIfNecessary() throws DirectoryException
   {
-    RDN rdn = entryDN.getRDN();
+    RDN rdn = entryDN.rdn();
     int numAVAs = rdn.getNumValues();
     for (int i=0; i < numAVAs; i++)
     {
@@ -1235,7 +1235,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
@@ -1260,7 +1260,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
diff --git a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java
index 2cc5694..ff64011 100644
--- a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -655,7 +655,7 @@
 
     // If there is a bind DN, then see whether that is acceptable.
     if (DirectoryServer.bindWithDNRequiresPassword()
-        && bindDN != null && !bindDN.isNullDN())
+        && bindDN != null && !bindDN.isRootDN())
     {
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                                    ERR_BIND_DN_BUT_NO_PASSWORD.get());
diff --git a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
index 26775e5..0ea1ecd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -482,7 +482,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
@@ -506,7 +506,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
diff --git a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
index 6cf49d0..b613350 100644
--- a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -539,7 +539,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
@@ -563,7 +563,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
diff --git a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
index 3b4ed01..002fa2a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -293,14 +293,14 @@
       parentDN = newSuperior;
     }
 
-    if (parentDN == null || parentDN.isNullDN())
+    if (parentDN == null || parentDN.isRootDN())
     {
       setResultCode(ResultCode.UNWILLING_TO_PERFORM);
       appendErrorMessage(ERR_MODDN_NO_PARENT.get(String.valueOf(entryDN)));
       return;
     }
 
-    DN newDN = parentDN.concat(newRDN);
+    DN newDN = parentDN.child(newRDN);
 
     // Get the backend for the current entry, and the backend for the new
     // entry. If either is null, or if they are different, then fail.
@@ -701,7 +701,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
@@ -725,7 +725,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
@@ -766,7 +766,7 @@
     // If we should delete the old RDN values from the entry, then do so.
     if (deleteOldRDN())
     {
-      RDN currentRDN = entryDN.getRDN();
+      RDN currentRDN = entryDN.rdn();
       int numValues  = currentRDN.getNumValues();
       for (int i=0; i < numValues; i++)
       {
diff --git a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
index 697063e..e803463 100644
--- a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2011 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -801,7 +801,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
@@ -825,7 +825,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
@@ -1567,7 +1567,7 @@
       {
         AttributeType t = attr.getAttributeType();
 
-        RDN rdn = modifiedEntry.getDN().getRDN();
+        RDN rdn = modifiedEntry.getDN().rdn();
         if ((rdn !=  null) && rdn.hasAttributeType(t) &&
             (! modifiedEntry.hasValue(t, attr.getOptions(),
                                       rdn.getAttributeValue(t))))
@@ -1690,7 +1690,7 @@
 
     // Make sure that the RDN attribute value(s) has not been removed.
     AttributeType t = attr.getAttributeType();
-    RDN rdn = modifiedEntry.getDN().getRDN();
+    RDN rdn = modifiedEntry.getDN().rdn();
     if ((rdn != null)
         && rdn.hasAttributeType(t)
         && (!modifiedEntry.hasValue(t, attr.getOptions(), rdn
@@ -1719,7 +1719,7 @@
   {
     // The specified attribute type must not be an RDN attribute.
     AttributeType t = attr.getAttributeType();
-    RDN rdn = modifiedEntry.getDN().getRDN();
+    RDN rdn = modifiedEntry.getDN().rdn();
     if ((rdn != null) && rdn.hasAttributeType(t))
     {
       throw newDirectoryException(modifiedEntry, ResultCode.NOT_ALLOWED_ON_RDN,
diff --git a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java
index 1a6fe96..b66255c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -442,7 +442,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
@@ -466,7 +466,7 @@
           setAuthorizationEntry(authorizationEntry);
           if (authorizationEntry == null)
           {
-            setProxiedAuthorizationDN(DN.nullDN());
+            setProxiedAuthorizationDN(DN.rootDN());
           }
           else
           {
diff --git a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java
index 0dd0f22..52ca272 100644
--- a/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java
+++ b/opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -234,7 +234,7 @@
         RootCfg root = context.getRootConfiguration();
         try {
           BackendCfg backendCfg = root.getBackend(newBackendID);
-          if (backendCfg.getBaseDN().contains(DN.decode(DN_CONFIG_ROOT))) {
+          if (backendCfg.getBaseDN().contains(DN.valueOf(DN_CONFIG_ROOT))) {
             newBackend = DirectoryServer.getConfigHandler();
           }
         } catch (Exception ex) {
@@ -247,7 +247,7 @@
       if (applyChanges)
       {
         super.initialize(
-          configuration.dn().getRDN().getAttributeValue(0).toString(),
+          configuration.dn().rdn().getAttributeValue(0).toString(),
           BACKEND_WORKFLOW_ELEMENT);
         backend = newBackend;
         if (backend != null)
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
index 5514ab7..6a2ca13 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  *      Portions Copyright 2013 Manuel Gaupp
  */
 package org.opends.server;
@@ -807,7 +807,7 @@
   {
     startServer();
 
-    DN baseDN = DN.decode(namingContext);
+    DN baseDN = DN.valueOf(namingContext);
 
     // Retrieve backend. Warning: it is important to perform this each time,
     // because a test may have disabled then enabled the backend (i.e a test
@@ -878,7 +878,7 @@
 
       if (createBaseEntry)
       {
-        DN baseDN = DN.decode(dn);
+        DN baseDN = DN.valueOf(dn);
         Entry e = createEntry(baseDN);
         backend = (BackendImpl)DirectoryServer.getBackend(beID);
         backend.addEntry(e, null);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/AggregationPropertyDefinitionTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/AggregationPropertyDefinitionTest.java
index 30d2e59..fc51b16 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/AggregationPropertyDefinitionTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/AggregationPropertyDefinitionTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
@@ -102,7 +103,7 @@
     AggregationPropertyDefinition<?, ?> pd = d
         .getAggregationPropertyPropertyDefinition();
     DN expected = DN
-        .decode("cn=ldap connection handler, cn=connection handlers, cn=config");
+        .valueOf("cn=ldap connection handler, cn=connection handlers, cn=config");
     DN actual = pd.getChildDN("  LDAP  connection handler  ");
     Assert.assertEquals(actual, expected);
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/DNPropertyDefinitionTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/DNPropertyDefinitionTest.java
index 06cdd30..c88f819 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/DNPropertyDefinitionTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/DNPropertyDefinitionTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
@@ -89,7 +90,7 @@
     DNPropertyDefinition pd = localBuilder.getInstance();
 
     DN actual = pd.getBaseDN();
-    DN expected = baseDN == null ? null : DN.decode(baseDN);
+    DN expected = baseDN == null ? null : DN.valueOf(baseDN);
 
     assertEquals(actual, expected);
   }
@@ -155,7 +156,7 @@
         .createBuilder(RootCfgDefn.getInstance(), "test-property");
     localBuilder.setBaseDN(baseDN);
     DNPropertyDefinition pd = localBuilder.getInstance();
-    pd.validateValue(DN.decode(value));
+    pd.validateValue(DN.valueOf(value));
   }
 
 
@@ -177,7 +178,7 @@
         .createBuilder(RootCfgDefn.getInstance(), "test-property");
     localBuilder.setBaseDN(baseDN);
     DNPropertyDefinition pd = localBuilder.getInstance();
-    pd.validateValue(DN.decode(value));
+    pd.validateValue(DN.valueOf(value));
   }
 
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/ManagedObjectPathTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/ManagedObjectPathTest.java
index ef9447b..9554b65 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/ManagedObjectPathTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/ManagedObjectPathTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
@@ -342,10 +343,10 @@
             LDAPConnectionHandlerCfgDefn.getInstance(),
             "Another LDAP connection handler");
     
-    DN expectedEmpty = DN.nullDN();
-    DN expectedChild1 = DN.decode("cn=LDAP connection handler,cn=connection handlers,cn=config");
-    DN expectedChild2 = DN.decode("cn=LDAP connection handler,cn=connection handlers,cn=config");
-    DN expectedChild3 = DN.decode("cn=Another LDAP connection handler,cn=connection handlers,cn=config");
+    DN expectedEmpty = DN.rootDN();
+    DN expectedChild1 = DN.valueOf("cn=LDAP connection handler,cn=connection handlers,cn=config");
+    DN expectedChild2 = DN.valueOf("cn=LDAP connection handler,cn=connection handlers,cn=config");
+    DN expectedChild3 = DN.valueOf("cn=Another LDAP connection handler,cn=connection handlers,cn=config");
     
     assertEquals(path.toDN(), expectedEmpty);
     assertEquals(child1.toDN(), expectedChild1);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/LDAPClientTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/LDAPClientTest.java
index 36a0f3d..c116691 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/LDAPClientTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/LDAPClientTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.client.ldap;
 
@@ -751,7 +752,7 @@
     TestParentCfgClient parent = getTestParent(ctx, "test parent 1");
     parent.setMandatoryBooleanProperty(false);
     parent.setOptionalMultiValuedDNProperty(Arrays.asList(DN
-        .decode("dc=mod1,dc=com"), DN.decode("dc=mod2,dc=com")));
+        .valueOf("dc=mod1,dc=com"), DN.valueOf("dc=mod2,dc=com")));
     parent.commit();
     Assert.assertTrue(c.isEntryModified());
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/MockLDAPConnection.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/MockLDAPConnection.java
index 3afce2c..81aabb4 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/MockLDAPConnection.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/MockLDAPConnection.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.client.ldap;
 
@@ -150,9 +151,9 @@
    * Creates a new mock LDAP connection.
    */
   public MockLDAPConnection() {
-    this.rootEntry = new MockEntry(DN.nullDN(), new BasicAttributes());
+    this.rootEntry = new MockEntry(DN.rootDN(), new BasicAttributes());
     this.entries = new HashMap<DN, MockEntry>();
-    this.entries.put(DN.nullDN(), this.rootEntry);
+    this.entries.put(DN.rootDN(), this.rootEntry);
   }
 
 
@@ -298,9 +299,9 @@
     DN entryDN = entry.getDN();
 
     // Create required glue entries.
-    for (int i = 0; i < entryDN.getNumComponents() - 1; i++) {
-      RDN rdn = entryDN.getRDN(entryDN.getNumComponents() - i - 1);
-      DN dn = parent.getDN().concat(rdn);
+    for (int i = 0; i < entryDN.size() - 1; i++) {
+      RDN rdn = entryDN.getRDN(entryDN.size() - i - 1);
+      DN dn = parent.getDN().child(rdn);
 
       if (!entries.containsKey(dn)) {
         MockEntry glue = new MockEntry(dn, new BasicAttributes());
@@ -346,7 +347,7 @@
   private MockEntry getEntry(LdapName dn) {
     DN name;
     try {
-      name = DN.decode(dn.toString());
+      name = DN.valueOf(dn.toString());
     } catch (DirectoryException e) {
       throw new RuntimeException(e);
     }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DNBuilderTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DNBuilderTest.java
index 1942fff..bab30e0 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DNBuilderTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DNBuilderTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -100,7 +101,7 @@
     // Now serialize it.
     DN actual = DNBuilder.create(path);
     DN expected = DN
-        .decode("cn=test-child-1,cn=test children,cn=test-parent-1,cn=test parents,cn=config");
+        .valueOf("cn=test-child-1,cn=test children,cn=test-parent-1,cn=test parents,cn=config");
 
     assertEquals(actual, expected);
   }
@@ -149,7 +150,7 @@
     try {
       DN actual = DNBuilder.create(path);
       DN expected = DN
-          .decode("cn=singleton-test-child,cn=test-parent-1,cn=test parents,cn=config");
+          .valueOf("cn=singleton-test-child,cn=test-parent-1,cn=test parents,cn=config");
 
       assertEquals(actual, expected);
     } finally {
@@ -179,7 +180,7 @@
     // Now serialize it.
     DN actual = DNBuilder.create(path);
     DN expected = DN
-        .decode("cn=optional test child,cn=test-parent-1,cn=test parents,cn=config");
+        .valueOf("cn=optional test child,cn=test-parent-1,cn=test parents,cn=config");
 
     assertEquals(actual, expected);
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java
index f6ad083..f148ad8 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -96,7 +97,7 @@
      */
     public TestChildCfg getChild(String expectedName) {
       Assert.assertNotNull(child);
-      Assert.assertEquals(child.dn().getRDN().getAttributeValue(0)
+      Assert.assertEquals(child.dn().rdn().getAttributeValue(0)
           .getValue().toString(), expectedName);
       return child;
     }
@@ -156,7 +157,7 @@
      */
     public TestChildCfg getChild(String expectedName) {
       Assert.assertNotNull(child);
-      Assert.assertEquals(child.dn().getRDN().getAttributeValue(0)
+      Assert.assertEquals(child.dn().rdn().getAttributeValue(0)
           .getValue().toString(), expectedName);
       return child;
     }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java
index 3d9888d..827a954 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -153,13 +154,13 @@
     root.registerAddListener(TestCfg.getTestOneToManyParentRelationDefinition(), listener);
 
     // Make sure that the relation entry does not exist.
-    DN relationDN = DN.decode("cn=test parents,cn=config");
+    DN relationDN = DN.valueOf("cn=test parents,cn=config");
     ConfigEntry configEntry = DirectoryServer.getConfigEntry(relationDN);
     assertNull(configEntry, "Relation entry " + relationDN + " already exists");
 
     // Make sure that the listener was delayed and registered against
     // the parent.
-    DN parentDN = DN.decode("cn=config");
+    DN parentDN = DN.valueOf("cn=config");
     configEntry = DirectoryServer.getConfigEntry(parentDN);
     assertNotNull(configEntry, "Relation parent entry " + parentDN
         + " does not exist");
@@ -267,7 +268,7 @@
     TestCaseUtils.addEntry(entry);
 
     // Make sure that the relation entry exist.
-    DN relationDN = DN.decode("cn=test parents,cn=config");
+    DN relationDN = DN.valueOf("cn=test parents,cn=config");
     ConfigEntry configEntry = DirectoryServer.getConfigEntry(relationDN);
     assertNotNull(configEntry, "Relation entry " + relationDN
         + " does not exist");
@@ -315,7 +316,7 @@
         listener);
 
     // Make sure that the relation entry exists.
-    DN relationDN = DN.decode("cn=config");
+    DN relationDN = DN.valueOf("cn=config");
     ConfigEntry configEntry = DirectoryServer.getConfigEntry(relationDN);
     assertNotNull(configEntry, "Relation entry " + relationDN
         + " does not exist");
@@ -357,13 +358,13 @@
     root.registerDeleteListener(TestCfg.getTestOneToManyParentRelationDefinition(), listener);
 
     // Make sure that the relation entry does not exist.
-    DN relationDN = DN.decode("cn=test parents,cn=config");
+    DN relationDN = DN.valueOf("cn=test parents,cn=config");
     ConfigEntry configEntry = DirectoryServer.getConfigEntry(relationDN);
     assertNull(configEntry, "Relation entry " + relationDN + " already exists");
 
     // Make sure that the listener was delayed and registered against
     // the parent.
-    DN parentDN = DN.decode("cn=config");
+    DN parentDN = DN.valueOf("cn=config");
     configEntry = DirectoryServer.getConfigEntry(parentDN);
     assertNotNull(configEntry, "Relation parent entry " + parentDN
         + " does not exist");
@@ -471,7 +472,7 @@
     TestCaseUtils.addEntry(entry);
 
     // Make sure that the relation entry exist.
-    DN relationDN = DN.decode("cn=test parents,cn=config");
+    DN relationDN = DN.valueOf("cn=test parents,cn=config");
     ConfigEntry configEntry = DirectoryServer.getConfigEntry(relationDN);
     assertNotNull(configEntry, "Relation entry " + relationDN
         + " does not exist");
@@ -519,7 +520,7 @@
         listener);
 
     // Make sure that the relation entry exists.
-    DN relationDN = DN.decode("cn=config");
+    DN relationDN = DN.valueOf("cn=config");
     ConfigEntry configEntry = DirectoryServer.getConfigEntry(relationDN);
     assertNotNull(configEntry, "Relation entry " + relationDN
         + " does not exist");
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java
index ff51e85..47ffcfc 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
 
@@ -273,11 +274,11 @@
   {
     try
     {
-      return DN.decode("cn=Alert Handler Test Case,cn=config");
+      return DN.valueOf("cn=Alert Handler Test Case,cn=config");
     }
     catch (Exception e)
     {
-      return DN.nullDN();
+      return DN.rootDN();
     }
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AuthenticationPolicyTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AuthenticationPolicyTestCase.java
index d5654e4..ab4a6b8 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AuthenticationPolicyTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AuthenticationPolicyTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
 
@@ -212,7 +213,7 @@
   {
     TestCaseUtils.startServer();
 
-    policyDN = DN.decode(policyDNString);
+    policyDN = DN.valueOf(policyDNString);
   }
 
 
@@ -354,7 +355,7 @@
       credentials.append((byte) 0);
       credentials.append("password");
 
-      BindOperation bind = conn.processSASLBind(DN.nullDN(), "PLAIN",
+      BindOperation bind = conn.processSASLBind(DN.rootDN(), "PLAIN",
           credentials.toByteString());
 
       // Check authentication result.
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/DITCacheMapTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/DITCacheMapTestCase.java
index 3f61e69..cbb4f8d 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/DITCacheMapTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/DITCacheMapTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
 
@@ -137,16 +138,16 @@
   {
     TestCaseUtils.startServer();
 
-    dn0 = DN.decode(dn0String);
-    dn1 = DN.decode(dn1String);
-    dn2 = DN.decode(dn2String);
-    dn3 = DN.decode(dn3String);
-    dn4 = DN.decode(dn4String);
-    dn5 = DN.decode(dn5String);
-    dn6 = DN.decode(dn6String);
-    dn7 = DN.decode(dn7String);
-    dn8 = DN.decode(dn8String);
-    dn9 = DN.decode(dn9String);
+    dn0 = DN.valueOf(dn0String);
+    dn1 = DN.valueOf(dn1String);
+    dn2 = DN.valueOf(dn2String);
+    dn3 = DN.valueOf(dn3String);
+    dn4 = DN.valueOf(dn4String);
+    dn5 = DN.valueOf(dn5String);
+    dn6 = DN.valueOf(dn6String);
+    dn7 = DN.valueOf(dn7String);
+    dn8 = DN.valueOf(dn8String);
+    dn9 = DN.valueOf(dn9String);
   }
 
   @Test()
@@ -180,17 +181,17 @@
     assertTrue(ditMap.containsKey(dn8));
     assertTrue(ditMap.containsKey(dn9));
 
-    assertFalse(ditMap.containsKey(DN.decode(
+    assertFalse(ditMap.containsKey(DN.valueOf(
             "ou=No,ou=More,ou=Objects,dc=example,dc=com")));
-    assertFalse(ditMap.containsKey(DN.decode(
+    assertFalse(ditMap.containsKey(DN.valueOf(
             "ou=More,ou=Objects,dc=example,dc=com")));
-    assertFalse(ditMap.containsKey(DN.decode(
+    assertFalse(ditMap.containsKey(DN.valueOf(
             "ou=Objects,dc=example,dc=com")));
-    assertFalse(ditMap.containsKey(DN.decode(
+    assertFalse(ditMap.containsKey(DN.valueOf(
             "ou=Classes,dc=example,dc=com")));
-    assertFalse(ditMap.containsKey(DN.decode(
+    assertFalse(ditMap.containsKey(DN.valueOf(
             "dc=example,dc=com")));
-    assertFalse(ditMap.containsKey(DN.decode(
+    assertFalse(ditMap.containsKey(DN.valueOf(
             "dc=com")));
 
     assertTrue(ditMap.containsValue(dn0String));
@@ -215,17 +216,17 @@
     assertEquals(ditMap.get(dn8), dn8String);
     assertEquals(ditMap.get(dn9), dn9String);
 
-    assertNull(ditMap.get(DN.decode(
+    assertNull(ditMap.get(DN.valueOf(
             "ou=No,ou=More,ou=Objects,dc=example,dc=com")));
-    assertNull(ditMap.get(DN.decode(
+    assertNull(ditMap.get(DN.valueOf(
             "ou=More,ou=Objects,dc=example,dc=com")));
-    assertNull(ditMap.get(DN.decode(
+    assertNull(ditMap.get(DN.valueOf(
             "ou=Objects,dc=example,dc=com")));
-    assertNull(ditMap.get(DN.decode(
+    assertNull(ditMap.get(DN.valueOf(
             "ou=Classes,dc=example,dc=com")));
-    assertNull(ditMap.get(DN.decode(
+    assertNull(ditMap.get(DN.valueOf(
             "dc=example,dc=com")));
-    assertNull(ditMap.get(DN.decode(
+    assertNull(ditMap.get(DN.valueOf(
             "dc=com")));
   }
 
@@ -238,7 +239,7 @@
     putAllAndVerify();
 
     Collection<String> subtreeSet = ditMap.getSubtree(
-            DN.decode("dc=example,dc=com"));
+            DN.valueOf("dc=example,dc=com"));
     assertFalse(subtreeSet.isEmpty());
     assertEquals(subtreeSet.size(), 10);
     assertTrue(subtreeSet.contains(dn0String));
@@ -253,7 +254,7 @@
     assertTrue(subtreeSet.contains(dn9String));
 
     subtreeSet = ditMap.getSubtree(
-            DN.decode("ou=Objects,dc=example,dc=com"));
+            DN.valueOf("ou=Objects,dc=example,dc=com"));
     assertFalse(subtreeSet.isEmpty());
     assertEquals(subtreeSet.size(), 7);
     assertTrue(subtreeSet.contains(dn1String));
@@ -266,14 +267,14 @@
 
 
     subtreeSet = ditMap.getSubtree(
-            DN.decode("ou=Classes,dc=example,dc=com"));
+            DN.valueOf("ou=Classes,dc=example,dc=com"));
     assertFalse(subtreeSet.isEmpty());
     assertEquals(subtreeSet.size(), 2);
     assertTrue(subtreeSet.contains(dn4String));
     assertTrue(subtreeSet.contains(dn5String));
 
     subtreeSet = ditMap.getSubtree(
-            DN.decode("ou=More,ou=Objects,dc=example,dc=com"));
+            DN.valueOf("ou=More,ou=Objects,dc=example,dc=com"));
     assertFalse(subtreeSet.isEmpty());
     assertEquals(subtreeSet.size(), 4);
     assertTrue(subtreeSet.contains(dn6String));
@@ -282,7 +283,7 @@
     assertTrue(subtreeSet.contains(dn9String));
 
     subtreeSet = ditMap.getSubtree(
-            DN.decode("ou=No,ou=More,ou=Objects,dc=example,dc=com"));
+            DN.valueOf("ou=No,ou=More,ou=Objects,dc=example,dc=com"));
     assertFalse(subtreeSet.isEmpty());
     assertEquals(subtreeSet.size(), 1);
     assertTrue(subtreeSet.contains(dn9String));
@@ -383,7 +384,7 @@
     putAllAndVerify();
 
     Set<String> removeSet = new HashSet<String>();
-    assertTrue(ditMap.removeSubtree(DN.decode(
+    assertTrue(ditMap.removeSubtree(DN.valueOf(
             "dc=example,dc=com"),
             removeSet));
     assertFalse(removeSet.isEmpty());
@@ -403,7 +404,7 @@
     putAllAndVerify();
 
     removeSet.clear();
-    assertTrue(ditMap.removeSubtree(DN.decode(
+    assertTrue(ditMap.removeSubtree(DN.valueOf(
             "ou=Objects,dc=example,dc=com"),
             removeSet));
     assertFalse(removeSet.isEmpty());
@@ -425,7 +426,7 @@
     putAllAndVerify();
 
     removeSet.clear();
-    assertTrue(ditMap.removeSubtree(DN.decode(
+    assertTrue(ditMap.removeSubtree(DN.valueOf(
             "ou=Classes,dc=example,dc=com"),
             removeSet));
     assertFalse(removeSet.isEmpty());
@@ -447,7 +448,7 @@
     putAllAndVerify();
 
     removeSet.clear();
-    assertTrue(ditMap.removeSubtree(DN.decode(
+    assertTrue(ditMap.removeSubtree(DN.valueOf(
             "ou=More,ou=Objects,dc=example,dc=com"),
             removeSet));
     assertFalse(removeSet.isEmpty());
@@ -469,7 +470,7 @@
     putAllAndVerify();
 
     removeSet.clear();
-    assertTrue(ditMap.removeSubtree(DN.decode(
+    assertTrue(ditMap.removeSubtree(DN.valueOf(
             "ou=No,ou=More,ou=Objects,dc=example,dc=com"),
             removeSet));
     assertFalse(removeSet.isEmpty());
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java
index 9ab5375..22227e8 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api.plugin;
 
@@ -822,7 +823,7 @@
 
 
     NullPlugin nullPlugin = new NullPlugin();
-    DN pluginEntryDN = DN.decode("cn=Null Plugin,cn=Plugins,cn=config");
+    DN pluginEntryDN = DN.valueOf("cn=Null Plugin,cn=Plugins,cn=config");
 
     HashSet<PluginType> pluginTypes = new HashSet<PluginType>();
     for (PluginType t : PluginType.values())
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTestCase.java
index a756b0e..a42f9fd 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -71,7 +71,7 @@
     TestCaseUtils.initializeTestBackend(true);
 
     // Save Global ACI.
-    Entry e = DirectoryServer.getEntry(DN.decode(ACCESS_HANDLER_DN));
+    Entry e = DirectoryServer.getEntry(DN.valueOf(ACCESS_HANDLER_DN));
     List<Attribute> attrs =
         e.getAttribute(ConfigConstants.ATTR_AUTHZ_GLOBAL_ACI);
     if (attrs != null && !attrs.isEmpty())
@@ -104,7 +104,7 @@
           InternalClientConnection.getRootConnection();
 
       ResultCode rc =
-          conn.processModify(DN.decode(ACCESS_HANDLER_DN),
+          conn.processModify(DN.valueOf(ACCESS_HANDLER_DN),
               modifications).getResultCode();
       Assert.assertEquals(rc, ResultCode.SUCCESS,
           "Unable to restore global ACI");
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/TargetTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/TargetTestCase.java
index a843dcd..86fbcf2 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/TargetTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/TargetTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.authorization.dseecompat;
@@ -396,7 +397,7 @@
        throws Exception
   {
     PatternDN patternDN = PatternDN.decode(pattern);
-    boolean match = patternDN.matchesDN(DN.decode(entryDN));
+    boolean match = patternDN.matchesDN(DN.valueOf(entryDN));
     assertTrue(match, pattern + " did not match " + entryDN);
   }
 
@@ -406,7 +407,7 @@
        throws Exception
   {
     PatternDN patternDN = PatternDN.decode(pattern);
-    boolean match = patternDN.matchesDN(DN.decode(entryDN));
+    boolean match = patternDN.matchesDN(DN.valueOf(entryDN));
     assertTrue(!match, pattern + " should not have matched " + entryDN);
   }
 
@@ -425,10 +426,10 @@
   public void applicableTargets(String aciDN, String aciString, String entryDN)
        throws Exception
   {
-    Aci aci = Aci.decode(ByteString.valueOf(aciString), DN.decode(aciDN));
+    Aci aci = Aci.decode(ByteString.valueOf(aciString), DN.valueOf(aciDN));
     boolean match = AciTargets.isTargetApplicable(aci,
                                                   aci.getTargets(),
-                                                  DN.decode(entryDN));
+                                                  DN.valueOf(entryDN));
     assertTrue(match, aciString + " in entry " + aciDN +
          " did not apply to " + entryDN);
   }
@@ -439,10 +440,10 @@
                                    String entryDN)
        throws Exception
   {
-    Aci aci = Aci.decode(ByteString.valueOf(aciString), DN.decode(aciDN));
+    Aci aci = Aci.decode(ByteString.valueOf(aciString), DN.valueOf(aciDN));
     boolean match = AciTargets.isTargetApplicable(aci,
                                                   aci.getTargets(),
-                                                  DN.decode(entryDN));
+                                                  DN.valueOf(entryDN));
     assertTrue(!match, aciString + " in entry " + aciDN +
          " incorrectly applied to " + entryDN);
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/GenericBackendTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/GenericBackendTestCase.java
index a775a76..8e96d71 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/GenericBackendTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/GenericBackendTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends;
 
@@ -324,7 +325,7 @@
     for (DN baseDN : b.getBaseDNs())
     {
       assertTrue(b.handlesEntry(baseDN));
-      assertTrue(b.handlesEntry(DN.decode("cn=child," + baseDN.toString())));
+      assertTrue(b.handlesEntry(DN.valueOf("cn=child," + baseDN.toString())));
     }
   }
 }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/LDIFBackendTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/LDIFBackendTestCase.java
index 3aa56ff..f0c1703 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/LDIFBackendTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/LDIFBackendTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends;
 
@@ -117,7 +118,7 @@
       "ds-task-import-backend-id: ldifRoot",
       "ds-task-import-ldif-file: " + ldifFile.getAbsolutePath());
 
-    Task t = TasksTestCase.getCompletedTask(DN.decode(taskDN));
+    Task t = TasksTestCase.getCompletedTask(DN.valueOf(taskDN));
     assertNotNull(t);
     assertEquals(t.getTaskState(), TaskState.COMPLETED_SUCCESSFULLY);
   }
@@ -258,7 +259,7 @@
          InternalClientConnection.getRootConnection();
     AddOperation addOperation = conn.processAdd(e);
     assertEquals(addOperation.getResultCode(), ResultCode.NO_SUCH_OBJECT);
-    assertEquals(addOperation.getMatchedDN(), DN.decode("o=ldif"));
+    assertEquals(addOperation.getMatchedDN(), DN.valueOf("o=ldif"));
   }
 
 
@@ -274,9 +275,9 @@
   public void testAddBaseEntry()
          throws Exception
   {
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=ldif")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=ldif")));
     assertTrue(DirectoryServer.entryExists(
-                   DN.decode("uid=user.1,ou=People,o=ldif")));
+                   DN.valueOf("uid=user.1,ou=People,o=ldif")));
 
     String path = TestCaseUtils.createTempFile(
       "dn: o=ldif",
@@ -292,9 +293,9 @@
       "-f", path
     };
     assertEquals(LDAPModify.mainModify(args, false, System.out, System.err), 0);
-    assertFalse(DirectoryServer.entryExists(DN.decode("o=ldif")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("o=ldif")));
     assertFalse(DirectoryServer.entryExists(
-                    DN.decode("uid=user.1,ou=People,o=ldif")));
+                    DN.valueOf("uid=user.1,ou=People,o=ldif")));
 
     Entry e = TestCaseUtils.makeEntry(
       "dn: o=ldif",
@@ -306,14 +307,14 @@
          InternalClientConnection.getRootConnection();
     AddOperation addOperation = conn.processAdd(e);
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=ldif")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=ldif")));
     assertFalse(DirectoryServer.entryExists(
-                    DN.decode("uid=user.1,ou=People,o=ldif")));
+                    DN.valueOf("uid=user.1,ou=People,o=ldif")));
 
     setUp();
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=ldif")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=ldif")));
     assertTrue(DirectoryServer.entryExists(
-                   DN.decode("uid=user.1,ou=People,o=ldif")));
+                   DN.valueOf("uid=user.1,ou=People,o=ldif")));
   }
 
 
@@ -405,8 +406,8 @@
       "objectClass: organizationalUnit",
       "ou: leaf before");
 
-    DN beforeDN = DN.decode("ou=leaf before,o=ldif");
-    DN afterDN  = DN.decode("ou=leaf after,o=ldif");
+    DN beforeDN = DN.valueOf("ou=leaf before,o=ldif");
+    DN afterDN  = DN.valueOf("ou=leaf after,o=ldif");
 
     assertTrue(DirectoryServer.entryExists(beforeDN));
     assertFalse(DirectoryServer.entryExists(afterDN));
@@ -441,7 +442,7 @@
       "objectClass: top",
       "objectClass: organizationalUnit",
       "ou: new entry");
-    assertTrue(DirectoryServer.entryExists(DN.decode("ou=new entry,o=ldif")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("ou=new entry,o=ldif")));
 
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
@@ -449,11 +450,11 @@
          conn.processModifyDN("ou=new entry,o=ldif", "ou=People", true);
     assertEquals(modifyDNOperation.getResultCode(),
                  ResultCode.ENTRY_ALREADY_EXISTS);
-    assertTrue(DirectoryServer.entryExists(DN.decode("ou=new entry,o=ldif")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("ou=new entry,o=ldif")));
 
     DeleteOperation deleteOperation = conn.processDelete("ou=new entry,o=ldif");
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
-    assertFalse(DirectoryServer.entryExists(DN.decode("ou=new entry,o=ldif")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("ou=new entry,o=ldif")));
   }
 
 
@@ -474,8 +475,8 @@
       "objectClass: organizationalUnit",
       "ou: leaf before");
 
-    DN beforeDN = DN.decode("ou=leaf before,o=ldif");
-    DN afterDN  = DN.decode("ou=leaf after,ou=People,o=ldif");
+    DN beforeDN = DN.valueOf("ou=leaf before,o=ldif");
+    DN afterDN  = DN.valueOf("ou=leaf after,ou=People,o=ldif");
 
     assertTrue(DirectoryServer.entryExists(beforeDN));
     assertFalse(DirectoryServer.entryExists(afterDN));
@@ -506,10 +507,10 @@
   public void testModifyDNSubtreeRename()
          throws Exception
   {
-    DN beforeDN      = DN.decode("ou=People,o=ldif");
-    DN afterDN       = DN.decode("ou=Users,o=ldif");
-    DN childBeforeDN = DN.decode("uid=user.1,ou=People,o=ldif");
-    DN childAfterDN  = DN.decode("uid=user.1,ou=Users,o=ldif");
+    DN beforeDN      = DN.valueOf("ou=People,o=ldif");
+    DN afterDN       = DN.valueOf("ou=Users,o=ldif");
+    DN childBeforeDN = DN.valueOf("uid=user.1,ou=People,o=ldif");
+    DN childAfterDN  = DN.valueOf("uid=user.1,ou=Users,o=ldif");
 
     assertTrue(DirectoryServer.entryExists(beforeDN));
     assertFalse(DirectoryServer.entryExists(afterDN));
@@ -598,7 +599,7 @@
          conn.processSearch("o=nonexistent2,o=nonexistent1,o=ldif",
                             SearchScope.BASE_OBJECT, "(objectClass=*)");
     assertEquals(searchOperation.getResultCode(), ResultCode.NO_SUCH_OBJECT);
-    assertEquals(searchOperation.getMatchedDN(), DN.decode("o=ldif"));
+    assertEquals(searchOperation.getMatchedDN(), DN.valueOf("o=ldif"));
   }
 
 
@@ -677,13 +678,13 @@
     assertNotNull(b);
     assertTrue(b instanceof LDIFBackend);
 
-    assertEquals(b.hasSubordinates(DN.decode("o=ldif")), ConditionResult.TRUE);
-    assertEquals(b.hasSubordinates(DN.decode("uid=user.1,ou=People,o=ldif")),
+    assertEquals(b.hasSubordinates(DN.valueOf("o=ldif")), ConditionResult.TRUE);
+    assertEquals(b.hasSubordinates(DN.valueOf("uid=user.1,ou=People,o=ldif")),
                  ConditionResult.FALSE);
 
     try
     {
-      b.hasSubordinates(DN.decode("ou=nonexistent,o=ldif"));
+      b.hasSubordinates(DN.valueOf("ou=nonexistent,o=ldif"));
       fail("Expected an exception when calling hasSubordinates on a " +
            "non-existent entry");
     }
@@ -708,16 +709,16 @@
     assertNotNull(b);
     assertTrue(b instanceof LDIFBackend);
 
-    assertEquals(b.numSubordinates(DN.decode("o=ldif"), false), 1);
-    assertEquals(b.numSubordinates(DN.decode("o=ldif"), true), 26);
+    assertEquals(b.numSubordinates(DN.valueOf("o=ldif"), false), 1);
+    assertEquals(b.numSubordinates(DN.valueOf("o=ldif"), true), 26);
     assertEquals(b.numSubordinates(
-        DN.decode("uid=user.1,ou=People,o=ldif"), false), 0);
+        DN.valueOf("uid=user.1,ou=People,o=ldif"), false), 0);
     assertEquals(b.numSubordinates(
-        DN.decode("uid=user.1,ou=People,o=ldif"), true), 0);
+        DN.valueOf("uid=user.1,ou=People,o=ldif"), true), 0);
 
     try
     {
-      b.numSubordinates(DN.decode("ou=nonexistent,o=ldif"), false);
+      b.numSubordinates(DN.valueOf("ou=nonexistent,o=ldif"), false);
       fail("Expected an exception when calling numSubordinates on a " +
            "non-existent entry");
     }
@@ -756,7 +757,7 @@
       "ds-task-export-backend-id: ldifRoot",
       "ds-task-export-ldif-file: " + tempFilePath);
 
-    Task t = TasksTestCase.getCompletedTask(DN.decode(taskDN));
+    Task t = TasksTestCase.getCompletedTask(DN.valueOf(taskDN));
     assertNotNull(t);
     assertEquals(t.getTaskState(), TaskState.COMPLETED_SUCCESSFULLY);
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/SchemaBackendTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/SchemaBackendTestCase.java
index 2eec19b..7c40dfb 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/SchemaBackendTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/SchemaBackendTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.backends;
 
@@ -106,7 +106,7 @@
   public void testGetValidEntry()
          throws Exception
   {
-    DN    schemaDN    = DN.decode("cn=schema");
+    DN    schemaDN    = DN.valueOf("cn=schema");
     Entry schemaEntry = schemaBackend.getEntry(schemaDN);
     assertNotNull(schemaEntry);
     assertEquals(schemaEntry.getDN(), schemaDN);
@@ -136,11 +136,11 @@
   public void testGetInvalidEntry()
          throws Exception
   {
-    DN    schemaDN    = DN.decode("cn=notschema");
+    DN    schemaDN    = DN.valueOf("cn=notschema");
     Entry schemaEntry = schemaBackend.getEntry(schemaDN);
     assertNull(schemaEntry);
 
-    schemaDN    = DN.decode("cn=child,cn=schema");
+    schemaDN    = DN.valueOf("cn=child,cn=schema");
     schemaEntry = schemaBackend.getEntry(schemaDN);
     assertNull(schemaEntry);
   }
@@ -157,7 +157,7 @@
   public void testGetSchemaEntry()
          throws Exception
   {
-    DN    schemaDN    = DN.decode("cn=schema");
+    DN    schemaDN    = DN.valueOf("cn=schema");
     Entry schemaEntry = schemaBackend.getSchemaEntry(schemaDN, false);
     assertNotNull(schemaEntry);
     assertEquals(schemaEntry.getDN(), schemaDN);
@@ -175,7 +175,7 @@
     assertTrue(schemaEntry.hasAttribute(t));
 
 
-    schemaDN    = DN.decode("cn=subschema");
+    schemaDN    = DN.valueOf("cn=subschema");
     schemaEntry = schemaBackend.getSchemaEntry(schemaDN, false);
     assertNotNull(schemaEntry);
     assertEquals(schemaEntry.getDN(), schemaDN);
@@ -204,7 +204,7 @@
   public void testEntryExistsValidDN()
          throws Exception
   {
-    DN schemaDN = DN.decode("cn=schema");
+    DN schemaDN = DN.valueOf("cn=schema");
     assertTrue(schemaBackend.entryExists(schemaDN));
   }
 
@@ -219,7 +219,7 @@
   public void testEntryExistsInvalidDN()
          throws Exception
   {
-    DN schemaDN = DN.decode("cn=notschema");
+    DN schemaDN = DN.valueOf("cn=notschema");
     assertFalse(schemaBackend.entryExists(schemaDN));
   }
 
@@ -232,7 +232,7 @@
   @Test(expectedExceptions = { DirectoryException.class })
   public void testAddEntry() throws Exception
   {
-    Entry entry = createEntry(DN.decode("cn=schema"));
+    Entry entry = createEntry(DN.valueOf("cn=schema"));
     AddOperation addOperation = getRootConnection().processAdd(entry);
     schemaBackend.addEntry(entry, addOperation);
   }
@@ -247,7 +247,7 @@
   public void testDeleteEntry()
          throws Exception
   {
-    DN schemaDN = DN.decode("cn=schema");
+    DN schemaDN = DN.valueOf("cn=schema");
 
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
@@ -268,15 +268,15 @@
   public void testRenameEntry()
          throws Exception
   {
-    DN currentSchemaDN = DN.decode("cn=schema");
-    DN newSchemaDN     = DN.decode("cn=newschema");
+    DN currentSchemaDN = DN.valueOf("cn=schema");
+    DN newSchemaDN     = DN.valueOf("cn=newschema");
 
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyDNOperationBasis modifyDNOperation =
          new ModifyDNOperationBasis(conn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), null,
-                               currentSchemaDN, newSchemaDN.getRDN(),
+                               currentSchemaDN, newSchemaDN.rdn(),
                                true, null);
 
     schemaBackend.renameEntry(currentSchemaDN,
@@ -301,7 +301,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("cn=schema"), SearchScope.BASE_OBJECT,
+         conn.processSearch(DN.valueOf("cn=schema"), SearchScope.BASE_OBJECT,
               SearchFilter.createFilterFromString(filterString));
     assertNotNull(searchOperation);
     assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);
@@ -324,7 +324,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("cn=schema"), SearchScope.SINGLE_LEVEL,
+         conn.processSearch(DN.valueOf("cn=schema"), SearchScope.SINGLE_LEVEL,
               SearchFilter.createFilterFromString(filterString));
     assertNotNull(searchOperation);
     assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);
@@ -348,7 +348,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("cn=schema"), SearchScope.WHOLE_SUBTREE,
+         conn.processSearch(DN.valueOf("cn=schema"), SearchScope.WHOLE_SUBTREE,
               SearchFilter.createFilterFromString(filterString));
     assertNotNull(searchOperation);
     assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);
@@ -372,7 +372,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("cn=schema"),
+         conn.processSearch(DN.valueOf("cn=schema"),
               SearchScope.SUBORDINATE_SUBTREE,
               SearchFilter.createFilterFromString(filterString));
     assertNotNull(searchOperation);
@@ -394,7 +394,7 @@
   {
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
-    DN baseDN = DN.decode("o=bogus,cn=schema");
+    DN baseDN = DN.valueOf("o=bogus,cn=schema");
     SearchFilter filter =
          SearchFilter.createFilterFromString("(objectClass=*)");
 
@@ -419,7 +419,7 @@
   public void testTreatAsUserAttrs()
          throws Exception
   {
-    DN schemaDN = DN.decode("cn=schema");
+    DN schemaDN = DN.valueOf("cn=schema");
     AttributeType a = DirectoryServer.getAttributeType("attributetypes");
     AttributeType o = DirectoryServer.getAttributeType("objectclasses");
     AttributeType m = DirectoryServer.getAttributeType("matchingrules");
@@ -5327,7 +5327,7 @@
   public void testLastModAttributes()
          throws Exception
   {
-    Entry schemaEntry = DirectoryServer.getEntry(DN.decode("cn=schema"));
+    Entry schemaEntry = DirectoryServer.getEntry(DN.valueOf("cn=schema"));
     assertNotNull(schemaEntry);
 
     AttributeType cnType =
@@ -5370,7 +5370,7 @@
     Thread.sleep(6000);
     assertEquals(LDAPModify.mainModify(args, false, null, System.err), 0);
 
-    schemaEntry = DirectoryServer.getEntry(DN.decode("cn=schema"));
+    schemaEntry = DirectoryServer.getEntry(DN.valueOf("cn=schema"));
     assertNotNull(schemaEntry);
     assertTrue(schemaEntry.hasAttribute(cnType));
     assertTrue(schemaEntry.hasAttribute(ctType));
@@ -5485,7 +5485,7 @@
          throws Exception
   {
     DN configEntryDN =
-            DN.decode("ds-cfg-backend-id=schema,cn=Backends,cn=config");
+            DN.valueOf("ds-cfg-backend-id=schema,cn=Backends,cn=config");
     assertEquals(schemaBackend.getComponentEntryDN(), configEntryDN);
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestBackendImpl.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestBackendImpl.java
index 70ad008..938d497 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestBackendImpl.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestBackendImpl.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
@@ -567,20 +567,20 @@
         InternalClientConnection.getRootConnection();
 
     InternalSearchOperation search =
-        conn.processSearch(DN.decode("dc=test,dc=com"), SearchScope.BASE_OBJECT,
+        conn.processSearch(DN.valueOf("dc=test,dc=com"), SearchScope.BASE_OBJECT,
             LDAPFilter.decode("(objectClass=*)").toSearchFilter());
     List<SearchResultEntry> result = search.getSearchEntries();
 
     assertEquals(result.size(), 1);
     assertEquals(result.get(0).getDN().toString(), "dc=test,dc=com");
 
-    search = conn.processSearch(DN.decode("dc=test,dc=com"),
+    search = conn.processSearch(DN.valueOf("dc=test,dc=com"),
         SearchScope.BASE_OBJECT, LDAPFilter.decode("(ou=People)").toSearchFilter());
     result = search.getSearchEntries();
 
     assertEquals(result.size(), 0);
 
-    search = conn.processSearch(DN.decode("dc=test,dc=com"),
+    search = conn.processSearch(DN.valueOf("dc=test,dc=com"),
         SearchScope.SINGLE_LEVEL,
         LDAPFilter.decode("(objectClass=*)").toSearchFilter());
     result = search.getSearchEntries();
@@ -589,7 +589,7 @@
     assertEquals(result.get(0).getDN().toString(),
         "ou=People,dc=test,dc=com");
 
-    search = conn.processSearch(DN.decode("dc=test,dc=com"),
+    search = conn.processSearch(DN.valueOf("dc=test,dc=com"),
         SearchScope.SUBORDINATE_SUBTREE,
         LDAPFilter.decode("(objectClass=*)").toSearchFilter());
     result = search.getSearchEntries();
@@ -599,7 +599,7 @@
       assertThat(entry.getDN().toString()).isNotEqualTo("dc=test,dc=com");
     }
 
-    search = conn.processSearch(DN.decode("dc=test,dc=com"),
+    search = conn.processSearch(DN.valueOf("dc=test,dc=com"),
         SearchScope.WHOLE_SUBTREE,
         LDAPFilter.decode("(objectClass=*)").toSearchFilter());
     result = search.getSearchEntries();
@@ -610,22 +610,22 @@
   @Test(dependsOnMethods = "testAdd")
   public void testNumSubordinates() throws Exception
   {
-    DN dn = DN.decode("dc=test,dc=com");
+    DN dn = DN.valueOf("dc=test,dc=com");
     assertEquals(backend.numSubordinates(dn, false), 1);
     assertEquals(backend.numSubordinates(dn, true), 13);
-    dn = DN.decode("ou=People,dc=test,dc=com");
+    dn = DN.valueOf("ou=People,dc=test,dc=com");
     assertEquals(backend.numSubordinates(dn, false), 12);
     assertEquals(backend.numSubordinates(dn, true), 12);
-    dn = DN.decode("dc=com");
+    dn = DN.valueOf("dc=com");
     assertEquals(backend.numSubordinates(dn, false), -1);
     assertEquals(backend.numSubordinates(dn, true), -1);
-    dn = DN.decode("dc=test1,dc=com");
+    dn = DN.valueOf("dc=test1,dc=com");
     assertEquals(backend.numSubordinates(dn, false), 2);
     assertEquals(backend.numSubordinates(dn, true), 2);
-    dn = DN.decode("uid=user.10,ou=People,dc=test,dc=com");
+    dn = DN.valueOf("uid=user.10,ou=People,dc=test,dc=com");
     assertEquals(backend.numSubordinates(dn, false), 0);
     assertEquals(backend.numSubordinates(dn, true), 0);
-    dn = DN.decode("uid=does not exist,ou=People,dc=test,dc=com");
+    dn = DN.valueOf("uid=does not exist,ou=People,dc=test,dc=com");
     assertEquals(backend.numSubordinates(dn, false), -1);
     assertEquals(backend.numSubordinates(dn, true), -1);
   }
@@ -642,7 +642,7 @@
     int finalCount;
 
     InternalSearchOperation search =
-        conn.processSearch(DN.decode("dc=test,dc=com"),
+        conn.processSearch(DN.valueOf("dc=test,dc=com"),
             SearchScope.WHOLE_SUBTREE,
             DereferencePolicy.NEVER_DEREF_ALIASES,
             0,
@@ -656,7 +656,7 @@
 
     attribs.add(ATTR_DEBUG_SEARCH_INDEX);
 
-    search = conn.processSearch(DN.decode("dc=test,dc=com"),
+    search = conn.processSearch(DN.valueOf("dc=test,dc=com"),
         SearchScope.WHOLE_SUBTREE,
         DereferencePolicy.NEVER_DEREF_ALIASES,
         0,
@@ -677,7 +677,7 @@
         finalEndPos));
     assertEquals(finalCount, 1);
 
-    search = conn.processSearch(DN.decode("dc=test,dc=com"),
+    search = conn.processSearch(DN.valueOf("dc=test,dc=com"),
         SearchScope.WHOLE_SUBTREE,
         DereferencePolicy.NEVER_DEREF_ALIASES,
         0,
@@ -697,7 +697,7 @@
         finalEndPos));
     assertEquals(finalCount, 2);
 
-    search = conn.processSearch(DN.decode("dc=test,dc=com"),
+    search = conn.processSearch(DN.valueOf("dc=test,dc=com"),
         SearchScope.WHOLE_SUBTREE,
         DereferencePolicy.NEVER_DEREF_ALIASES,
         0,
@@ -716,7 +716,7 @@
         finalEndPos));
     assertEquals(finalCount, 12);
 
-    search = conn.processSearch(DN.decode("dc=test,dc=com"),
+    search = conn.processSearch(DN.valueOf("dc=test,dc=com"),
         SearchScope.WHOLE_SUBTREE,
         DereferencePolicy.NEVER_DEREF_ALIASES,
         0,
@@ -735,7 +735,7 @@
         finalEndPos));
     assertEquals(finalCount, 11);
 
-    search = conn.processSearch(DN.decode("dc=test,dc=com"),
+    search = conn.processSearch(DN.valueOf("dc=test,dc=com"),
         SearchScope.WHOLE_SUBTREE,
         DereferencePolicy.NEVER_DEREF_ALIASES,
         0,
@@ -770,17 +770,17 @@
         InternalClientConnection.nextOperationID(),
         InternalClientConnection.nextMessageID(),
         deleteSubTreeControl,
-        DN.decode("dc=test1,dc=com"));
+        DN.valueOf("dc=test1,dc=com"));
 
-    backend.deleteEntry(DN.decode("dc=test1,dc=com"), delete);
+    backend.deleteEntry(DN.valueOf("dc=test1,dc=com"), delete);
 
     EntryContainer ec =
-        backend.getRootContainer().getEntryContainer(DN.decode("dc=test1,dc=com"));
+        backend.getRootContainer().getEntryContainer(DN.valueOf("dc=test1,dc=com"));
     ec.sharedLock.lock();
     try
     {
-      assertFalse(ec.entryExists(DN.decode("dc=test1,dc=com")));
-      assertFalse(ec.entryExists(DN.decode("uid=user.362,dc=test1,dc=com")));
+      assertFalse(ec.entryExists(DN.valueOf("dc=test1,dc=com")));
+      assertFalse(ec.entryExists(DN.valueOf("uid=user.362,dc=test1,dc=com")));
     }
     finally
     {
@@ -796,33 +796,33 @@
         InternalClientConnection.getRootConnection();
 
     EntryContainer ec =
-        backend.getRootContainer().getEntryContainer(DN.decode("ou=People,dc=test,dc=com"));
+        backend.getRootContainer().getEntryContainer(DN.valueOf("ou=People,dc=test,dc=com"));
 
     ec.sharedLock.lock();
     try
     {
       Entry entry =
-          ec.getEntry(DN.decode("uid=user.539,ou=People,dc=test,dc=com"));
+          ec.getEntry(DN.valueOf("uid=user.539,ou=People,dc=test,dc=com"));
       EntryID entryID = ec.getDN2ID().get(null,
-          DN.decode("uid=user.539,ou=People,dc=test,dc=com"), LockMode.DEFAULT);
+          DN.valueOf("uid=user.539,ou=People,dc=test,dc=com"), LockMode.DEFAULT);
 
       DeleteOperationBasis delete = new DeleteOperationBasis(conn,
         InternalClientConnection.nextOperationID(),
         InternalClientConnection.nextMessageID(),
         noControls,
 
-          DN.decode("uid=user.539,ou=People,dc=test,dc=com"));
+          DN.valueOf("uid=user.539,ou=People,dc=test,dc=com"));
 
 
-      backend.deleteEntry(DN.decode("uid=user.539,ou=People,dc=test,dc=com"),
+      backend.deleteEntry(DN.valueOf("uid=user.539,ou=People,dc=test,dc=com"),
           delete);
 
 
-      assertFalse(ec.entryExists(DN.decode("uid=user.539,ou=People,dc=test,dc=com")));
+      assertFalse(ec.entryExists(DN.valueOf("uid=user.539,ou=People,dc=test,dc=com")));
       assertNull(ec.getDN2ID().get(null,
-          DN.decode("uid=user.539,ou=People,dc=test,dc=com"), LockMode.DEFAULT));
+          DN.valueOf("uid=user.539,ou=People,dc=test,dc=com"), LockMode.DEFAULT));
       assertFalse(ec.getDN2URI().delete(null,
-          DN.decode("uid=user.539,ou=People,dc=test,dc=com")));
+          DN.valueOf("uid=user.539,ou=People,dc=test,dc=com")));
 
       AttributeType attribute =
           entries.get(0).getAttribute("cn").get(0).getAttributeType();
@@ -894,14 +894,14 @@
     backend.replaceEntry(oldEntry, replaceEntry, null);
 
     EntryContainer ec =
-        backend.getRootContainer().getEntryContainer(DN.decode("dc=test,dc=com"));
+        backend.getRootContainer().getEntryContainer(DN.valueOf("dc=test,dc=com"));
     ec.sharedLock.lock();
     try
     {
       Entry entry =
-          ec.getEntry(DN.decode("uid=user.0,ou=People,dc=test,dc=com"));
+          ec.getEntry(DN.valueOf("uid=user.0,ou=People,dc=test,dc=com"));
       EntryID entryID = ec.getDN2ID().get(null,
-          DN.decode("uid=user.0,ou=People,dc=test,dc=com"), LockMode.DEFAULT);
+          DN.valueOf("uid=user.0,ou=People,dc=test,dc=com"), LockMode.DEFAULT);
 
       assertNotNull(entry);
       for (AttributeValue value : entry.getAttribute("cn").get(0)) {
@@ -964,7 +964,7 @@
     OrderingIndexer orderingIndexer;
 
     EntryContainer ec = backend.getRootContainer().getEntryContainer(
-        DN.decode("dc=test,dc=com"));
+        DN.valueOf("dc=test,dc=com"));
     ec.sharedLock.lock();
     try
     {
@@ -1008,9 +1008,9 @@
 
       newEntry = entries.get(1);
       newEntry.applyModifications(modifications);
-      entry = ec.getEntry(DN.decode("uid=user.1,ou=People,dc=test,dc=com"));
+      entry = ec.getEntry(DN.valueOf("uid=user.1,ou=People,dc=test,dc=com"));
       entryID = ec.getDN2ID().get(null,
-          DN.decode("uid=user.1,ou=People,dc=test,dc=com"), LockMode.DEFAULT);
+          DN.valueOf("uid=user.1,ou=People,dc=test,dc=com"), LockMode.DEFAULT);
 
       assertNotNull(entryID);
 
@@ -1036,11 +1036,11 @@
 
       ModifyOperationBasis modifyOp = new ModifyOperationBasis(conn, InternalClientConnection
           .nextOperationID(), InternalClientConnection.nextMessageID(), noControls, DN
-          .decode("uid=user.1,ou=People,dc=test,dc=com"), modifications);
+          .valueOf("uid=user.1,ou=People,dc=test,dc=com"), modifications);
 
       backend.replaceEntry(entry, newEntry, modifyOp);
 
-      entry = ec.getEntry(DN.decode("uid=user.1,ou=People,dc=test,dc=com"));
+      entry = ec.getEntry(DN.valueOf("uid=user.1,ou=People,dc=test,dc=com"));
 
       assertTrue(entry.getAttribute("title").contains(
           Attributes.create("title", "debugger")));
@@ -1109,25 +1109,25 @@
       "testMatchedDN"})
   public void testModifyDN() throws Exception {
     EntryContainer ec =
-        backend.getRootContainer().getEntryContainer(DN.decode("dc=test,dc=com"));
+        backend.getRootContainer().getEntryContainer(DN.valueOf("dc=test,dc=com"));
     ec.sharedLock.lock();
     try
     {
       Entry entry =
-          ec.getEntry(DN.decode("uid=user.2,ou=People,dc=test,dc=com"));
-      entry.setDN(DN.decode("cn=Abbey Abbie,ou=People,dc=test,dc=com"));
+          ec.getEntry(DN.valueOf("uid=user.2,ou=People,dc=test,dc=com"));
+      entry.setDN(DN.valueOf("cn=Abbey Abbie,ou=People,dc=test,dc=com"));
 
 
-      backend.renameEntry(DN.decode("uid=user.2,ou=People,dc=test,dc=com"),
+      backend.renameEntry(DN.valueOf("uid=user.2,ou=People,dc=test,dc=com"),
           entry, null);
 
-      assertNotNull(backend.getEntry(DN.decode("cn=Abbey Abbie,ou=People,dc=test,dc=com")));
-      assertNotNull(ec.getDN2ID().get(null, DN.decode("cn=Abbey Abbie,ou=People,dc=test,dc=com"), LockMode.DEFAULT));
+      assertNotNull(backend.getEntry(DN.valueOf("cn=Abbey Abbie,ou=People,dc=test,dc=com")));
+      assertNotNull(ec.getDN2ID().get(null, DN.valueOf("cn=Abbey Abbie,ou=People,dc=test,dc=com"), LockMode.DEFAULT));
 
 
-      assertNull(backend.getEntry(DN.decode("uid=user.2,ou=People,dc=test,dc=com")));
+      assertNull(backend.getEntry(DN.valueOf("uid=user.2,ou=People,dc=test,dc=com")));
       assertNull(ec.getDN2ID().get(null,
-          DN.decode("uid=user.2,ou=People,dc=test,dc=com"), LockMode.DEFAULT));
+          DN.valueOf("uid=user.2,ou=People,dc=test,dc=com"), LockMode.DEFAULT));
     }
     finally
     {
@@ -1145,13 +1145,13 @@
     backend.addEntry(newTop, null);
 
     EntryContainer ec =
-        backend.getRootContainer().getEntryContainer(DN.decode("dc=test,dc=com"));
+        backend.getRootContainer().getEntryContainer(DN.valueOf("dc=test,dc=com"));
     ec.sharedLock.lock();
     try
     {
-      EntryID newSuperiorID = ec.getDN2ID().get(null, DN.decode("ou=JEB Testers,dc=test,dc=com"), LockMode.DEFAULT);
+      EntryID newSuperiorID = ec.getDN2ID().get(null, DN.valueOf("ou=JEB Testers,dc=test,dc=com"), LockMode.DEFAULT);
       EntryID oldID = ec.getDN2ID().get(null,
-          DN.decode("ou=People,dc=test,dc=com"), LockMode.DEFAULT);
+          DN.valueOf("ou=People,dc=test,dc=com"), LockMode.DEFAULT);
       assertTrue(newSuperiorID.compareTo(oldID) > 0);
 
       List<Control> noControls = new ArrayList<Control>(0);
@@ -1162,27 +1162,27 @@
           InternalClientConnection.nextOperationID(),
           InternalClientConnection.nextMessageID(),
           noControls,
-          DN.decode("ou=People,dc=test,dc=com"),
+          DN.valueOf("ou=People,dc=test,dc=com"),
           RDN.decode("ou=Good People"),
           false,
-          DN.decode("ou=JEB Testers,dc=test,dc=com"));
+          DN.valueOf("ou=JEB Testers,dc=test,dc=com"));
 
       modifyDN.run();
 
-      assertNotNull(backend.getEntry(DN.decode("ou=Good People,ou=JEB Testers,dc=test,dc=com")));
-      EntryID newID = ec.getDN2ID().get(null, DN.decode("ou=Good People,ou=JEB Testers,dc=test,dc=com"), LockMode.DEFAULT);
+      assertNotNull(backend.getEntry(DN.valueOf("ou=Good People,ou=JEB Testers,dc=test,dc=com")));
+      EntryID newID = ec.getDN2ID().get(null, DN.valueOf("ou=Good People,ou=JEB Testers,dc=test,dc=com"), LockMode.DEFAULT);
       assertNotNull(newID);
       assertTrue(newID.compareTo(newSuperiorID) > 0);
-      DN subDN = DN.decode("uid=user.0,ou=Good People,ou=JEB Testers,dc=test,dc=com");
+      DN subDN = DN.valueOf("uid=user.0,ou=Good People,ou=JEB Testers,dc=test,dc=com");
       Entry subEntry = backend.getEntry(subDN);
       assertNotNull(subEntry);
       assertEquals(subDN, subEntry.getDN());
       EntryID newSubordinateID = ec.getDN2ID().get(null, subDN, LockMode.DEFAULT);
       assertTrue(newSubordinateID.compareTo(newID) > 0);
 
-      assertNull(backend.getEntry(DN.decode("ou=People,dc=test,dc=com")));
+      assertNull(backend.getEntry(DN.valueOf("ou=People,dc=test,dc=com")));
       assertNull(ec.getDN2ID().get(null,
-          DN.decode("ou=People,dc=test,dc=com"), LockMode.DEFAULT));
+          DN.valueOf("ou=People,dc=test,dc=com"), LockMode.DEFAULT));
     }
     finally
     {
@@ -1219,9 +1219,9 @@
 
     RootContainer rootContainer = backend.getRootContainer();
 
-    assertNull(rootContainer.getEntryContainer(DN.decode("dc=test1,dc=com")));
+    assertNull(rootContainer.getEntryContainer(DN.valueOf("dc=test1,dc=com")));
 
-    assertNotNull(rootContainer.getEntryContainer(DN.decode("dc=newsuffix,dc=com")));
+    assertNotNull(rootContainer.getEntryContainer(DN.valueOf("dc=newsuffix,dc=com")));
   }
 
   @Test(dependsOnMethods = {"testModifyDN",
@@ -1241,7 +1241,7 @@
     assertEquals(resultCode, 0);
 
     RootContainer rootContainer = backend.getRootContainer();
-    EntryContainer ec = rootContainer.getEntryContainer(DN.decode("dc=test,dc=com"));
+    EntryContainer ec = rootContainer.getEntryContainer(DN.valueOf("dc=test,dc=com"));
 
     AttributeIndex index =
         ec.getAttributeIndex(DirectoryServer.getAttributeType("givenname"));
@@ -1292,7 +1292,7 @@
     attribs.add(ATTR_DEBUG_SEARCH_INDEX);
 
     InternalSearchOperation search =
-        conn.processSearch(DN.decode("dc=test,dc=com"),
+        conn.processSearch(DN.valueOf("dc=test,dc=com"),
 
                            SearchScope.SUBORDINATE_SUBTREE,
 
@@ -1474,7 +1474,7 @@
     attribs.add(ATTR_DEBUG_SEARCH_INDEX);
 
     InternalSearchOperation search =
-        conn.processSearch(DN.decode("dc=test,dc=com"),
+        conn.processSearch(DN.valueOf("dc=test,dc=com"),
             SearchScope.SUBORDINATE_SUBTREE,
             DereferencePolicy.NEVER_DEREF_ALIASES,
             0,
@@ -1494,24 +1494,24 @@
   @Test(dependsOnMethods = "testSearchNotIndexed")
   public void testNumSubordinatesIndexEntryLimitExceeded() throws Exception
   {
-    DN dn = DN.decode("dc=test,dc=com");
+    DN dn = DN.valueOf("dc=test,dc=com");
     assertEquals(backend.numSubordinates(dn, false), 1);
     assertEquals(backend.numSubordinates(dn, true), 14);
 
     // 1 entry was deleted and 2 added for a total of 13
-    dn = DN.decode("ou=People,dc=test,dc=com");
+    dn = DN.valueOf("ou=People,dc=test,dc=com");
     assertEquals(backend.numSubordinates(dn, false), 13);
     assertEquals(backend.numSubordinates(dn, true), 13);
-    dn = DN.decode("dc=com");
+    dn = DN.valueOf("dc=com");
     assertEquals(backend.numSubordinates(dn, false), -1);
     assertEquals(backend.numSubordinates(dn, true), -1);
-    dn = DN.decode("dc=test1,dc=com");
+    dn = DN.valueOf("dc=test1,dc=com");
     assertEquals(backend.numSubordinates(dn, false), 2);
     assertEquals(backend.numSubordinates(dn, true), 2);
-    dn = DN.decode("uid=user.10,ou=People,dc=test,dc=com");
+    dn = DN.valueOf("uid=user.10,ou=People,dc=test,dc=com");
     assertEquals(backend.numSubordinates(dn, false), 0);
     assertEquals(backend.numSubordinates(dn, true), 0);
-    dn = DN.decode("uid=does not exist,ou=People,dc=test,dc=com");
+    dn = DN.valueOf("uid=does not exist,ou=People,dc=test,dc=com");
     assertEquals(backend.numSubordinates(dn, false), -1);
     assertEquals(backend.numSubordinates(dn, true), -1);
   }
@@ -1529,10 +1529,10 @@
     ResultCode success      = ResultCode.SUCCESS;
     ResultCode noSuchObject = ResultCode.NO_SUCH_OBJECT;
 
-    DN testComDN            = DN.decode(                   "dc=test,dc=com");
-    DN dummyTestComDN       = DN.decode(          "cn=dummy,dc=test,dc=com");
-    DN peopleTestComDN      = DN.decode(         "ou=people,dc=test,dc=com");
-    DN dummyPeopleTestComDN = DN.decode("cn=dummy,ou=people,dc=test,dc=com");
+    DN testComDN            = DN.valueOf(                   "dc=test,dc=com");
+    DN dummyTestComDN       = DN.valueOf(          "cn=dummy,dc=test,dc=com");
+    DN peopleTestComDN      = DN.valueOf(         "ou=people,dc=test,dc=com");
+    DN dummyPeopleTestComDN = DN.valueOf("cn=dummy,ou=people,dc=test,dc=com");
 
     // Sets of DNs
     return new Object[][] {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestEntryContainer.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestEntryContainer.java
index b8cabf6..15fabaf 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestEntryContainer.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestEntryContainer.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
@@ -155,7 +156,7 @@
     be=(BackendImpl) DirectoryServer.getBackend(beID);
     RootContainer rootContainer = be.getRootContainer();
     EntryContainer entryContainer =
-        rootContainer.getEntryContainer(DN.decode("dc=example,dc=com"));
+        rootContainer.getEntryContainer(DN.valueOf("dc=example,dc=com"));
 
     entryContainer.sharedLock.lock();
     try
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestImportJob.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestImportJob.java
index d4f10d1..4fcc23c 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestImportJob.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestImportJob.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
@@ -279,8 +279,8 @@
     writer.close();
     ldifFile.close();
 
-    baseDNs = new DN[] { DN.decode("dc=importtest,dc=com"),
-        DN.decode("dc=importtest1,dc=com") };
+    baseDNs = new DN[] { DN.valueOf("dc=importtest,dc=com"),
+        DN.valueOf("dc=importtest1,dc=com") };
 
   }
 
@@ -342,13 +342,13 @@
           assertEquals(entryContainer.getEntryCount(), 5);
           assertTrue(entryContainer.entryExists(baseDN));
           assertTrue(entryContainer.entryExists(DN
-              .decode("ou=People,dc=importtest,dc=com")));
+              .valueOf("ou=People,dc=importtest,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("ou=Others,ou=People,dc=importtest,dc=com")));
+              .valueOf("ou=Others,ou=People,dc=importtest,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.0,ou=People,dc=importtest,dc=com")));
+              .valueOf("uid=user.0,ou=People,dc=importtest,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.539,ou=People,dc=importtest,dc=com")));
+              .valueOf("uid=user.539,ou=People,dc=importtest,dc=com")));
 
           VerifyConfig verifyConfig = new VerifyConfig();
           verifyConfig.setBaseDN(baseDN);
@@ -363,9 +363,9 @@
           assertEquals(entryContainer.getEntryCount(), 3);
           assertTrue(entryContainer.entryExists(baseDN));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.446,dc=importtest1,dc=com")));
+              .valueOf("uid=user.446,dc=importtest1,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.362,dc=importtest1,dc=com")));
+              .valueOf("uid=user.362,dc=importtest1,dc=com")));
 
           VerifyConfig verifyConfig = new VerifyConfig();
           verifyConfig.setBaseDN(baseDN);
@@ -394,9 +394,9 @@
     fileList.add(homeDirName + File.separator + "entries1.ldif");
 
     ArrayList<DN> includeBranches = new ArrayList<DN>();
-    includeBranches.add(DN.decode("ou=People,dc=importtest,dc=com"));
+    includeBranches.add(DN.valueOf("ou=People,dc=importtest,dc=com"));
     ArrayList<DN> excludeBranches = new ArrayList<DN>();
-    excludeBranches.add(DN.decode("ou=Others,ou=People,dc=importtest,dc=com"));
+    excludeBranches.add(DN.valueOf("ou=Others,ou=People,dc=importtest,dc=com"));
 
     ByteArrayOutputStream rejectedEntries = new ByteArrayOutputStream();
     ByteArrayOutputStream skippedEntries = new ByteArrayOutputStream();
@@ -438,13 +438,13 @@
           assertEquals(entryContainer.getEntryCount(), 5);
           assertTrue(entryContainer.entryExists(baseDN));
           assertTrue(entryContainer.entryExists(DN
-              .decode("ou=People,dc=importtest,dc=com")));
+              .valueOf("ou=People,dc=importtest,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("ou=Others,ou=People,dc=importtest,dc=com")));
+              .valueOf("ou=Others,ou=People,dc=importtest,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.0,ou=People,dc=importtest,dc=com")));
+              .valueOf("uid=user.0,ou=People,dc=importtest,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.539,ou=People,dc=importtest,dc=com")));
+              .valueOf("uid=user.539,ou=People,dc=importtest,dc=com")));
 
           VerifyConfig verifyConfig = new VerifyConfig();
           verifyConfig.setBaseDN(baseDN);
@@ -459,9 +459,9 @@
           assertEquals(entryContainer.getEntryCount(), 3);
           assertTrue(entryContainer.entryExists(baseDN));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.446,dc=importtest1,dc=com")));
+              .valueOf("uid=user.446,dc=importtest1,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.362,dc=importtest1,dc=com")));
+              .valueOf("uid=user.362,dc=importtest1,dc=com")));
 
           VerifyConfig verifyConfig = new VerifyConfig();
           verifyConfig.setBaseDN(baseDN);
@@ -509,7 +509,7 @@
     EntryContainer entryContainer;
 
     entryContainer = rootContainer.getEntryContainer(DN
-        .decode("dc=importtest1,dc=com"));
+        .valueOf("dc=importtest1,dc=com"));
     assertNotNull(entryContainer);
 
     entryContainer.sharedLock.lock();
@@ -517,7 +517,7 @@
     {
       assertTrue(rejectedEntries.size() <= 0);
       Entry entry = entryContainer.getEntry(DN
-          .decode("uid=user.446,dc=importtest1,dc=com"));
+          .valueOf("uid=user.446,dc=importtest1,dc=com"));
       assertNotNull(entry);
 
       AttributeType attribute = entry.getAttribute("cn").get(0)
@@ -527,7 +527,7 @@
           AttributeValues.create(attribute, "Annalee Bogard")));
 
       VerifyConfig verifyConfig = new VerifyConfig();
-      verifyConfig.setBaseDN(DN.decode("dc=importtest1,dc=com"));
+      verifyConfig.setBaseDN(DN.valueOf("dc=importtest1,dc=com"));
 
       Entry statEntry = bldStatEntry("");
       be = (BackendImpl) DirectoryServer.getBackend(beID);
@@ -623,20 +623,20 @@
           assertEquals(entryContainer.getEntryCount(), 5);
           assertTrue(entryContainer.entryExists(baseDN));
           assertTrue(entryContainer.entryExists(DN
-              .decode("ou=People,dc=importtest,dc=com")));
+              .valueOf("ou=People,dc=importtest,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.0,ou=People,dc=importtest,dc=com")));
+              .valueOf("uid=user.0,ou=People,dc=importtest,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.539,ou=People,dc=importtest,dc=com")));
+              .valueOf("uid=user.539,ou=People,dc=importtest,dc=com")));
         }
         else if (baseDN.toString().equals("dc=importtest1,dc=com"))
         {
           assertEquals(entryContainer.getEntryCount(), 3);
           assertTrue(entryContainer.entryExists(baseDN));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.446,dc=importtest1,dc=com")));
+              .valueOf("uid=user.446,dc=importtest1,dc=com")));
           assertTrue(entryContainer.entryExists(DN
-              .decode("uid=user.362,dc=importtest1,dc=com")));
+              .valueOf("uid=user.362,dc=importtest1,dc=com")));
         }
       }
       finally
@@ -681,7 +681,7 @@
   public void testImportSkip() throws Exception
   {
     ArrayList<DN> excludeBranches = new ArrayList<DN>();
-    excludeBranches.add(DN.decode("dc=skipped,dc=importtest1,dc=com"));
+    excludeBranches.add(DN.valueOf("dc=skipped,dc=importtest1,dc=com"));
     ByteArrayOutputStream skippedEntries = new ByteArrayOutputStream();
     LDIFImportConfig importConfig = new LDIFImportConfig(homeDirName
         + File.separator + "skipped.ldif");
@@ -721,7 +721,7 @@
    */
   private Entry bldStatEntry(String dn) throws DirectoryException
   {
-    DN entryDN = DN.decode(dn);
+    DN entryDN = DN.valueOf(dn);
     HashMap<ObjectClass, String> ocs = new HashMap<ObjectClass, String>(2);
     ObjectClass topOC = DirectoryServer.getObjectClass(OC_TOP);
     if (topOC == null)
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestRebuildJob.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestRebuildJob.java
index f08e92a..151fc2d 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestRebuildJob.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestRebuildJob.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
@@ -129,7 +129,7 @@
     TestCaseUtils.startServer();
     TestCaseUtils.enableBackend(beID);
     baseDNs = new DN[] {
-        DN.decode(suffix)
+        DN.valueOf(suffix)
     };
   }
 
@@ -392,7 +392,7 @@
    * @throws DirectoryException if the cannot be created.
    */
   private Entry bldStatEntry(String dn) throws DirectoryException {
-    DN entryDN = DN.decode(dn);
+    DN entryDN = DN.valueOf(dn);
     HashMap<ObjectClass, String> ocs = new HashMap<ObjectClass, String>(2);
     ObjectClass topOC = DirectoryServer.getObjectClass(OC_TOP);
     if (topOC == null) {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVLVIndex.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVLVIndex.java
index 28d4ba3..9aac929 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVLVIndex.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVLVIndex.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
@@ -99,16 +99,16 @@
         DirectoryServer.getAttributeType("uid"), true);
     sortOrder = new SortOrder(sortKeys);
 
-    aaccfJohnsonDN    = DN.decode("uid=aaccf.johnson,dc=vlvtest,dc=com");
-    aaronZimmermanDN  = DN.decode("uid=aaron.zimmerman,dc=vlvtest,dc=com");
-    albertSmithDN     = DN.decode("uid=albert.smith,dc=vlvtest,dc=com");
-    albertZimmermanDN = DN.decode("uid=albert.zimmerman,dc=vlvtest,dc=com");
-    lowercaseMcGeeDN  = DN.decode("uid=lowercase.mcgee,dc=vlvtest,dc=com");
-    margaretJonesDN   = DN.decode("uid=margaret.jones,dc=vlvtest,dc=com");
-    maryJonesDN       = DN.decode("uid=mary.jones,dc=vlvtest,dc=com");
-    samZweckDN        = DN.decode("uid=sam.zweck,dc=vlvtest,dc=com");
-    zorroDN           = DN.decode("uid=zorro,dc=vlvtest,dc=com");
-    suffixDN          = DN.decode("dc=vlvtest,dc=com");
+    aaccfJohnsonDN    = DN.valueOf("uid=aaccf.johnson,dc=vlvtest,dc=com");
+    aaronZimmermanDN  = DN.valueOf("uid=aaron.zimmerman,dc=vlvtest,dc=com");
+    albertSmithDN     = DN.valueOf("uid=albert.smith,dc=vlvtest,dc=com");
+    albertZimmermanDN = DN.valueOf("uid=albert.zimmerman,dc=vlvtest,dc=com");
+    lowercaseMcGeeDN  = DN.valueOf("uid=lowercase.mcgee,dc=vlvtest,dc=com");
+    margaretJonesDN   = DN.valueOf("uid=margaret.jones,dc=vlvtest,dc=com");
+    maryJonesDN       = DN.valueOf("uid=mary.jones,dc=vlvtest,dc=com");
+    samZweckDN        = DN.valueOf("uid=sam.zweck,dc=vlvtest,dc=com");
+    zorroDN           = DN.valueOf("uid=zorro,dc=vlvtest,dc=com");
+    suffixDN          = DN.valueOf("dc=vlvtest,dc=com");
 
     expectedSortedValues = new TreeSet<SortValues>();
 
@@ -246,7 +246,7 @@
     be=(BackendImpl) DirectoryServer.getBackend(beID);
     RootContainer rootContainer = be.getRootContainer();
     EntryContainer entryContainer =
-        rootContainer.getEntryContainer(DN.decode("dc=vlvtest,dc=com"));
+        rootContainer.getEntryContainer(DN.valueOf("dc=vlvtest,dc=com"));
 
     for(VLVIndex vlvIndex : entryContainer.getVLVIndexes())
     {
@@ -309,7 +309,7 @@
     be=(BackendImpl) DirectoryServer.getBackend(beID);
     RootContainer rootContainer = be.getRootContainer();
     EntryContainer entryContainer =
-        rootContainer.getEntryContainer(DN.decode("dc=vlvtest,dc=com"));
+        rootContainer.getEntryContainer(DN.valueOf("dc=vlvtest,dc=com"));
 
     for(VLVIndex vlvIndex : entryContainer.getVLVIndexes())
     {
@@ -378,7 +378,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -466,7 +466,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -554,7 +554,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -641,7 +641,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -695,7 +695,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -748,7 +748,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -816,7 +816,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -904,7 +904,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -993,7 +993,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -1082,7 +1082,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -1171,7 +1171,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
@@ -1260,7 +1260,7 @@
     InternalSearchOperation internalSearch =
         new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                     InternalClientConnection.nextMessageID(), requestControls,
-                                    DN.decode("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
+                                    DN.valueOf("dc=vlvtest,dc=com"), SearchScope.WHOLE_SUBTREE,
                                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                                     SearchFilter.createFilterFromString("(objectClass=*)"),
                                     null, null);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVerifyJob.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVerifyJob.java
index a1f84a2..4858255 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVerifyJob.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestVerifyJob.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
@@ -132,7 +132,7 @@
     TestCaseUtils.startServer();
     TestCaseUtils.enableBackend(beID);
     baseDNs = new DN[] {
-         DN.decode(suffix)
+         DN.valueOf(suffix)
     };
   }
 
@@ -218,11 +218,11 @@
     try
     {
       //Add a junk DN and non-existent entry id to DN2ID index
-      DN testDN=DN.decode(junkDN);
+      DN testDN=DN.valueOf(junkDN);
       EntryID id=new EntryID(45);
       assertTrue(dn2id.insert(txn, testDN, id));
       //Make two DN keys point at same entry.
-      testDN=DN.decode(junkDN1);
+      testDN=DN.valueOf(junkDN1);
       id=new EntryID(3);
       assertTrue(dn2id.insert(txn, testDN, id));
       //Add badDN key with bad entry id
@@ -238,7 +238,7 @@
       //Try to break JebFormat version
       addID2EntryReturnKey(junkDN3, 20, true);
       id=new EntryID(20);
-      assertTrue(dn2id.insert(txn, DN.decode(junkDN3), id));
+      assertTrue(dn2id.insert(txn, DN.valueOf(junkDN3), id));
       performBECleanVerify("dn2id", 5);
     }
     finally
@@ -484,13 +484,13 @@
       //entry has dn2id key but its entryID -- don't need key
       addID2EntryReturnKey(junkDN1, 11, false);
       //insert key with bad entry id (45 instead of 10)
-      DN testDN=DN.decode(junkDN1);
+      DN testDN=DN.valueOf(junkDN1);
       EntryID id=new EntryID(45);
       assertTrue(dn2id.insert(txn, testDN, id));
       //entry has no parent in dn2id
       addID2EntryReturnKey(noParentDN, 12, false);
       //add the key/id
-      testDN=DN.decode(noParentDN);
+      testDN=DN.valueOf(noParentDN);
       id=new EntryID(12);
       assertTrue(dn2id.insert(txn, testDN, id));
       performBECompleteVerify("dn2id", 3);
@@ -842,7 +842,7 @@
     cleanAndLoad(numEntries);
     be=(BackendImpl) DirectoryServer.getBackend(beID);
     RootContainer rContainer = be.getRootContainer();
-    eContainer= rContainer.getEntryContainer(DN.decode(suffix));
+    eContainer= rContainer.getEntryContainer(DN.valueOf(suffix));
     id2child=eContainer.getID2Children();
     id2entry=eContainer.getID2Entry();
     id2subtree=eContainer.getID2Subtree();
@@ -890,7 +890,7 @@
    * @throws DirectoryException if the cannot be created.
    */
   private Entry bldStatEntry(String dn) throws DirectoryException {
-    DN entryDN = DN.decode(dn);
+    DN entryDN = DN.valueOf(dn);
     HashMap<ObjectClass, String> ocs = new HashMap<ObjectClass, String>(2);
     ObjectClass topOC = DirectoryServer.getObjectClass(OC_TOP);
     if (topOC == null) {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/task/TaskBackendTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/task/TaskBackendTestCase.java
index cc95e13..00b08bf 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/task/TaskBackendTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/task/TaskBackendTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends.task;
 
@@ -117,9 +118,9 @@
       "ds-task-class-name: org.opends.server.tasks.DummyTask",
       "ds-task-scheduled-start-time: " + startTimeStr,
       "ds-task-dummy-sleep-time: 30000");
-    assertTrue(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf(taskDN)));
 
-    Task task = TasksTestCase.getTask(DN.decode(taskDN));
+    Task task = TasksTestCase.getTask(DN.valueOf(taskDN));
     assertTrue(TaskState.isPending(task.getTaskState()));
 
     // Perform a modification to delete that task.
@@ -127,7 +128,7 @@
       "dn: " + taskDN,
       "changetype: delete");
     assertEquals(resultCode, 0);
-    assertFalse(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf(taskDN)));
   }
 
 
@@ -154,12 +155,12 @@
       "ds-task-id: " + taskID,
       "ds-task-class-name: org.opends.server.tasks.DummyTask",
       "ds-task-dummy-sleep-time: 300000");
-    assertTrue(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf(taskDN)));
 
 
     // Wait until we're sure that the task has started running.
     long startTime = System.currentTimeMillis();
-    Task task = TasksTestCase.getTask(DN.decode(taskDN));
+    Task task = TasksTestCase.getTask(DN.valueOf(taskDN));
     while (TaskState.isPending(task.getTaskState()))
     {
       Thread.sleep(10);
@@ -177,7 +178,7 @@
       "dn: " + taskDN,
       "changetype: delete");
     assertFalse(resultCode == 0);
-    assertTrue(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf(taskDN)));
   }
 
 
@@ -203,11 +204,11 @@
       "objectClass: extensibleObject",
       "ds-task-id: " + taskID,
       "ds-task-class-name: org.opends.server.tasks.DummyTask");
-    assertTrue(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf(taskDN)));
 
 
     // Wait until the task has completed.
-    Task task = TasksTestCase.getCompletedTask(DN.decode(taskDN));
+    Task task = TasksTestCase.getCompletedTask(DN.valueOf(taskDN));
     assertTrue(TaskState.isDone(task.getTaskState()));
 
 
@@ -216,7 +217,7 @@
       "dn: " + taskDN,
       "changetype: delete");
     assertEquals(resultCode, 0);
-    assertFalse(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf(taskDN)));
   }
 
 
@@ -251,9 +252,9 @@
       "ds-task-class-name: org.opends.server.tasks.DummyTask",
       "ds-task-scheduled-start-time: " + startTimeStr,
       "ds-task-dummy-sleep-time: 30000");
-    assertTrue(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf(taskDN)));
 
-    Task task = TasksTestCase.getTask(DN.decode(taskDN));
+    Task task = TasksTestCase.getTask(DN.valueOf(taskDN));
     assertTrue(TaskState.isPending(task.getTaskState()));
 
     // Perform a modification to update a non-state attribute.
@@ -277,7 +278,7 @@
     resultCode = TestCaseUtils.applyModifications(true,
       "dn: " + taskDN,
       "changetype: delete");
-    assertFalse(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf(taskDN)));
   }
 
 
@@ -305,12 +306,12 @@
       "ds-task-id: " + taskID,
       "ds-task-class-name: org.opends.server.tasks.DummyTask",
       "ds-task-dummy-sleep-time: 300000");
-    assertTrue(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf(taskDN)));
 
 
     // Wait until we're sure that the task has started running.
     long startTime = System.currentTimeMillis();
-    Task task = TasksTestCase.getTask(DN.decode(taskDN));
+    Task task = TasksTestCase.getTask(DN.valueOf(taskDN));
     while (TaskState.isPending(task.getTaskState()))
     {
       Thread.sleep(10);
@@ -343,7 +344,7 @@
 
     // We may have to wait for the task to register as done, but it should
     // definitely be done before it would have stopped normally.
-    task = TasksTestCase.getCompletedTask(DN.decode(taskDN));
+    task = TasksTestCase.getCompletedTask(DN.valueOf(taskDN));
     assertTrue((System.currentTimeMillis() - startTime) < 300000L);
     assertTrue(TaskState.isDone(task.getTaskState()));
 
@@ -353,7 +354,7 @@
     resultCode = TestCaseUtils.applyModifications(true,
       "dn: " + taskDN,
       "changetype: delete");
-    assertFalse(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf(taskDN)));
   }
 
 
@@ -378,11 +379,11 @@
       "objectClass: extensibleObject",
       "ds-task-id: " + taskID,
       "ds-task-class-name: org.opends.server.tasks.DummyTask");
-    assertTrue(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf(taskDN)));
 
 
     // Wait until the task has completed.
-    Task task = TasksTestCase.getCompletedTask(DN.decode(taskDN));
+    Task task = TasksTestCase.getCompletedTask(DN.valueOf(taskDN));
     assertTrue(TaskState.isDone(task.getTaskState()));
 
 
@@ -400,7 +401,7 @@
       "dn: " + taskDN,
       "changetype: delete");
     assertEquals(resultCode, 0);
-    assertFalse(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf(taskDN)));
   }
 
 
@@ -492,14 +493,14 @@
       Integer.toString(scheduledMonth) + " *";
 
     TaskBackend taskBackend =
-      (TaskBackend) DirectoryServer.getBackend(DN.decode("cn=tasks"));
-    long tasksCountBefore = taskBackend.numSubordinates(DN.decode(
+      (TaskBackend) DirectoryServer.getBackend(DN.valueOf("cn=tasks"));
+    long tasksCountBefore = taskBackend.numSubordinates(DN.valueOf(
       "cn=Scheduled Tasks,cn=tasks"), true);
 
     assertTrue(addRecurringTask(taskID, taskSchedule));
 
     // Make sure recurring task iteration got scheduled.
-    long tasksCountAfter = taskBackend.numSubordinates(DN.decode(
+    long tasksCountAfter = taskBackend.numSubordinates(DN.valueOf(
       "cn=Scheduled Tasks,cn=tasks"), true);
     assertTrue(tasksCountAfter == (tasksCountBefore + 1));
 
@@ -516,10 +517,10 @@
         TestCaseUtils.applyModifications(true, "dn: " + taskDN,
             "changetype: delete");
     assertEquals(resultCode, 0);
-    assertFalse(DirectoryServer.entryExists(DN.decode(taskDN)));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf(taskDN)));
 
     // Make sure recurring task iteration got canceled and removed.
-    tasksCountAfter = taskBackend.numSubordinates(DN.decode(
+    tasksCountAfter = taskBackend.numSubordinates(DN.valueOf(
       "cn=Scheduled Tasks,cn=tasks"), true);
     assertTrue(tasksCountAfter == tasksCountBefore);
   }
@@ -555,7 +556,7 @@
             TestCaseUtils.applyModifications(true, "dn: " + taskDN,
                 "changetype: delete");
         assertEquals(resultCode, 0);
-        assertFalse(DirectoryServer.entryExists(DN.decode(taskDN)));
+        assertFalse(DirectoryServer.entryExists(DN.valueOf(taskDN)));
       }
     }
     finally
@@ -610,6 +611,6 @@
       return false;
     }
 
-    return DirectoryServer.entryExists(DN.decode(taskDN));
+    return DirectoryServer.entryExists(DN.valueOf(taskDN));
   }
 }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/PersistentSearchControlTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/PersistentSearchControlTest.java
index 966a2c2..fbed063 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/PersistentSearchControlTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/PersistentSearchControlTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
 
@@ -412,7 +413,7 @@
     // Test constructor EntryChangeNotificationControl
     // (PersistentSearchChangeType changeType, DN previousDN, long
     // changeNumber)
-    DN dn = DN.decode(dnString);
+    DN dn = DN.valueOf(dnString);
     for (PersistentSearchChangeType type : types)
     {
       ecnc = new EntryChangeNotificationControl(type, dn, changeNumber);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ProxiedAuthV1ControlTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ProxiedAuthV1ControlTestCase.java
index f8469f3..33c6229 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ProxiedAuthV1ControlTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ProxiedAuthV1ControlTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
 
@@ -88,7 +89,7 @@
     proxyControl = new ProxiedAuthV1Control(ByteString.valueOf(""));
     assertTrue(proxyControl.getOID().equals(OID_PROXIED_AUTH_V1));
     assertTrue(proxyControl.isCritical());
-    assertTrue(proxyControl.getAuthorizationDN().isNullDN());
+    assertTrue(proxyControl.getAuthorizationDN().isRootDN());
 
 
     // Try a valid DN, which is acceptable.
@@ -97,7 +98,7 @@
     assertTrue(proxyControl.getOID().equals(OID_PROXIED_AUTH_V1));
     assertTrue(proxyControl.isCritical());
     assertEquals(proxyControl.getAuthorizationDN(),
-                 DN.decode("uid=test,o=test"));
+                 DN.valueOf("uid=test,o=test"));
 
 
     // Try an invalid DN, which will be initally accepted but will fail when
@@ -137,19 +138,19 @@
 
 
     // Try an empty DN, which is acceptable.
-    proxyControl = new ProxiedAuthV1Control(DN.nullDN());
+    proxyControl = new ProxiedAuthV1Control(DN.rootDN());
     assertTrue(proxyControl.getOID().equals(OID_PROXIED_AUTH_V1));
     assertTrue(proxyControl.isCritical());
-    assertTrue(proxyControl.getAuthorizationDN().isNullDN());
+    assertTrue(proxyControl.getAuthorizationDN().isRootDN());
 
 
     // Try a valid DN, which is acceptable.
     proxyControl =
-         new ProxiedAuthV1Control(DN.decode("uid=test,o=test"));
+         new ProxiedAuthV1Control(DN.valueOf("uid=test,o=test"));
     assertTrue(proxyControl.getOID().equals(OID_PROXIED_AUTH_V1));
     assertTrue(proxyControl.isCritical());
     assertEquals(proxyControl.getAuthorizationDN(),
-                 DN.decode("uid=test,o=test"));
+                 DN.valueOf("uid=test,o=test"));
   }
 
 
@@ -303,7 +304,7 @@
         new LDAPControl(OID_PROXIED_AUTH_V1, true, bsb.toByteString());
 
     ProxiedAuthV1Control proxyControl = ProxiedAuthV1Control.DECODER.decode(c.isCritical(), c.getValue());
-    assertTrue(proxyControl.getAuthorizationDN().isNullDN());
+    assertTrue(proxyControl.getAuthorizationDN().isRootDN());
   }
 
 
@@ -328,7 +329,7 @@
 
     ProxiedAuthV1Control proxyControl = ProxiedAuthV1Control.DECODER.decode(c.isCritical(), c.getValue());
     assertEquals(proxyControl.getAuthorizationDN(),
-                 DN.decode("uid=test,o=test"));
+                 DN.valueOf("uid=test,o=test"));
   }
 
 
@@ -366,16 +367,16 @@
          throws Exception
   {
     ProxiedAuthV1Control proxyControl =
-         new ProxiedAuthV1Control(DN.nullDN());
+         new ProxiedAuthV1Control(DN.rootDN());
     assertEquals(proxyControl.getRawAuthorizationDN(), ByteString.valueOf(""));
-    assertEquals(proxyControl.getAuthorizationDN(), DN.nullDN());
+    assertEquals(proxyControl.getAuthorizationDN(), DN.rootDN());
 
     proxyControl =
-         new ProxiedAuthV1Control(DN.decode("uid=test,o=test"));
+         new ProxiedAuthV1Control(DN.valueOf("uid=test,o=test"));
     assertEquals(proxyControl.getRawAuthorizationDN(),
                  ByteString.valueOf("uid=test,o=test"));
     assertEquals(proxyControl.getAuthorizationDN(),
-                 DN.decode("uid=test,o=test"));
+                 DN.valueOf("uid=test,o=test"));
   }
 
 
@@ -390,7 +391,7 @@
          throws Exception
   {
     ProxiedAuthV1Control proxyControl =
-         new ProxiedAuthV1Control(DN.nullDN());
+         new ProxiedAuthV1Control(DN.rootDN());
 
     assertNull(proxyControl.getAuthorizationEntry());
   }
@@ -421,10 +422,10 @@
       "cn: Test User");
 
     ProxiedAuthV1Control proxyControl =
-         new ProxiedAuthV1Control(DN.decode("uid=test,o=test"));
+         new ProxiedAuthV1Control(DN.valueOf("uid=test,o=test"));
 
     assertEquals(proxyControl.getAuthorizationEntry().getDN(),
-                 DN.decode("uid=test,o=test"));
+                 DN.valueOf("uid=test,o=test"));
   }
 
 
@@ -442,7 +443,7 @@
     TestCaseUtils.initializeTestBackend(true);
 
     ProxiedAuthV1Control proxyControl =
-         new ProxiedAuthV1Control(DN.decode("uid=test,o=test"));
+         new ProxiedAuthV1Control(DN.valueOf("uid=test,o=test"));
 
     proxyControl.getAuthorizationEntry();
   }
@@ -472,7 +473,7 @@
       "ds-pwp-account-disabled: true");
 
     ProxiedAuthV1Control proxyControl =
-         new ProxiedAuthV1Control(DN.decode("uid=test,o=test"));
+         new ProxiedAuthV1Control(DN.valueOf("uid=test,o=test"));
 
     proxyControl.getAuthorizationEntry();
   }
@@ -494,7 +495,7 @@
          new ProxiedAuthV1Control(ByteString.valueOf("uid=test,o=test"));
     proxyControl.toString();
 
-    proxyControl = new ProxiedAuthV1Control(DN.decode("uid=test,o=test"));
+    proxyControl = new ProxiedAuthV1Control(DN.valueOf("uid=test,o=test"));
     proxyControl.toString();
   }
 }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ProxiedAuthV2ControlTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ProxiedAuthV2ControlTestCase.java
index dba65d7..ba4da8a 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ProxiedAuthV2ControlTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ProxiedAuthV2ControlTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
 
@@ -314,7 +315,7 @@
     ProxiedAuthV2Control proxyControl =
          new ProxiedAuthV2Control(ByteString.valueOf("dn:uid=test,o=test"));
     assertEquals(proxyControl.getAuthorizationEntry().getDN(),
-                 DN.decode("uid=test,o=test"));
+                 DN.valueOf("uid=test,o=test"));
   }
 
 
@@ -411,7 +412,7 @@
     ProxiedAuthV2Control proxyControl =
          new ProxiedAuthV2Control(ByteString.valueOf("u:test"));
     assertEquals(proxyControl.getAuthorizationEntry().getDN(),
-                 DN.decode("uid=test,o=test"));
+                 DN.valueOf("uid=test,o=test"));
   }
 
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ServerSideSortControlTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ServerSideSortControlTestCase.java
index 60e5beb..b5bba98 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ServerSideSortControlTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/ServerSideSortControlTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
 
@@ -114,15 +115,15 @@
     snType = DirectoryServer.getAttributeType("sn", false);
     assertNotNull(snType);
 
-    aaccfJohnsonDN    = DN.decode("uid=aaccf.johnson,dc=example,dc=com");
-    aaronZimmermanDN  = DN.decode("uid=aaron.zimmerman,dc=example,dc=com");
-    albertSmithDN     = DN.decode("uid=albert.smith,dc=example,dc=com");
-    albertZimmermanDN = DN.decode("uid=albert.zimmerman,dc=example,dc=com");
-    lowercaseMcGeeDN  = DN.decode("uid=lowercase.mcgee,dc=example,dc=com");
-    margaretJonesDN   = DN.decode("uid=margaret.jones,dc=example,dc=com");
-    maryJonesDN       = DN.decode("uid=mary.jones,dc=example,dc=com");
-    samZweckDN        = DN.decode("uid=sam.zweck,dc=example,dc=com");
-    zorroDN           = DN.decode("uid=zorro,dc=example,dc=com");
+    aaccfJohnsonDN    = DN.valueOf("uid=aaccf.johnson,dc=example,dc=com");
+    aaronZimmermanDN  = DN.valueOf("uid=aaron.zimmerman,dc=example,dc=com");
+    albertSmithDN     = DN.valueOf("uid=albert.smith,dc=example,dc=com");
+    albertZimmermanDN = DN.valueOf("uid=albert.zimmerman,dc=example,dc=com");
+    lowercaseMcGeeDN  = DN.valueOf("uid=lowercase.mcgee,dc=example,dc=com");
+    margaretJonesDN   = DN.valueOf("uid=margaret.jones,dc=example,dc=com");
+    maryJonesDN       = DN.valueOf("uid=mary.jones,dc=example,dc=com");
+    samZweckDN        = DN.valueOf("uid=sam.zweck,dc=example,dc=com");
+    zorroDN           = DN.valueOf("uid=zorro,dc=example,dc=com");
   }
 
 
@@ -319,7 +320,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -390,7 +391,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -459,7 +460,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -530,7 +531,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -599,7 +600,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -668,7 +669,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -737,7 +738,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -770,7 +771,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -801,7 +802,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/VLVControlTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/VLVControlTestCase.java
index b408bfb..1a3fac9 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/VLVControlTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/VLVControlTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
 
@@ -112,15 +113,15 @@
     snType = DirectoryServer.getAttributeType("sn", false);
     assertNotNull(snType);
 
-    aaccfJohnsonDN    = DN.decode("uid=aaccf.johnson,dc=example,dc=com");
-    aaronZimmermanDN  = DN.decode("uid=aaron.zimmerman,dc=example,dc=com");
-    albertSmithDN     = DN.decode("uid=albert.smith,dc=example,dc=com");
-    albertZimmermanDN = DN.decode("uid=albert.zimmerman,dc=example,dc=com");
-    lowercaseMcGeeDN  = DN.decode("uid=lowercase.mcgee,dc=example,dc=com");
-    margaretJonesDN   = DN.decode("uid=margaret.jones,dc=example,dc=com");
-    maryJonesDN       = DN.decode("uid=mary.jones,dc=example,dc=com");
-    samZweckDN        = DN.decode("uid=sam.zweck,dc=example,dc=com");
-    zorroDN           = DN.decode("uid=zorro,dc=example,dc=com");
+    aaccfJohnsonDN    = DN.valueOf("uid=aaccf.johnson,dc=example,dc=com");
+    aaronZimmermanDN  = DN.valueOf("uid=aaron.zimmerman,dc=example,dc=com");
+    albertSmithDN     = DN.valueOf("uid=albert.smith,dc=example,dc=com");
+    albertZimmermanDN = DN.valueOf("uid=albert.zimmerman,dc=example,dc=com");
+    lowercaseMcGeeDN  = DN.valueOf("uid=lowercase.mcgee,dc=example,dc=com");
+    margaretJonesDN   = DN.valueOf("uid=margaret.jones,dc=example,dc=com");
+    maryJonesDN       = DN.valueOf("uid=mary.jones,dc=example,dc=com");
+    samZweckDN        = DN.valueOf("uid=sam.zweck,dc=example,dc=com");
+    zorroDN           = DN.valueOf("uid=zorro,dc=example,dc=com");
   }
 
 
@@ -510,7 +511,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -603,7 +604,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -696,7 +697,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -788,7 +789,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -846,7 +847,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -903,7 +904,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -975,7 +976,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -1067,7 +1068,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -1161,7 +1162,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -1255,7 +1256,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -1349,7 +1350,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
@@ -1443,7 +1444,7 @@
     InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=person)"),
                   null, null);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java
index 02d23b9..6dff957 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.core;
 
@@ -62,7 +62,7 @@
   /** Some of the tests disable the backends, so we reenable them here. */
   @AfterMethod(alwaysRun=true)
   public void reenableBackend() throws DirectoryException {
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
     b.setWritabilityMode(WritabilityMode.ENABLED);
   }
 
@@ -344,7 +344,7 @@
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveCompletedOperationElements(addOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("ou=People,o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("ou=People,o=test"));
     assertTrue(e.hasObjectClass(oc));
 
     UpdatePreOpPlugin.reset();
@@ -385,7 +385,7 @@
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveCompletedOperationElements(addOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("ou=People,o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("ou=People,o=test"));
     assertFalse(e.hasObjectClass(oc));
 
     UpdatePreOpPlugin.reset();
@@ -427,7 +427,7 @@
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveCompletedOperationElements(addOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("ou=People,o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("ou=People,o=test"));
     List<Attribute> attrList = e.getAttribute(a.getAttributeType());
     assertNotNull(attrList);
     assertFalse(attrList.isEmpty());
@@ -490,7 +490,7 @@
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveCompletedOperationElements(addOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("ou=People,o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("ou=People,o=test"));
     List<Attribute> attrList = e.getAttribute(a.getAttributeType());
     assertNotNull(attrList);
     assertFalse(attrList.isEmpty());
@@ -534,7 +534,7 @@
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveCompletedOperationElements(addOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("ou=People,o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("ou=People,o=test"));
     List<Attribute> attrList = e.getAttribute(attrType);
     assertNull(attrList);
 
@@ -1159,7 +1159,7 @@
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveCompletedOperationElements(addOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("ou=People,o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("ou=People,o=test"));
     List<Attribute> attrList = e.getAttribute("ou");
     assertNotNull(attrList);
   }
@@ -1229,7 +1229,7 @@
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveCompletedOperationElements(addOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("uid=test.user,o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("uid=test.user,o=test"));
     List<Attribute> attrList =
          e.getAttribute(DirectoryServer.getObjectClassAttributeType());
     assertNotNull(attrList);
@@ -1727,7 +1727,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
 
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
     b.setWritabilityMode(WritabilityMode.DISABLED);
 
     AddOperation addOperation =
@@ -1768,7 +1768,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
 
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
     b.setWritabilityMode(WritabilityMode.INTERNAL_ONLY);
 
     AddOperation addOperation =
@@ -1822,7 +1822,7 @@
     values.add(ByteString.valueOf("People"));
     attrs.add(new LDAPAttribute("ou", values));
 
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
     b.setWritabilityMode(WritabilityMode.INTERNAL_ONLY);
 
     long addRequests  = ldapStatistics.getAddRequests();
@@ -2009,7 +2009,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    Lock entryLock = LockManager.lockRead(DN.decode("ou=People,o=test"));
+    Lock entryLock = LockManager.lockRead(DN.valueOf("ou=People,o=test"));
 
     try
     {
@@ -2030,7 +2030,7 @@
     }
     finally
     {
-      LockManager.unlock(DN.decode("ou=People,o=test"), entryLock);
+      LockManager.unlock(DN.valueOf("ou=People,o=test"), entryLock);
     }
   }
 
@@ -2502,7 +2502,7 @@
                           controls, ByteString.valueOf("o=test"), rawAttrs);
     addOperation.run();
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
-    assertFalse(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("o=test")));
   }
 }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BackendConfigManagerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BackendConfigManagerTestCase.java
index f91f8c6..a42e773 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BackendConfigManagerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BackendConfigManagerTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -85,7 +86,7 @@
   {
     TestCaseUtils.initializeTestBackend(false);
 
-    DN baseDN = DN.decode("o=test");
+    DN baseDN = DN.valueOf("o=test");
     String backendID = createBackendID(baseDN);
     Entry backendEntry = createBackendEntry(backendID, false, baseDN);
 
@@ -110,7 +111,7 @@
   public void testDeregisterNonExistentBaseDN()
          throws Exception
   {
-    DirectoryServer.deregisterBaseDN(DN.decode("o=unregistered"));
+    DirectoryServer.deregisterBaseDN(DN.valueOf("o=unregistered"));
   }
 
 
@@ -127,7 +128,7 @@
   {
     TestCaseUtils.initializeTestBackend(false);
 
-    DN baseDN = DN.decode("o=test");
+    DN baseDN = DN.valueOf("o=test");
     String backendID = "test";
     Entry backendEntry = createBackendEntry(backendID, false, baseDN);
 
@@ -152,7 +153,7 @@
   public void testAddAndRemoveDisabledBackend()
          throws Exception
   {
-    DN baseDN = DN.decode("o=bcmtest");
+    DN baseDN = DN.valueOf("o=bcmtest");
     String backendID = createBackendID(baseDN);
     Entry backendEntry = createBackendEntry(backendID, false, baseDN);
 
@@ -182,7 +183,7 @@
   public void testAddAndRemoveEnabledBackend()
          throws Exception
   {
-    DN baseDN = DN.decode("o=bcmtest");
+    DN baseDN = DN.valueOf("o=bcmtest");
     String backendID = createBackendID(baseDN);
     Entry backendEntry = createBackendEntry(backendID, true, baseDN);
 
@@ -228,7 +229,7 @@
          throws Exception
   {
     // Create the backend and make it disabled.
-    DN baseDN = DN.decode("o=bcmtest");
+    DN baseDN = DN.valueOf("o=bcmtest");
     String backendID = createBackendID(baseDN);
     Entry backendEntry = createBackendEntry(backendID, false, baseDN);
 
@@ -296,7 +297,7 @@
          throws Exception
   {
     // Create the parent backend and the corresponding base entry.
-    DN parentBaseDN = DN.decode("o=parent");
+    DN parentBaseDN = DN.valueOf("o=parent");
     String parentBackendID = createBackendID(parentBaseDN);
     Entry parentBackendEntry = createBackendEntry(parentBackendID, true,
                                                   parentBaseDN);
@@ -328,7 +329,7 @@
 
 
     // Create the child backend and the corresponding base entry.
-    DN childBaseDN = DN.decode("ou=child,o=parent");
+    DN childBaseDN = DN.valueOf("ou=child,o=parent");
     String childBackendID = createBackendID(childBaseDN);
     Entry childBackendEntry = createBackendEntry(childBackendID, true,
                                                  childBaseDN);
@@ -399,7 +400,7 @@
   {
     // Create the child backend and the corresponding base entry (at the time
     // of the creation, it will be a naming context).
-    DN childBaseDN = DN.decode("ou=child,o=parent");
+    DN childBaseDN = DN.valueOf("ou=child,o=parent");
     String childBackendID = createBackendID(childBaseDN);
     Entry childBackendEntry = createBackendEntry(childBackendID, true,
                                                  childBaseDN);
@@ -433,7 +434,7 @@
 
     // Create the parent backend and the corresponding entry (and verify that
     // its DN is now a naming context and the child's is not).
-    DN parentBaseDN = DN.decode("o=parent");
+    DN parentBaseDN = DN.valueOf("o=parent");
     String parentBackendID = createBackendID(parentBaseDN);
     Entry parentBackendEntry = createBackendEntry(parentBackendID, true,
                                                   parentBaseDN);
@@ -497,7 +498,7 @@
          throws Exception
   {
     // Add the parent backend to the server and its corresponding base entry.
-    DN parentBaseDN = DN.decode("o=parent");
+    DN parentBaseDN = DN.valueOf("o=parent");
     String parentBackendID = createBackendID(parentBaseDN);
     Entry parentBackendEntry = createBackendEntry(parentBackendID, true,
                                                   parentBaseDN);
@@ -529,7 +530,7 @@
 
 
     // Add the grandchild backend to the server.
-    DN grandchildBaseDN = DN.decode("ou=grandchild,ou=child,o=parent");
+    DN grandchildBaseDN = DN.valueOf("ou=grandchild,ou=child,o=parent");
     String grandchildBackendID = createBackendID(grandchildBaseDN);
     Entry grandchildBackendEntry = createBackendEntry(grandchildBackendID, true,
                                                       grandchildBaseDN);
@@ -561,7 +562,7 @@
 
 
     // Add the child backend to the server and create its base entry.
-    DN childBaseDN = DN.decode("ou=child,o=parent");
+    DN childBaseDN = DN.valueOf("ou=child,o=parent");
     String childBackendID = createBackendID(childBaseDN);
     Entry childBackendEntry = createBackendEntry(childBackendID, true,
                                                  childBaseDN);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BindOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BindOperationTestCase.java
index 0539ced..cef5c5e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BindOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BindOperationTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.core;
 
@@ -96,23 +96,23 @@
                         ByteString.valueOf("cn=Directory Manager"),
                         ByteString.valueOf("password")),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                        null, "3", DN.nullDN(), ByteString.empty()),
+                        null, "3", DN.rootDN(), ByteString.empty()),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                        noControls, "3", DN.nullDN(), ByteString.empty()),
+                        noControls, "3", DN.rootDN(), ByteString.empty()),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                         null, "3", nullDN, ByteString.empty()),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                         noControls, "3", nullDN, ByteString.empty()),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                        null, "3", DN.nullDN(), nullOS),
+                        null, "3", DN.rootDN(), nullOS),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                        noControls, "3", DN.nullDN(), nullOS),
+                        noControls, "3", DN.rootDN(), nullOS),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                         null, "3", nullDN, nullOS),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                         noControls, "3", nullDN, nullOS),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                        noControls, "3", DN.decode("cn=Directory Manager"),
+                        noControls, "3", DN.valueOf("cn=Directory Manager"),
                         ByteString.valueOf("password"))
     };
 
@@ -168,18 +168,18 @@
                         noControls, "3", nullOS, "PLAIN",
                         ByteString.valueOf("\u0000u:test.user\u0000password")),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                        null, "3", DN.nullDN(), "EXTERNAL", null),
+                        null, "3", DN.rootDN(), "EXTERNAL", null),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                        noControls, "3", DN.nullDN(), "EXTERNAL", null),
+                        noControls, "3", DN.rootDN(), "EXTERNAL", null),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                         null, "3", nullDN, "EXTERNAL", null),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                         noControls, "3", nullDN, "EXTERNAL", null),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                        null, "3", DN.nullDN(), "PLAIN",
+                        null, "3", DN.rootDN(), "PLAIN",
                         ByteString.valueOf("\u0000u:test.user\u0000password")),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                        noControls, "3", DN.nullDN(), "PLAIN",
+                        noControls, "3", DN.rootDN(), "PLAIN",
                         ByteString.valueOf("\u0000u:test.user\u0000password")),
       new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                         null, "3", nullDN, "PLAIN",
@@ -619,7 +619,7 @@
          ByteString.valueOf("\u0000dn:cn=Directory Manager\u0000password");
 
     BindOperation bindOperation =
-                       conn.processSASLBind(DN.nullDN(), "PLAIN", saslCreds);
+                       conn.processSASLBind(DN.rootDN(), "PLAIN", saslCreds);
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
     assertNotNull(bindOperation.getSASLAuthUserEntry());
   }
@@ -687,7 +687,7 @@
          ByteString.valueOf("\u0000dn:cn=Directory Manager\u0000password");
 
     BindOperation bindOperation =
-         conn.processSASLBind(DN.nullDN(), "PLAIN", saslCreds);
+         conn.processSASLBind(DN.rootDN(), "PLAIN", saslCreds);
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
     assertNotNull(bindOperation.getUserEntryDN());
   }
@@ -732,7 +732,7 @@
          ByteString.valueOf("\u0000dn:cn=Directory Manager\u0000password");
 
     BindOperation bindOperation =
-         conn.processSASLBind(DN.nullDN(), "PLAIN", saslCreds);
+         conn.processSASLBind(DN.rootDN(), "PLAIN", saslCreds);
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
     assertTrue(bindOperation.getProcessingStartTime() > 0);
     assertTrue(bindOperation.getProcessingStopTime() >=
@@ -812,7 +812,7 @@
          ByteString.valueOf("\u0000dn:cn=Directory Manager\u0000password");
 
     BindOperation bindOperation =
-         conn.processSASLBind(DN.nullDN(), "PLAIN", saslCreds);
+         conn.processSASLBind(DN.rootDN(), "PLAIN", saslCreds);
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
 
 //    assertTrue(InvocationCounterPlugin.getPreParseCount() > 0);
@@ -1516,7 +1516,7 @@
 
     BindOperationBasis bindOperation =
          new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                           requestControls, "3", DN.nullDN(),
+                           requestControls, "3", DN.rootDN(),
                         ByteString.empty());
     bindOperation.run();
     assertEquals(bindOperation.getResultCode(),
@@ -1543,7 +1543,7 @@
 
     BindOperationBasis bindOperation =
          new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                           requestControls, "3", DN.nullDN(), "PLAIN",
+                           requestControls, "3", DN.rootDN(), "PLAIN",
                         saslCreds);
     bindOperation.run();
     assertEquals(bindOperation.getResultCode(),
@@ -1567,7 +1567,7 @@
 
     BindOperationBasis bindOperation =
          new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                           requestControls, "3", DN.nullDN(),
+                           requestControls, "3", DN.rootDN(),
                            ByteString.empty());
 
     bindOperation.run();
@@ -1594,7 +1594,7 @@
 
     BindOperationBasis bindOperation =
          new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                           requestControls, "3", DN.nullDN(), "PLAIN",
+                           requestControls, "3", DN.rootDN(), "PLAIN",
                            saslCreds);
     bindOperation.run();
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
@@ -1671,7 +1671,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create(attr, "false")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode("cn=config"), mods);
+         conn.processModify(DN.valueOf("cn=config"), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
     BindOperation bindOperation =
@@ -1682,7 +1682,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create(attr, "true")));
-    modifyOperation =  conn.processModify(DN.decode("cn=config"), mods);
+    modifyOperation =  conn.processModify(DN.valueOf("cn=config"), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1855,7 +1855,7 @@
       "cn: Rebind Test",
       "userPassword: password");
     String dnString = "uid=rebind.test,o=test";
-    DN userDN = DN.decode(dnString);
+    DN userDN = DN.valueOf(dnString);
 
     Socket s = new Socket("127.0.0.1", TestCaseUtils.getServerLdapPort());
     TestCaseUtils.configureSocket(s);
@@ -1928,7 +1928,7 @@
       "userPassword: password");
 
     String dnString = "uid=test,ou=people,dc=example,dc=com";
-    DN userDN = DN.decode(dnString);
+    DN userDN = DN.valueOf(dnString);
 
     Socket s = new Socket("127.0.0.1", TestCaseUtils.getServerLdapPort());
     TestCaseUtils.configureSocket(s);
@@ -2005,7 +2005,7 @@
       "userPassword: password");
 
     String dnString = "uid=test,ou=people,dc=example,dc=com";
-    DN userDN = DN.decode(dnString);
+    DN userDN = DN.valueOf(dnString);
 
     Socket s = new Socket("127.0.0.1", TestCaseUtils.getServerLdapPort());
     TestCaseUtils.configureSocket(s);
@@ -2045,7 +2045,7 @@
     assertEquals(LDAPModify.mainModify(args, false, null, System.err), 0);
 
     String newDNString = "uid=test,ou=users,dc=example,dc=com";
-    DN newUserDN = DN.decode(newDNString);
+    DN newUserDN = DN.valueOf(newDNString);
 
     assertNotNull(DirectoryServer.getAuthenticatedUsers().get(
             newUserDN));
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/CompareOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/CompareOperationTestCase.java
index 0bca236..62bcdac 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/CompareOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/CompareOperationTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 
 package org.opends.server.core;
@@ -118,7 +118,7 @@
          "ds-privilege-name: proxied-auth");
 
     proxyUserConn =
-         new InternalClientConnection(DN.decode("uid=proxy.user,o=test"));
+         new InternalClientConnection(DN.valueOf("uid=proxy.user,o=test"));
   }
 
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java
index 55c9167..8a8a3c3 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.core;
 
@@ -62,7 +62,7 @@
   /** Some of the tests disable the backends, so we reenable them here. */
   @AfterMethod(alwaysRun=true)
   public void reenableBackend() throws DirectoryException {
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
     b.setWritabilityMode(WritabilityMode.ENABLED);
   }
 
@@ -80,10 +80,10 @@
       newDeleteOperation(null, ByteString.empty()),
       newDeleteOperation(noControls, ByteString.valueOf("o=test")),
       newDeleteOperation(null, ByteString.valueOf("o=test")),
-      newDeleteOperation(noControls, DN.nullDN()),
-      newDeleteOperation(null, DN.nullDN()),
-      newDeleteOperation(noControls, DN.decode("o=test")),
-      newDeleteOperation(null, DN.decode("o=test"))
+      newDeleteOperation(noControls, DN.rootDN()),
+      newDeleteOperation(null, DN.rootDN()),
+      newDeleteOperation(noControls, DN.valueOf("o=test")),
+      newDeleteOperation(null, DN.valueOf("o=test"))
     };
   }
 
@@ -155,7 +155,7 @@
          throws Exception
   {
     DeleteOperation deleteOperation =
-        newDeleteOperation(null, DN.decode("o=test"));
+        newDeleteOperation(null, DN.valueOf("o=test"));
     assertNotNull(deleteOperation.getEntryDN());
   }
 
@@ -175,7 +175,7 @@
          throws Exception
   {
     DeleteOperation deleteOperation =
-        newDeleteOperation(null, DN.decode("o=test"));
+        newDeleteOperation(null, DN.valueOf("o=test"));
     assertNotNull(deleteOperation.getEntryDN());
 
     deleteOperation.setRawEntryDN(ByteString.valueOf("dc=example,dc=com"));
@@ -239,7 +239,7 @@
   {
     InternalClientConnection conn =
         InternalClientConnection.getRootConnection();
-    return conn.processDelete(DN.decode(entryDN));
+    return conn.processDelete(DN.valueOf(entryDN));
   }
 
   private void processAdd(String... entryLines) throws Exception
@@ -623,7 +623,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    Backend backend = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend backend = DirectoryServer.getBackend(DN.valueOf("o=test"));
     backend.setWritabilityMode(WritabilityMode.DISABLED);
 
     DeleteOperation deleteOperation = processDeleteRaw("o=test");
@@ -646,7 +646,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    Backend backend = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend backend = DirectoryServer.getBackend(DN.valueOf("o=test"));
     backend.setWritabilityMode(WritabilityMode.INTERNAL_ONLY);
 
     DeleteOperation deleteOperation = processDeleteRaw("o=test");
@@ -669,7 +669,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    Backend backend = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend backend = DirectoryServer.getBackend(DN.valueOf("o=test"));
     backend.setWritabilityMode(WritabilityMode.INTERNAL_ONLY);
 
     String[] args = getArgs("o=test");
@@ -749,7 +749,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    Lock entryLock = LockManager.lockRead(DN.decode("o=test"));
+    Lock entryLock = LockManager.lockRead(DN.valueOf("o=test"));
 
     try
     {
@@ -758,7 +758,7 @@
     }
     finally
     {
-      LockManager.unlock(DN.decode("o=test"), entryLock);
+      LockManager.unlock(DN.valueOf("o=test"), entryLock);
     }
   }
 
@@ -1054,7 +1054,7 @@
         newDeleteOperation(controls, ByteString.valueOf("o=test"));
     deleteOperation.run();
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
   }
 }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/GroupManagerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/GroupManagerTestCase.java
index d14dd2f..dc7e1cf 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/GroupManagerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/GroupManagerTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -132,14 +132,14 @@
     GroupManager groupManager = DirectoryServer.getGroupManager();
     groupManager.deregisterAllGroups();
     addNestedGroupTestEntries();
-    DN group1DN = DN.decode("cn=group 1,ou=Groups,o=test");
-    DN group2DN = DN.decode("cn=group 2,ou=Groups,o=test");
-    DN group3DN = DN.decode("cn=group 3,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
-    DN user3DN = DN.decode("uid=user.3,ou=People,o=test");
-    DN user4DN = DN.decode("uid=user.4,ou=People,o=test");
-    DN user5DN = DN.decode("uid=user.5,ou=People,o=test");
+    DN group1DN = DN.valueOf("cn=group 1,ou=Groups,o=test");
+    DN group2DN = DN.valueOf("cn=group 2,ou=Groups,o=test");
+    DN group3DN = DN.valueOf("cn=group 3,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
+    DN user3DN = DN.valueOf("uid=user.3,ou=People,o=test");
+    DN user4DN = DN.valueOf("uid=user.4,ou=People,o=test");
+    DN user5DN = DN.valueOf("uid=user.5,ou=People,o=test");
     Entry user1Entry = DirectoryServer.getEntry(user1DN);
     Entry user2Entry = DirectoryServer.getEntry(user2DN);
     Entry user3Entry = DirectoryServer.getEntry(user3DN);
@@ -176,15 +176,15 @@
     GroupManager groupManager = DirectoryServer.getGroupManager();
     groupManager.deregisterAllGroups();
     addNestedGroupTestEntries();
-    DN group1DN = DN.decode("cn=group 1,ou=Groups,o=test");
-    DN group2DN = DN.decode("cn=group 2,ou=Groups,o=test");
-    DN group3DN = DN.decode("cn=group 3,ou=Groups,o=test");
-    DN group4DN = DN.decode("cn=group 4,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
-    DN user3DN = DN.decode("uid=user.3,ou=People,o=test");
-    DN user4DN = DN.decode("uid=user.4,ou=People,o=test");
-    DN user5DN = DN.decode("uid=user.5,ou=People,o=test");
+    DN group1DN = DN.valueOf("cn=group 1,ou=Groups,o=test");
+    DN group2DN = DN.valueOf("cn=group 2,ou=Groups,o=test");
+    DN group3DN = DN.valueOf("cn=group 3,ou=Groups,o=test");
+    DN group4DN = DN.valueOf("cn=group 4,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
+    DN user3DN = DN.valueOf("uid=user.3,ou=People,o=test");
+    DN user4DN = DN.valueOf("uid=user.4,ou=People,o=test");
+    DN user5DN = DN.valueOf("uid=user.5,ou=People,o=test");
     Entry user1Entry = DirectoryServer.getEntry(user1DN);
     Entry user2Entry = DirectoryServer.getEntry(user2DN);
     Entry user3Entry = DirectoryServer.getEntry(user3DN);
@@ -225,15 +225,15 @@
     GroupManager groupManager = DirectoryServer.getGroupManager();
     groupManager.deregisterAllGroups();
     addNestedGroupTestEntries();
-    DN group1DN = DN.decode("cn=group 1,ou=Groups,o=test");
-    DN group2DN = DN.decode("cn=group 2,ou=Groups,o=test");
-    DN group3DN = DN.decode("cn=group 3,ou=Groups,o=test");
-    DN group4DN = DN.decode("cn=group 4,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
-    DN user3DN = DN.decode("uid=user.3,ou=People,o=test");
-    DN user4DN = DN.decode("uid=user.4,ou=People,o=test");
-    DN user5DN = DN.decode("uid=user.5,ou=People,o=test");
+    DN group1DN = DN.valueOf("cn=group 1,ou=Groups,o=test");
+    DN group2DN = DN.valueOf("cn=group 2,ou=Groups,o=test");
+    DN group3DN = DN.valueOf("cn=group 3,ou=Groups,o=test");
+    DN group4DN = DN.valueOf("cn=group 4,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
+    DN user3DN = DN.valueOf("uid=user.3,ou=People,o=test");
+    DN user4DN = DN.valueOf("uid=user.4,ou=People,o=test");
+    DN user5DN = DN.valueOf("uid=user.5,ou=People,o=test");
     Entry user1Entry = DirectoryServer.getEntry(user1DN);
     Entry user2Entry = DirectoryServer.getEntry(user2DN);
     Entry user3Entry = DirectoryServer.getEntry(user3DN);
@@ -318,11 +318,11 @@
     GroupManager groupManager = DirectoryServer.getGroupManager();
     groupManager.deregisterAllGroups();
     addNestedGroupTestEntries();
-    DN group1DN = DN.decode("cn=group 1,ou=Groups,o=test");
-    DN group2DN = DN.decode("cn=group 2,ou=Groups,o=test");
-    DN group3DN = DN.decode("cn=group 3,ou=Groups,o=test");
-    DN group4DN = DN.decode("cn=group 4,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
+    DN group1DN = DN.valueOf("cn=group 1,ou=Groups,o=test");
+    DN group2DN = DN.valueOf("cn=group 2,ou=Groups,o=test");
+    DN group3DN = DN.valueOf("cn=group 3,ou=Groups,o=test");
+    DN group4DN = DN.valueOf("cn=group 4,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
     Entry user1Entry = DirectoryServer.getEntry(user1DN);
     Group<? extends GroupImplementationCfg> group1Instance =
             (Group<? extends GroupImplementationCfg>)
@@ -370,16 +370,16 @@
     GroupManager groupManager = DirectoryServer.getGroupManager();
     groupManager.deregisterAllGroups();
     addNestedGroupTestEntries();
-    DN group1DN = DN.decode("cn=group 1,ou=Groups,o=test");
-    DN group2DN = DN.decode("cn=group 2,ou=Groups,o=test");
-    DN group3DN = DN.decode("cn=group 3,ou=Groups,o=test");
-    DN group4DN = DN.decode("cn=group 4,ou=Groups,o=test");
-    DN bogusGroup = DN.decode("cn=bogus group,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
-    DN user3DN = DN.decode("uid=user.3,ou=People,o=test");
-    DN user4DN = DN.decode("uid=user.4,ou=People,o=test");
-    DN user5DN = DN.decode("uid=user.5,ou=People,o=test");
+    DN group1DN = DN.valueOf("cn=group 1,ou=Groups,o=test");
+    DN group2DN = DN.valueOf("cn=group 2,ou=Groups,o=test");
+    DN group3DN = DN.valueOf("cn=group 3,ou=Groups,o=test");
+    DN group4DN = DN.valueOf("cn=group 4,ou=Groups,o=test");
+    DN bogusGroup = DN.valueOf("cn=bogus group,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
+    DN user3DN = DN.valueOf("uid=user.3,ou=People,o=test");
+    DN user4DN = DN.valueOf("uid=user.4,ou=People,o=test");
+    DN user5DN = DN.valueOf("uid=user.5,ou=People,o=test");
     Entry user1Entry = DirectoryServer.getEntry(user1DN);
     Entry user2Entry = DirectoryServer.getEntry(user2DN);
     Entry user3Entry = DirectoryServer.getEntry(user3DN);
@@ -561,10 +561,10 @@
       "member: uid=user.1,ou=People,o=test",
       "member: uid=user.2,ou=People,o=test");
 
-    DN groupDN = DN.decode("cn=Test Group of Names,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
-    DN user3DN = DN.decode("uid=user.3,ou=People,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of Names,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
+    DN user3DN = DN.valueOf("uid=user.3,ou=People,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -578,7 +578,7 @@
 
     try
     {
-      groupInstance.addNestedGroup(DN.decode("uid=test,ou=People,o=test"));
+      groupInstance.addNestedGroup(DN.valueOf("uid=test,ou=People,o=test"));
     } catch (DirectoryException ex) {
            throw new AssertionError("Expected addNestedGroup to succeed but" +
                                     " it didn't");
@@ -587,7 +587,7 @@
     try
     {
       groupInstance.removeNestedGroup(
-           DN.decode("uid=test,ou=People,o=test"));
+           DN.valueOf("uid=test,ou=People,o=test"));
     } catch (DirectoryException ex) {
             throw new AssertionError("Expected removeNestedGroup to succeed " +
                     "but it didn't");
@@ -692,10 +692,10 @@
 
 
     // Perform a basic set of validation on the group itself.
-    DN groupDN = DN.decode("cn=Test Group of Names,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
-    DN user3DN = DN.decode("uid=user.3,ou=People,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of Names,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
+    DN user3DN = DN.valueOf("uid=user.3,ou=People,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -712,7 +712,7 @@
     }
 
     SearchFilter filter = SearchFilter.createFilterFromString("(uid=user.1)");
-    memberList = groupInstance.getMembers(DN.decode("o=test"),
+    memberList = groupInstance.getMembers(DN.valueOf("o=test"),
                                           SearchScope.WHOLE_SUBTREE, filter);
     assertTrue(memberList.hasMoreMembers());
     DN memberDN = memberList.nextMemberDN();
@@ -720,7 +720,7 @@
     assertFalse(memberList.hasMoreMembers());
 
     filter = SearchFilter.createFilterFromString("(uid=user.3)");
-    memberList = groupInstance.getMembers(DN.decode("o=test"),
+    memberList = groupInstance.getMembers(DN.valueOf("o=test"),
                                           SearchScope.WHOLE_SUBTREE, filter);
     assertFalse(memberList.hasMoreMembers());
 
@@ -791,7 +791,7 @@
 
 
     // Make sure that the group exists but doesn't have any members.
-    DN groupDN = DN.decode("cn=Test Group of Names,ou=Groups,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of Names,ou=Groups,o=test");
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
     assertEquals(groupInstance.getGroupDN(), groupDN);
@@ -886,10 +886,10 @@
 
 
     // Perform a basic set of validation on the group itself.
-    DN groupDN = DN.decode("cn=Test Group of Unique Names,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
-    DN user3DN = DN.decode("uid=user.3,ou=People,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of Unique Names,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
+    DN user3DN = DN.valueOf("uid=user.3,ou=People,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -906,7 +906,7 @@
     }
 
     SearchFilter filter = SearchFilter.createFilterFromString("(uid=user.1)");
-    memberList = groupInstance.getMembers(DN.decode("o=test"),
+    memberList = groupInstance.getMembers(DN.valueOf("o=test"),
                                           SearchScope.WHOLE_SUBTREE, filter);
     assertTrue(memberList.hasMoreMembers());
     DN memberDN = memberList.nextMemberDN();
@@ -914,7 +914,7 @@
     assertFalse(memberList.hasMoreMembers());
 
     filter = SearchFilter.createFilterFromString("(uid=user.3)");
-    memberList = groupInstance.getMembers(DN.decode("o=test"),
+    memberList = groupInstance.getMembers(DN.valueOf("o=test"),
                                           SearchScope.WHOLE_SUBTREE, filter);
     assertFalse(memberList.hasMoreMembers());
 
@@ -985,7 +985,7 @@
 
 
     // Make sure that the group exists but doesn't have any members.
-    DN groupDN = DN.decode("cn=Test Group of Unique Names,ou=Groups,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of Unique Names,ou=Groups,o=test");
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
     assertEquals(groupInstance.getGroupDN(), groupDN);
@@ -1080,10 +1080,10 @@
 
 
     // Perform a basic set of validation on the group itself.
-    DN groupDN = DN.decode("cn=Test Group of Entries,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
-    DN user3DN = DN.decode("uid=user.3,ou=People,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of Entries,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
+    DN user3DN = DN.valueOf("uid=user.3,ou=People,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -1100,7 +1100,7 @@
     }
 
     SearchFilter filter = SearchFilter.createFilterFromString("(uid=user.1)");
-    memberList = groupInstance.getMembers(DN.decode("o=test"),
+    memberList = groupInstance.getMembers(DN.valueOf("o=test"),
                                           SearchScope.WHOLE_SUBTREE, filter);
     assertTrue(memberList.hasMoreMembers());
     DN memberDN = memberList.nextMemberDN();
@@ -1108,7 +1108,7 @@
     assertFalse(memberList.hasMoreMembers());
 
     filter = SearchFilter.createFilterFromString("(uid=user.3)");
-    memberList = groupInstance.getMembers(DN.decode("o=test"),
+    memberList = groupInstance.getMembers(DN.valueOf("o=test"),
                                           SearchScope.WHOLE_SUBTREE, filter);
     assertFalse(memberList.hasMoreMembers());
 
@@ -1179,7 +1179,7 @@
 
 
     // Make sure that the group exists but doesn't have any members.
-    DN groupDN = DN.decode("cn=Test Group of Entries,ou=Groups,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of Entries,ou=Groups,o=test");
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
     assertEquals(groupInstance.getGroupDN(), groupDN);
@@ -1250,8 +1250,8 @@
 
 
     // Perform a basic set of validation on the group itself.
-    DN groupDN = DN.decode("cn=Test Group of Unique Names,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of Unique Names,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -1262,7 +1262,7 @@
     // Rename the group and make sure the old one no longer exists but the new
     // one does.
     RDN newRDN = RDN.decode("cn=Renamed Group");
-    DN  newDN  = DN.decode("cn=Renamed Group,ou=Groups,o=test");
+    DN  newDN  = DN.valueOf("cn=Renamed Group,ou=Groups,o=test");
 
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
@@ -1377,13 +1377,13 @@
 
 
     // Perform basic validation on the groups.
-    DN group1DN = DN.decode("cn=Group 1,ou=Groups,o=test");
-    DN group2DN = DN.decode("cn=Group 2,ou=Groups,o=test");
-    DN group3DN = DN.decode("cn=Group 3,ou=Groups,o=test");
-    DN group4DN = DN.decode("cn=Group 4,ou=Groups,o=test");
-    DN user1DN  = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN  = DN.decode("uid=user.2,ou=People,o=test");
-    DN user3DN  = DN.decode("uid=user.3,ou=People,o=test");
+    DN group1DN = DN.valueOf("cn=Group 1,ou=Groups,o=test");
+    DN group2DN = DN.valueOf("cn=Group 2,ou=Groups,o=test");
+    DN group3DN = DN.valueOf("cn=Group 3,ou=Groups,o=test");
+    DN group4DN = DN.valueOf("cn=Group 4,ou=Groups,o=test");
+    DN user1DN  = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN  = DN.valueOf("uid=user.2,ou=People,o=test");
+    DN user3DN  = DN.valueOf("uid=user.3,ou=People,o=test");
 
     Group group1 = groupManager.getGroupInstance(group1DN);
     Group group2 = groupManager.getGroupInstance(group2DN);
@@ -1413,10 +1413,10 @@
 
     // Get a client connection authenticated as user1 and make sure it handles
     // group operations correctly.
-    InternalClientConnection conn0 = new InternalClientConnection(DN.nullDN());
+    InternalClientConnection conn0 = new InternalClientConnection(DN.rootDN());
     InternalSearchOperation searchOperation =
          new InternalSearchOperation(conn0, InternalClientConnection.nextOperationID(),
-                  InternalClientConnection.nextMessageID(), null, DN.nullDN(),
+                  InternalClientConnection.nextMessageID(), null, DN.rootDN(),
                   SearchScope.BASE_OBJECT,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=*)"), null,
@@ -1442,7 +1442,7 @@
     InternalClientConnection conn1 = new InternalClientConnection(user1DN);
     searchOperation =
          new InternalSearchOperation(conn1, InternalClientConnection.nextOperationID(),
-                  InternalClientConnection.nextMessageID(), null, DN.nullDN(),
+                  InternalClientConnection.nextMessageID(), null, DN.rootDN(),
                   SearchScope.BASE_OBJECT,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0,  false,
                   SearchFilter.createFilterFromString("(objectClass=*)"), null,
@@ -1472,7 +1472,7 @@
     InternalClientConnection conn2 = new InternalClientConnection(user2DN);
     searchOperation =
          new InternalSearchOperation(conn2, InternalClientConnection.nextOperationID(),
-                  InternalClientConnection.nextMessageID(), null, DN.nullDN(),
+                  InternalClientConnection.nextMessageID(), null, DN.rootDN(),
                   SearchScope.BASE_OBJECT,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0,  false,
                   SearchFilter.createFilterFromString("(objectClass=*)"), null,
@@ -1502,7 +1502,7 @@
     InternalClientConnection conn3 = new InternalClientConnection(user3DN);
     searchOperation =
          new InternalSearchOperation(conn3, InternalClientConnection.nextOperationID(),
-                  InternalClientConnection.nextMessageID(), null, DN.nullDN(),
+                  InternalClientConnection.nextMessageID(), null, DN.rootDN(),
                   SearchScope.BASE_OBJECT,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0,  false,
                   SearchFilter.createFilterFromString("(objectClass=*)"), null,
@@ -1619,7 +1619,7 @@
 
 
     // Get the group instance.
-    DN groupDN = DN.decode("cn=Test Group of Unique Names,ou=Groups,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of Unique Names,ou=Groups,o=test");
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
     assertEquals(groupInstance.getGroupDN(), groupDN);
@@ -1641,7 +1641,7 @@
     // Perform a filtered iteration across the member DNs.
     SearchFilter filter =
          SearchFilter.createFilterFromString("(objectClass=*)");
-    memberList = groupInstance.getMembers(DN.decode("o=test"),
+    memberList = groupInstance.getMembers(DN.valueOf("o=test"),
                                           SearchScope.WHOLE_SUBTREE, filter);
     while (memberList.hasMoreMembers())
     {
@@ -1669,7 +1669,7 @@
 
     // Perform a filtered iteration across the member entries.
     filter = SearchFilter.createFilterFromString("(objectClass=*)");
-    memberList = groupInstance.getMembers(DN.decode("o=test"),
+    memberList = groupInstance.getMembers(DN.valueOf("o=test"),
                                           SearchScope.WHOLE_SUBTREE, filter);
     while (memberList.hasMoreMembers())
     {
@@ -1757,11 +1757,11 @@
       "cn: Test Group of URLs",
       "memberURL: ldap:///o=test??sub?(sn<=2)");
 
-    DN groupDN = DN.decode("cn=Test Group of URLs,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
-    DN user3DN = DN.decode("uid=user.3,ou=People,o=test");
-    DN bogusDN = DN.decode("uid=bogus,ou=People,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of URLs,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
+    DN user3DN = DN.valueOf("uid=user.3,ou=People,o=test");
+    DN bogusDN = DN.valueOf("uid=bogus,ou=People,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -1776,7 +1776,7 @@
 
     try
     {
-      groupInstance.addNestedGroup(DN.decode("uid=test,ou=People,o=test"));
+      groupInstance.addNestedGroup(DN.valueOf("uid=test,ou=People,o=test"));
       throw new AssertionError("Expected addNestedGroup to fail but it " +
                                "didn't");
     } catch (UnsupportedOperationException uoe) {}
@@ -1784,7 +1784,7 @@
     try
     {
       groupInstance.removeNestedGroup(
-           DN.decode("uid=test,ou=People,o=test"));
+           DN.valueOf("uid=test,ou=People,o=test"));
       throw new AssertionError("Expected removeNestedGroup to fail but " +
                                "it didn't");
     } catch (UnsupportedOperationException uoe) {}
@@ -1861,7 +1861,7 @@
       "cn: Test Malformed URL",
       "memberURL: ldap:///o=test??sub?(malformed)");
 
-    DN groupDN = DN.decode("cn=Test Malformed URL,ou=Groups,o=test");
+    DN groupDN = DN.valueOf("cn=Test Malformed URL,ou=Groups,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -1943,9 +1943,9 @@
       "cn: Test Group of URLs",
       "memberURL: ldap:///o=test??sub?(sn<=2)");
 
-    DN groupDN = DN.decode("cn=Test Group of URLs,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of URLs,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -2042,9 +2042,9 @@
       "cn: Test Group of URLs",
       "memberURL: ldap:///o=test??sub?(sn<=2)");
 
-    DN groupDN = DN.decode("cn=Test Group of URLs,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of URLs,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -2054,7 +2054,7 @@
     memberSet.add(user1DN);
 
     MemberList memberList = groupInstance.getMembers(
-                                 DN.decode("ou=people,o=test"),
+                                 DN.valueOf("ou=people,o=test"),
                                  SearchScope.SINGLE_LEVEL,
                                  SearchFilter.createFilterFromString("(sn=1)"));
     assertNotNull(memberList);
@@ -2144,9 +2144,9 @@
       "memberURL: ldap:///o=test??sub?(sn=1)",
       "memberURL: ldap:///o=test??sub?(sn=2)");
 
-    DN groupDN = DN.decode("cn=Test Group of URLs,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of URLs,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -2248,9 +2248,9 @@
       "memberURL: ldap:///o=test??sub?(sn=1)",
       "memberURL: ldap:///ou=People,o=test??subordinate?(!(sn=3))");
 
-    DN groupDN = DN.decode("cn=Test Group of URLs,ou=Groups,o=test");
-    DN user1DN = DN.decode("uid=user.1,ou=People,o=test");
-    DN user2DN = DN.decode("uid=user.2,ou=People,o=test");
+    DN groupDN = DN.valueOf("cn=Test Group of URLs,ou=Groups,o=test");
+    DN user1DN = DN.valueOf("uid=user.1,ou=People,o=test");
+    DN user2DN = DN.valueOf("uid=user.2,ou=People,o=test");
 
     Group groupInstance = groupManager.getGroupInstance(groupDN);
     assertNotNull(groupInstance);
@@ -2262,7 +2262,7 @@
     memberSet.add(user2DN);
 
     MemberList memberList =
-         groupInstance.getMembers(DN.nullDN(), SearchScope.WHOLE_SUBTREE,
+         groupInstance.getMembers(DN.rootDN(), SearchScope.WHOLE_SUBTREE,
               SearchFilter.createFilterFromString("(objectClass=*)"));
     assertNotNull(memberList);
     while (memberList.hasMoreMembers())
@@ -2296,22 +2296,22 @@
     addSubtreeGroupTestEntries();
 
     Group group1 = groupManager.getGroupInstance(
-            DN.decode("cn=group1,ou=moregroups,dc=example,dc=com"));
+            DN.valueOf("cn=group1,ou=moregroups,dc=example,dc=com"));
     assertNotNull(group1);
     Group group2 = groupManager.getGroupInstance(
-            DN.decode("cn=group1,ou=groups,dc=example,dc=com"));
+            DN.valueOf("cn=group1,ou=groups,dc=example,dc=com"));
     assertNotNull(group2);
     Group group3 = groupManager.getGroupInstance(
-            DN.decode("cn=group2,ou=groups,dc=example,dc=com"));
+            DN.valueOf("cn=group2,ou=groups,dc=example,dc=com"));
     assertNotNull(group3);
 
     // Get a client connection authenticated as user1 and make sure it handles
     // group operations correctly.
-    DN userDN = DN.decode("uid=test1,ou=people,dc=example,dc=com");
+    DN userDN = DN.valueOf("uid=test1,ou=people,dc=example,dc=com");
     InternalClientConnection conn = new InternalClientConnection(userDN);
     InternalSearchOperation searchOperation =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
-                  InternalClientConnection.nextMessageID(), null, DN.nullDN(),
+                  InternalClientConnection.nextMessageID(), null, DN.rootDN(),
                   SearchScope.BASE_OBJECT,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=*)"), null,
@@ -2337,21 +2337,21 @@
             new InternalClientConnection(userDN);
     searchOperation =
          new InternalSearchOperation(conn1, InternalClientConnection.nextOperationID(),
-                  InternalClientConnection.nextMessageID(), null, DN.nullDN(),
+                  InternalClientConnection.nextMessageID(), null, DN.rootDN(),
                   SearchScope.BASE_OBJECT,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=*)"), null,
                   null);
 
     group1 = groupManager.getGroupInstance(
-            DN.decode("cn=group1,ou=moregroups,dc=example,dc=com"));
+            DN.valueOf("cn=group1,ou=moregroups,dc=example,dc=com"));
     assertNotNull(group1);
     assertTrue(conn1.isMemberOf(group1, null));
     group2 = groupManager.getGroupInstance(
-            DN.decode("cn=group1,ou=groups,dc=example,dc=com"));
+            DN.valueOf("cn=group1,ou=groups,dc=example,dc=com"));
     assertNull(group2);
     group3 = groupManager.getGroupInstance(
-            DN.decode("cn=group2,ou=groups,dc=example,dc=com"));
+            DN.valueOf("cn=group2,ou=groups,dc=example,dc=com"));
     assertNull(group3);
 
     // Cleanup.
@@ -2372,22 +2372,22 @@
     addSubtreeGroupTestEntries();
 
     Group group1 = groupManager.getGroupInstance(
-            DN.decode("cn=group1,ou=moregroups,dc=example,dc=com"));
+            DN.valueOf("cn=group1,ou=moregroups,dc=example,dc=com"));
     assertNotNull(group1);
     Group group2 = groupManager.getGroupInstance(
-            DN.decode("cn=group1,ou=groups,dc=example,dc=com"));
+            DN.valueOf("cn=group1,ou=groups,dc=example,dc=com"));
     assertNotNull(group2);
     Group group3 = groupManager.getGroupInstance(
-            DN.decode("cn=group2,ou=groups,dc=example,dc=com"));
+            DN.valueOf("cn=group2,ou=groups,dc=example,dc=com"));
     assertNotNull(group3);
 
     // Get a client connection authenticated as user1 and make sure it handles
     // group operations correctly.
-    DN userDN = DN.decode("uid=test1,ou=people,dc=example,dc=com");
+    DN userDN = DN.valueOf("uid=test1,ou=people,dc=example,dc=com");
     InternalClientConnection conn = new InternalClientConnection(userDN);
     InternalSearchOperation searchOperation =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
-                  InternalClientConnection.nextMessageID(), null, DN.nullDN(),
+                  InternalClientConnection.nextMessageID(), null, DN.rootDN(),
                   SearchScope.BASE_OBJECT,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=*)"), null,
@@ -2417,28 +2417,28 @@
             new InternalClientConnection(userDN);
     searchOperation =
          new InternalSearchOperation(conn1, InternalClientConnection.nextOperationID(),
-                  InternalClientConnection.nextMessageID(), null, DN.nullDN(),
+                  InternalClientConnection.nextMessageID(), null, DN.rootDN(),
                   SearchScope.BASE_OBJECT,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString("(objectClass=*)"), null,
                   null);
 
     group1 = groupManager.getGroupInstance(
-            DN.decode("cn=group1,ou=moregroups,dc=example,dc=com"));
+            DN.valueOf("cn=group1,ou=moregroups,dc=example,dc=com"));
     assertNotNull(group1);
     assertTrue(conn1.isMemberOf(group1, null));
     group2 = groupManager.getGroupInstance(
-            DN.decode("cn=group1,ou=groups,dc=example,dc=com"));
+            DN.valueOf("cn=group1,ou=groups,dc=example,dc=com"));
     assertNull(group2);
     group3 = groupManager.getGroupInstance(
-            DN.decode("cn=group2,ou=groups,dc=example,dc=com"));
+            DN.valueOf("cn=group2,ou=groups,dc=example,dc=com"));
     assertNull(group3);
     Group newGroup2 = groupManager.getGroupInstance(
-            DN.decode("cn=group1,ou=newgroups,dc=example,dc=com"));
+            DN.valueOf("cn=group1,ou=newgroups,dc=example,dc=com"));
     assertNotNull(newGroup2);
     assertTrue(conn.isMemberOf(newGroup2, null));
     Group newGroup3 = groupManager.getGroupInstance(
-            DN.decode("cn=group2,ou=newgroups,dc=example,dc=com"));
+            DN.valueOf("cn=group2,ou=newgroups,dc=example,dc=com"));
     assertNotNull(newGroup3);
     assertTrue(conn.isMemberOf(newGroup3, null));
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java
index 58e9786..f42e502 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2011 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -74,7 +74,7 @@
     for (Object[] backendBaseDN2 : backendBaseDNs)
     {
       String backendBaseDN = backendBaseDN2[0].toString();
-      Backend b = DirectoryServer.getBackend(DN.decode(backendBaseDN));
+      Backend b = DirectoryServer.getBackend(DN.valueOf(backendBaseDN));
       b.setWritabilityMode(WritabilityMode.ENABLED);
     }
   }
@@ -148,28 +148,28 @@
     mods.add(new Modification(ModificationType.ADD,
         Attributes.create("description", "foo")));
 
-    opList.add(newModifyOperation(null, DN.nullDN(), mods));
-    opList.add(newModifyOperation(noControls, DN.nullDN(), mods));
-    opList.add(newModifyOperation(null, DN.decode("o=test"), mods));
-    opList.add(newModifyOperation(noControls, DN.decode("o=test"), mods));
+    opList.add(newModifyOperation(null, DN.rootDN(), mods));
+    opList.add(newModifyOperation(noControls, DN.rootDN(), mods));
+    opList.add(newModifyOperation(null, DN.valueOf("o=test"), mods));
+    opList.add(newModifyOperation(noControls, DN.valueOf("o=test"), mods));
 
     mods = new ArrayList<Modification>();
     mods.add(new Modification(ModificationType.DELETE,
         Attributes.create("description", "foo")));
 
-    opList.add(newModifyOperation(null, DN.nullDN(), mods));
-    opList.add(newModifyOperation(noControls, DN.nullDN(), mods));
-    opList.add(newModifyOperation(null, DN.decode("o=test"), mods));
-    opList.add(newModifyOperation(noControls, DN.decode("o=test"), mods));
+    opList.add(newModifyOperation(null, DN.rootDN(), mods));
+    opList.add(newModifyOperation(noControls, DN.rootDN(), mods));
+    opList.add(newModifyOperation(null, DN.valueOf("o=test"), mods));
+    opList.add(newModifyOperation(noControls, DN.valueOf("o=test"), mods));
 
     mods = new ArrayList<Modification>();
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create("description", "foo")));
 
-    opList.add(newModifyOperation(null, DN.nullDN(), mods));
-    opList.add(newModifyOperation(noControls, DN.nullDN(), mods));
-    opList.add(newModifyOperation(null, DN.decode("o=test"), mods));
-    opList.add(newModifyOperation(noControls, DN.decode("o=test"), mods));
+    opList.add(newModifyOperation(null, DN.rootDN(), mods));
+    opList.add(newModifyOperation(noControls, DN.rootDN(), mods));
+    opList.add(newModifyOperation(null, DN.valueOf("o=test"), mods));
+    opList.add(newModifyOperation(noControls, DN.valueOf("o=test"), mods));
 
     mods = new ArrayList<Modification>();
     mods.add(new Modification(ModificationType.DELETE,
@@ -177,10 +177,10 @@
     mods.add(new Modification(ModificationType.ADD,
         Attributes.create("description", "bar")));
 
-    opList.add(newModifyOperation(null, DN.nullDN(), mods));
-    opList.add(newModifyOperation(noControls, DN.nullDN(), mods));
-    opList.add(newModifyOperation(null, DN.decode("o=test"), mods));
-    opList.add(newModifyOperation(noControls, DN.decode("o=test"), mods));
+    opList.add(newModifyOperation(null, DN.rootDN(), mods));
+    opList.add(newModifyOperation(noControls, DN.rootDN(), mods));
+    opList.add(newModifyOperation(null, DN.valueOf("o=test"), mods));
+    opList.add(newModifyOperation(noControls, DN.valueOf("o=test"), mods));
 
     mods = new ArrayList<Modification>();
     mods.add(new Modification(ModificationType.REPLACE,
@@ -188,10 +188,10 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create("cn", "bar")));
 
-    opList.add(newModifyOperation(null, DN.nullDN(), mods));
-    opList.add(newModifyOperation(noControls, DN.nullDN(), mods));
-    opList.add(newModifyOperation(null, DN.decode("o=test"), mods));
-    opList.add(newModifyOperation(noControls, DN.decode("o=test"), mods));
+    opList.add(newModifyOperation(null, DN.rootDN(), mods));
+    opList.add(newModifyOperation(noControls, DN.rootDN(), mods));
+    opList.add(newModifyOperation(null, DN.valueOf("o=test"), mods));
+    opList.add(newModifyOperation(noControls, DN.valueOf("o=test"), mods));
 
 
 
@@ -322,7 +322,7 @@
     List<Modification> mods = new ArrayList<Modification>();
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create("description", "foo")));
-    ModifyOperation modifyOperation = newModifyOperation(null, DN.nullDN(), mods);
+    ModifyOperation modifyOperation = newModifyOperation(null, DN.rootDN(), mods);
     assertNotNull(modifyOperation.getEntryDN());
   }
 
@@ -343,7 +343,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create("description", "foo")));
     ModifyOperation modifyOperation =
-        newModifyOperation(null, DN.nullDN(), mods);
+        newModifyOperation(null, DN.rootDN(), mods);
     assertNotNull(modifyOperation.getEntryDN());
 
     modifyOperation.setRawEntryDN(ByteString.valueOf("ou=Users,o=test"));
@@ -445,7 +445,7 @@
   public void testGetAndAddModifications()
          throws Exception
   {
-    Entry e = DirectoryServer.getEntry(DN.decode("o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("o=test"));
     assertNull(e.getAttribute(DirectoryServer.getAttributeType("description", true)));
 
     UpdatePreOpPlugin.reset();
@@ -462,11 +462,11 @@
         Attributes.create("l", "Austin")));
 
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode("o=test"), mods);
+         conn.processModify(DN.valueOf("o=test"), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveSuccessfulOperationElements(modifyOperation);
 
-    e = DirectoryServer.getEntry(DN.decode("o=test"));
+    e = DirectoryServer.getEntry(DN.valueOf("o=test"));
     assertNotNull(e.getAttribute(DirectoryServer.getAttributeType("description", true)));
 
     UpdatePreOpPlugin.reset();
@@ -566,7 +566,7 @@
   public void testSuccessAddAttribute()
          throws Exception
   {
-    Entry e = DirectoryServer.getEntry(DN.decode("o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("o=test"));
     assertNull(e.getAttribute(DirectoryServer.getAttributeType("description", true)));
 
     LDAPAttribute attr = newLDAPAttribute("description", "foo");
@@ -574,7 +574,7 @@
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveSuccessfulOperationElements(modifyOperation);
 
-    e = DirectoryServer.getEntry(DN.decode("o=test"));
+    e = DirectoryServer.getEntry(DN.valueOf("o=test"));
     assertNotNull(e.getAttribute(DirectoryServer.getAttributeType("description", true)));
   }
 
@@ -590,7 +590,7 @@
   public void testSuccessAddAttributeValue()
          throws Exception
   {
-    Entry e = DirectoryServer.getEntry(DN.decode("o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("o=test"));
 
     List<Attribute> attrList =
          e.getAttribute(DirectoryServer.getAttributeType("o", true));
@@ -601,7 +601,7 @@
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveSuccessfulOperationElements(modifyOperation);
 
-    e = DirectoryServer.getEntry(DN.decode("o=test"));
+    e = DirectoryServer.getEntry(DN.valueOf("o=test"));
     attrList = e.getAttribute(DirectoryServer.getAttributeType("o", true));
     assertEquals(countValues(attrList), 2);
   }
@@ -618,7 +618,7 @@
   public void testSuccessAddAttributeWithOptions(String baseDN)
          throws Exception
   {
-    Entry e = DirectoryServer.getEntry(DN.decode(baseDN));
+    Entry e = DirectoryServer.getEntry(DN.valueOf(baseDN));
 
     List<Attribute> attrList =
          e.getAttribute(DirectoryServer.getAttributeType("o", true));
@@ -629,7 +629,7 @@
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveSuccessfulOperationElements(modifyOperation);
 
-    e = DirectoryServer.getEntry(DN.decode(baseDN));
+    e = DirectoryServer.getEntry(DN.valueOf(baseDN));
     attrList = e.getAttribute(DirectoryServer.getAttributeType("o", true));
     assertEquals(countValues(attrList), 2);
   }
@@ -1950,7 +1950,7 @@
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveSuccessfulOperationElements(modifyOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("uid=test.user," + baseDN));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("uid=test.user," + baseDN));
     List<Attribute> attrList =
          e.getAttribute(DirectoryServer.getAttributeType("employeenumber", true));
     assertNotNull(attrList);
@@ -1989,7 +1989,7 @@
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveSuccessfulOperationElements(modifyOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("uid=test.user," + baseDN));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("uid=test.user," + baseDN));
     List<Attribute> attrList =
          e.getAttribute(DirectoryServer.getAttributeType("employeenumber", true));
     assertNotNull(attrList);
@@ -2028,7 +2028,7 @@
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveSuccessfulOperationElements(modifyOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("uid=test.user," + baseDN));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("uid=test.user," + baseDN));
     List<Attribute> attrList =
          e.getAttribute(DirectoryServer.getAttributeType("employeenumber", true));
     assertNotNull(attrList);
@@ -2273,7 +2273,7 @@
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveSuccessfulOperationElements(modifyOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("uid=test.user," + baseDN));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("uid=test.user," + baseDN));
     assertFalse(e.hasObjectClass(
          DirectoryServer.getObjectClass("extensibleobject", true)));
   }
@@ -2310,7 +2310,7 @@
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveSuccessfulOperationElements(modifyOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("uid=test.user," + baseDN));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("uid=test.user," + baseDN));
     assertTrue(e.hasObjectClass(DirectoryServer.getObjectClass("extensibleobject", true)));
     assertTrue(e.hasObjectClass(DirectoryServer.getObjectClass("inetOrgPerson", true)));
     assertTrue(e.hasObjectClass(DirectoryServer.getObjectClass("organizationalPerson", true)));
@@ -2617,7 +2617,7 @@
          "mail: foo",
          "employeeNumber: 1");
 
-    Backend b = DirectoryServer.getBackend(DN.decode(baseDN));
+    Backend b = DirectoryServer.getBackend(DN.valueOf(baseDN));
     b.setWritabilityMode(WritabilityMode.DISABLED);
 
     LDAPAttribute attr = newLDAPAttribute("objectClass", "extensibleObject");
@@ -2655,7 +2655,7 @@
          "mail: foo",
          "employeeNumber: 1");
 
-    Backend b = DirectoryServer.getBackend(DN.decode(baseDN));
+    Backend b = DirectoryServer.getBackend(DN.valueOf(baseDN));
     b.setWritabilityMode(WritabilityMode.INTERNAL_ONLY);
 
     LDAPAttribute attr = newLDAPAttribute("objectClass", "extensibleObject");
@@ -2693,7 +2693,7 @@
          "mail: foo",
          "employeeNumber: 1");
 
-    Backend b = DirectoryServer.getBackend(DN.decode(baseDN));
+    Backend b = DirectoryServer.getBackend(DN.valueOf(baseDN));
     b.setWritabilityMode(WritabilityMode.INTERNAL_ONLY);
 
 
@@ -2854,7 +2854,7 @@
   public void testCannotLockEntry(String baseDN)
          throws Exception
   {
-    Lock entryLock = LockManager.lockRead(DN.decode(baseDN));
+    Lock entryLock = LockManager.lockRead(DN.valueOf(baseDN));
 
     try
     {
@@ -2864,7 +2864,7 @@
     }
     finally
     {
-      LockManager.unlock(DN.decode(baseDN), entryLock);
+      LockManager.unlock(DN.valueOf(baseDN), entryLock);
     }
   }
 
@@ -3258,8 +3258,8 @@
         newModifyOperation(controls, ByteString.valueOf("o=test"), mods);
     modifyOperation.run();
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
-    assertFalse(DirectoryServer.getEntry(DN.decode("o=test")).hasAttribute(
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
+    assertFalse(DirectoryServer.getEntry(DN.valueOf("o=test")).hasAttribute(
                      DirectoryServer.getAttributeType("description", true)));
   }
 
@@ -3502,7 +3502,7 @@
          "userPassword: password");
 
     Entry e = DirectoryServer.getEntry(
-            DN.decode("uid=testPassword03.user," + baseDN));
+            DN.valueOf("uid=testPassword03.user," + baseDN));
     List<Attribute> attrList =
          e.getAttribute(DirectoryServer.getAttributeType("userpassword", true));
     assertNotNull(attrList);
@@ -3571,7 +3571,7 @@
     ), 0);
     // @formatter:on
 
-    e = DirectoryServer.getEntry(DN.decode("cn=Test User,o=test"));
+    e = DirectoryServer.getEntry(DN.valueOf("cn=Test User,o=test"));
     List<Attribute> attrList = e.getAttribute("userpassword");
     assertNotNull(attrList);
     assertEquals(attrList.size(), 1);
@@ -3613,7 +3613,7 @@
     ), 0);
     // @formatter:on
 
-    e = DirectoryServer.getEntry(DN.decode("cn=Test User,o=test"));
+    e = DirectoryServer.getEntry(DN.valueOf("cn=Test User,o=test"));
     List<Attribute> attrList = e.getAttribute("userpassword");
     assertNotNull(attrList);
     assertEquals(attrList.size(), 1);
@@ -3651,7 +3651,7 @@
     ), 19);
     // @formatter:on
 
-    Entry e = DirectoryServer.getEntry(DN.decode("cn=Test User,o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("cn=Test User,o=test"));
     List<Attribute> attrList = e.getAttribute("userpassword");
     assertNotNull(attrList);
     assertEquals(attrList.size(), 1);
@@ -3689,7 +3689,7 @@
     ), 19);
     // @formatter:on
 
-    Entry e = DirectoryServer.getEntry(DN.decode("cn=Test User,o=test"));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("cn=Test User,o=test"));
     List<Attribute> attrList = e.getAttribute("userpassword");
     assertNotNull(attrList);
     assertEquals(attrList.size(), 1);
@@ -3747,7 +3747,7 @@
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     retrieveSuccessfulOperationElements(modifyOperation);
 
-    Entry e = DirectoryServer.getEntry(DN.decode("uid=test.user," + baseDN));
+    Entry e = DirectoryServer.getEntry(DN.valueOf("uid=test.user," + baseDN));
     List<Attribute> attrList =
          e.getAttribute(DirectoryServer.getAttributeType("usercertificate", true));
     assertNotNull(attrList);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/PasswordPolicyTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/PasswordPolicyTestCase.java
index 08ef0c1..994a8e7 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/PasswordPolicyTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/PasswordPolicyTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -2171,7 +2171,7 @@
   public void testInvalidConstructor(Entry e)
          throws Exception
   {
-    DN parentDN = DN.decode("cn=Password Policies,cn=config");
+    DN parentDN = DN.valueOf("cn=Password Policies,cn=config");
     ConfigEntry parentEntry = DirectoryServer.getConfigEntry(parentDN);
     ConfigEntry configEntry = new ConfigEntry(e, parentEntry);
 
@@ -2208,7 +2208,7 @@
   public void testGetPasswordAttributeAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     AttributeType  t = p.getPasswordAttribute();
@@ -2240,7 +2240,7 @@
   public void testUsesAuthPasswordSyntaxAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertTrue(p.isAuthPasswordSyntax());
@@ -2292,7 +2292,7 @@
   public void testGetDefaultStorageSchemesAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     List<PasswordStorageScheme<?>> defaultSchemes =
@@ -2359,7 +2359,7 @@
   public void testIsDefaultStorageSchemeAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertTrue(p.isDefaultPasswordStorageScheme("SHA1"));
@@ -2426,7 +2426,7 @@
   public void testGetDeprecatedStorageSchemesAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     Set<String> deprecatedSchemes =
@@ -2491,7 +2491,7 @@
   public void testIsDeprecatedStorageSchemeAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isDeprecatedPasswordStorageScheme("MD5"));
@@ -2553,7 +2553,7 @@
   public void testGetPasswordValidatorsAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertNotNull(p.getPasswordValidators());
@@ -2617,7 +2617,7 @@
   public void testGetAccountStatusNotificationHandlersAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertNotNull(p.getAccountStatusNotificationHandlers());
@@ -2679,7 +2679,7 @@
   public void testAllowUserPasswordChangesAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertTrue(p.isAllowUserPasswordChanges());
@@ -2739,7 +2739,7 @@
   public void testRequireCurrentPasswordAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isPasswordChangeRequiresCurrentPassword());
@@ -2799,7 +2799,7 @@
   public void testForceChangeOnAddAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isPasswordChangeRequiresCurrentPassword());
@@ -2859,7 +2859,7 @@
   public void testForceChangeOnResetAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isPasswordChangeRequiresCurrentPassword());
@@ -2919,7 +2919,7 @@
   public void testSkipValidationForAdministratorsAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isSkipValidationForAdministrators());
@@ -2979,7 +2979,7 @@
   public void testGetPasswordGeneratorDNAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertNotNull(p.getPasswordGenerator());
@@ -3039,7 +3039,7 @@
   public void testGetPasswordGeneratorAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertNotNull(p.getPasswordGenerator());
@@ -3099,7 +3099,7 @@
   public void testRequireSecureAuthenticationAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isRequireSecureAuthentication());
@@ -3159,7 +3159,7 @@
   public void testRequireSecurePasswordChangesAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isRequireSecurePasswordChanges());
@@ -3219,7 +3219,7 @@
   public void testAllowMultiplePasswordValuesAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isAllowMultiplePasswordValues());
@@ -3279,7 +3279,7 @@
   public void testAllowPreEncodedPasswordsAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isAllowPreEncodedPasswords());
@@ -3339,7 +3339,7 @@
   public void testGetMinimumPasswordAgeAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertEquals(p.getMinPasswordAge(), 0);
@@ -3399,7 +3399,7 @@
   public void testGetMaximumPasswordAgeAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertEquals(p.getMaxPasswordAge(), 0);
@@ -3459,7 +3459,7 @@
   public void testGetMaximumPasswordResetAgeAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertEquals(p.getMaxPasswordResetAge(), 0);
@@ -3519,7 +3519,7 @@
   public void testGetWarningIntervalAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertEquals(p.getPasswordExpirationWarningInterval(), (5*60*60*24));
@@ -3579,7 +3579,7 @@
   public void testExpirePasswordsWithoutWarningAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isExpirePasswordsWithoutWarning());
@@ -3639,7 +3639,7 @@
   public void testAllowExpiredPasswordChangesAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertFalse(p.isAllowExpiredPasswordChanges());
@@ -3699,7 +3699,7 @@
   public void testGetGraceLoginCountAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertEquals(p.getGraceLoginCount(), 0);
@@ -3759,7 +3759,7 @@
   public void testGetLockoutFailureCountAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertEquals(p.getLockoutFailureCount(), 0);
@@ -3819,7 +3819,7 @@
   public void testGetLockoutDurationAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertEquals(p.getLockoutDuration(), 0);
@@ -3879,7 +3879,7 @@
   public void testGetLockoutFailureExpirationIntervalAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertEquals(p.getLockoutFailureExpirationInterval(), 0);
@@ -3939,7 +3939,7 @@
   public void testGetRequireChangeByTimeAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertEquals(p.getRequireChangeByTime(), 0);
@@ -3999,7 +3999,7 @@
   public void testGetLastLoginTimeAttributeAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertNull(p.getLastLoginTimeAttribute());
@@ -4059,7 +4059,7 @@
   public void testGetLastLoginTimeFormatAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertNull(p.getLastLoginTimeFormat());
@@ -4121,7 +4121,7 @@
   public void testGetPreviousLastLoginTimeFormatsAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertNotNull(p.getPreviousLastLoginTimeFormats());
@@ -4183,7 +4183,7 @@
   public void testGetIdleLockoutIntervalAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertEquals(p.getIdleLockoutInterval(), 0);
@@ -4686,7 +4686,7 @@
   public void testToStringAuth()
          throws Exception
   {
-    DN dn = DN.decode("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
+    DN dn = DN.valueOf("cn=SHA1 AuthPassword Policy,cn=Password Policies," +
                       "cn=config");
     PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
     assertNotNull(p.toString());
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/PluginConfigManagerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/PluginConfigManagerTestCase.java
index c691139..89a81a1 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/PluginConfigManagerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/PluginConfigManagerTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -598,11 +599,11 @@
     String pluginBase = ",cn=Plugins,cn=config";
 
     ArrayList<DN> dnList = new ArrayList<DN>();
-    dnList.add(DN.decode("cn=" + PLUGIN_NAME_DELAY + pluginBase));
-    dnList.add(DN.decode("cn=" + PLUGIN_NAME_DISCONNECT + pluginBase));
-    dnList.add(DN.decode("cn=" + PLUGIN_NAME_INVOCATION_COUNTER + pluginBase));
-    dnList.add(DN.decode("cn=" + PLUGIN_NAME_SHORT_CIRCUIT + pluginBase));
-    dnList.add(DN.decode("cn=" + PLUGIN_NAME_UPDATE + pluginBase));
+    dnList.add(DN.valueOf("cn=" + PLUGIN_NAME_DELAY + pluginBase));
+    dnList.add(DN.valueOf("cn=" + PLUGIN_NAME_DISCONNECT + pluginBase));
+    dnList.add(DN.valueOf("cn=" + PLUGIN_NAME_INVOCATION_COUNTER + pluginBase));
+    dnList.add(DN.valueOf("cn=" + PLUGIN_NAME_SHORT_CIRCUIT + pluginBase));
+    dnList.add(DN.valueOf("cn=" + PLUGIN_NAME_UPDATE + pluginBase));
 
     ArrayList<DirectoryServerPlugin> pluginList =
          new ArrayList<DirectoryServerPlugin>(dnList.size());
@@ -640,7 +641,7 @@
 
       DN dn = pluginArray[i].getPluginEntryDN();
       String name =
-           dn.getRDN().getAttributeValue(0).getValue().toString().toLowerCase();
+           dn.rdn().getAttributeValue(0).getValue().toString().toLowerCase();
       actualOrder.append(name);
 
       if (! name.equals(expectedNameOrder[i]))
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/RejectUnauthReqTests.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/RejectUnauthReqTests.java
index e6101e1..2acfb1c 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/RejectUnauthReqTests.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/RejectUnauthReqTests.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -397,7 +398,7 @@
 
     InternalClientConnection conn = new InternalClientConnection(
         new AuthenticationInfo());
-    BindOperation bindOperation = conn.processSimpleBind(DN.nullDN(), null);
+    BindOperation bindOperation = conn.processSimpleBind(DN.rootDN(), null);
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -628,7 +629,7 @@
       ByteString user = ByteString.valueOf("cn=Directory Manager");
       ByteString password = ByteString.valueOf("password");
       // Unauthenticated BIND request.
-      BindOperation bindOperation = conn.processSimpleBind(DN.nullDN(), null);
+      BindOperation bindOperation = conn.processSimpleBind(DN.rootDN(), null);
       assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
       // Authenticated BIND request.
       bindOperation = conn.processSimpleBind(user, password);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SearchOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SearchOperationTestCase.java
index 88b16d3..07aee21 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SearchOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SearchOperationTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -70,7 +70,7 @@
          InternalClientConnection.getRootConnection();
 
     // Add the suffix entry.
-    DN suffixDN = DN.decode(SUFFIX);
+    DN suffixDN = DN.valueOf(SUFFIX);
     if (DirectoryServer.getEntry(suffixDN) == null)
     {
       Entry suffixEntry = StaticUtils.createEntry(suffixDN);
@@ -84,7 +84,7 @@
     }
 
     // Add a search base entry.
-    DN baseDN = DN.decode(BASE);
+    DN baseDN = DN.valueOf(BASE);
     if (DirectoryServer.getEntry(baseDN) == null)
     {
       Entry baseEntry = StaticUtils.createEntry(baseDN);
@@ -1233,7 +1233,7 @@
             "subschemasubentry", "entrydn", "ismemberof");
 
     String userDNString = "uid=test.user,o=test";
-    DN userDN = DN.decode(userDNString);
+    DN userDN = DN.valueOf(userDNString);
 
     TestCaseUtils.addEntry("dn: " + userDNString,
         "objectClass: top",
@@ -1462,7 +1462,7 @@
     TestCaseUtils.initializeTestBackend(true);
 
     String userDNString = "uid=test.user,o=test";
-    DN userDN = DN.decode(userDNString);
+    DN userDN = DN.valueOf(userDNString);
 
     TestCaseUtils.addEntry("dn: " + userDNString,
         "objectClass: top",
@@ -1534,7 +1534,7 @@
     TestCaseUtils.initializeTestBackend(true);
 
     String userDNString = "uid=test.user,o=test";
-    DN userDN = DN.decode(userDNString);
+    DN userDN = DN.valueOf(userDNString);
 
     TestCaseUtils.addEntry("dn: " + userDNString,
         "objectClass: top",
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java
index af11d21..6863918 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.server.core;
@@ -120,12 +120,12 @@
     assertEquals(subentryList.size(), 1);
     assertEquals(subentryList.get(0).getEntry(), collectiveSubentry);
     subentryList.clear();
-    subentryList = manager.getSubentries(legacyLdapSubentry.getDN().getParent());
+    subentryList = manager.getSubentries(legacyLdapSubentry.getDN().parent());
     assertNotNull(subentryList);
     assertEquals(subentryList.size(), 1);
     assertEquals(subentryList.get(0).getEntry(), legacyLdapSubentry);
     subentryList.clear();
-    subentryList = manager.getSubentries(legacyLdapSubentry.getDN().getParent().getParent());
+    subentryList = manager.getSubentries(legacyLdapSubentry.getDN().parent().parent());
     assertNotNull(subentryList);
     assertEquals(subentryList.size(), 0);
   }
@@ -223,7 +223,7 @@
     {
       // Normal user will not inherit the collective description attribute.
       Entry e = DirectoryServer.getEntry(DN
-          .decode("uid=normal user,ou=people,o=test"));
+          .valueOf("uid=normal user,ou=people,o=test"));
       assertNotNull(e);
 
       List<Attribute> description = e.getAttribute("description");
@@ -231,7 +231,7 @@
 
       // Collective user will inherit the collective description attribute.
       e = DirectoryServer.getEntry(DN
-          .decode("uid=collective user,ou=people,o=test"));
+          .valueOf("uid=collective user,ou=people,o=test"));
       assertNotNull(e);
 
       description = e.getAttribute("description");
@@ -246,8 +246,8 @@
     finally
     {
       // Clear sub-entry and groups from test backend.
-      TestCaseUtils.deleteEntry(DN.decode("cn=description collective attribute,ou=people,o=test"));
-      TestCaseUtils.deleteEntry(DN.decode("cn=collective users,ou=people,o=test"));
+      TestCaseUtils.deleteEntry(DN.valueOf("cn=description collective attribute,ou=people,o=test"));
+      TestCaseUtils.deleteEntry(DN.valueOf("cn=collective users,ou=people,o=test"));
     }
   }
 
@@ -547,10 +547,10 @@
     assertEquals(LDAPDelete.mainDelete(args, false, null, System.err), 0);
 
     assertTrue(DirectoryServer.getSubentryManager().getCollectiveSubentries(
-            DN.decode("uid=rogasawara," + BASE)).isEmpty());
+            DN.valueOf("uid=rogasawara," + BASE)).isEmpty());
 
     assertTrue(DirectoryServer.getSubentryManager().getSubentries(
-            DN.decode("uid=rogasawara," + BASE)).isEmpty());
+            DN.valueOf("uid=rogasawara," + BASE)).isEmpty());
 
     // Re-add entries.
     addTestEntries();
@@ -579,14 +579,14 @@
     };
     assertEquals(LDAPModify.mainModify(newArgs, false, null, System.err), 0);
 
-    assertNotNull(DirectoryServer.getEntry(DN.decode(
+    assertNotNull(DirectoryServer.getEntry(DN.valueOf(
             "uid=rogasawara," + NEWBASE + "," + SUFFIX)));
     assertTrue(DirectoryServer.getSubentryManager().getCollectiveSubentries(
-          DN.decode("uid=rogasawara," + NEWBASE + "," + SUFFIX)).isEmpty());
+          DN.valueOf("uid=rogasawara," + NEWBASE + "," + SUFFIX)).isEmpty());
 
     // The legacyLdapSubentry should still apply.
     assertEquals(DirectoryServer.getSubentryManager().getSubentries(
-          DN.decode("uid=rogasawara," + NEWBASE + "," + SUFFIX)).size(), 1);
+          DN.valueOf("uid=rogasawara," + NEWBASE + "," + SUFFIX)).size(), 1);
 
     // Move it back.
     String oldPath = TestCaseUtils.createTempFile(
@@ -605,12 +605,12 @@
     };
     assertEquals(LDAPModify.mainModify(oldArgs, false, null, System.err), 0);
 
-    assertNotNull(DirectoryServer.getEntry(DN.decode(
+    assertNotNull(DirectoryServer.getEntry(DN.valueOf(
             "uid=rogasawara," + OLDBASE + "," + SUFFIX)));
     assertFalse(DirectoryServer.getSubentryManager().getCollectiveSubentries(
-          DN.decode("uid=rogasawara," + OLDBASE + "," + SUFFIX)).isEmpty());
+          DN.valueOf("uid=rogasawara," + OLDBASE + "," + SUFFIX)).isEmpty());
     assertFalse(DirectoryServer.getSubentryManager().getSubentries(
-          DN.decode("uid=rogasawara," + OLDBASE + "," + SUFFIX)).isEmpty());
+          DN.valueOf("uid=rogasawara," + OLDBASE + "," + SUFFIX)).isEmpty());
   }
 
   @Test
@@ -671,7 +671,7 @@
          InternalClientConnection.getRootConnection();
 
     // Add suffix entry.
-    DN suffixDN = DN.decode(SUFFIX);
+    DN suffixDN = DN.valueOf(SUFFIX);
     if (DirectoryServer.getEntry(suffixDN) == null)
     {
       Entry suffixEntry = StaticUtils.createEntry(suffixDN);
@@ -685,7 +685,7 @@
     }
 
     // Add base entry.
-    DN baseDN = DN.decode(BASE);
+    DN baseDN = DN.valueOf(BASE);
     if (DirectoryServer.getEntry(baseDN) == null)
     {
       Entry baseEntry = StaticUtils.createEntry(baseDN);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryPasswordPolicyTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryPasswordPolicyTestCase.java
index a5c9cbb..1a83dbc 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryPasswordPolicyTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryPasswordPolicyTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.core;
 
@@ -67,7 +67,7 @@
          InternalClientConnection.getRootConnection();
 
     // Add suffix entry.
-    DN suffixDN = DN.decode(SUFFIX);
+    DN suffixDN = DN.valueOf(SUFFIX);
     if (DirectoryServer.getEntry(suffixDN) == null)
     {
       Entry suffixEntry = StaticUtils.createEntry(suffixDN);
@@ -81,7 +81,7 @@
     }
 
     // Add base entry.
-    DN baseDN = DN.decode(BASE);
+    DN baseDN = DN.valueOf(BASE);
     if (DirectoryServer.getEntry(baseDN) == null)
     {
       Entry baseEntry = StaticUtils.createEntry(baseDN);
@@ -277,7 +277,7 @@
     assertNotNull(DirectoryServer.getEntry(policyEntry.getDN()));
 
     PasswordPolicy policy = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(
-            DN.decode("cn=Temp Policy," + SUFFIX));
+            DN.valueOf("cn=Temp Policy," + SUFFIX));
     assertNotNull(policy);
 
     // Check all pwp attributes for correct values.
@@ -300,7 +300,7 @@
     // Make sure this policy applies to the test entry
     // its supposed to target and that its the same
     // policy object as previously tested.
-    Entry testEntry = DirectoryServer.getEntry(DN.decode(
+    Entry testEntry = DirectoryServer.getEntry(DN.valueOf(
             "uid=rogasawara," + BASE));
     assertNotNull(testEntry);
 
@@ -332,7 +332,7 @@
             DirectoryServer.getDefaultPasswordPolicy();
     assertNotNull(defaultPolicy);
 
-    Entry testEntry = DirectoryServer.getEntry(DN.decode(
+    Entry testEntry = DirectoryServer.getEntry(DN.valueOf(
             "uid=rogasawara," + BASE));
     assertNotNull(testEntry);
 
@@ -374,7 +374,7 @@
     assertNotNull(DirectoryServer.getEntry(policyEntry.getDN()));
 
     // Make sure just added policy is in effect.
-    testEntry = DirectoryServer.getEntry(DN.decode(
+    testEntry = DirectoryServer.getEntry(DN.valueOf(
             "uid=rogasawara," + BASE));
     assertNotNull(testEntry);
 
@@ -387,7 +387,7 @@
     // default policy is in effect again.
     TestCaseUtils.deleteEntry(policyEntry.getDN());
 
-    testEntry = DirectoryServer.getEntry(DN.decode(
+    testEntry = DirectoryServer.getEntry(DN.valueOf(
             "uid=rogasawara," + BASE));
     assertNotNull(testEntry);
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/TestModifyDNOperation.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/TestModifyDNOperation.java
index 0205e1c..423e067 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/TestModifyDNOperation.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/TestModifyDNOperation.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  *      Portions copyright 2013 Manuel Gaupp
  */
 package org.opends.server.core;
@@ -159,7 +159,7 @@
          "ds-privilege-name: proxied-auth");
 
     proxyUserConn =
-         new InternalClientConnection(DN.decode("uid=proxy.user,o=test"));
+         new InternalClientConnection(DN.valueOf("uid=proxy.user,o=test"));
   }
 
 
@@ -265,9 +265,9 @@
       newModifyDNOperation( ByteString.valueOf("cn=test,ou=test"),
                             ByteString.valueOf("cn=test2"), true,
                             ByteString.valueOf("dc=example,dc=com")),
-      newModifyDNOperation( DN.decode("cn=test,ou=test"),
+      newModifyDNOperation( DN.valueOf("cn=test,ou=test"),
                             RDN.decode("cn=test2"), true,
-                            DN.decode("dc=example,dc=com"))
+                            DN.valueOf("dc=example,dc=com"))
     };
   }
 
@@ -297,10 +297,10 @@
   {
     assertEquals(modifyDNOperation.getResultCode(), ResultCode.SUCCESS);
     assertEquals(modifyDNOperation.getErrorMessage().length(), 0);
-    final Entry newEntry = DirectoryServer.getEntry(DN.decode(entryDN));
+    final Entry newEntry = DirectoryServer.getEntry(DN.valueOf(entryDN));
     assertNotNull(newEntry);
 
-    final RDN rdn = newEntry.getDN().getRDN();
+    final RDN rdn = newEntry.getDN().rdn();
     for (int i = 0; i < rdn.getNumValues(); i++)
     {
       AttributeType attribute = rdn.getAttributeType(i);
@@ -341,7 +341,7 @@
   {
     InvocationCounterPlugin.resetAllCounters();
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), false,
                                null);
     modifyDNOperation.run();
@@ -352,7 +352,7 @@
 
     InvocationCounterPlugin.resetAllCounters();
     modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.test0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.test0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.0"), true,
                                null);
     modifyDNOperation.run();
@@ -371,7 +371,7 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=USER.0"), true,
                                null);
 
@@ -379,7 +379,7 @@
     assertEquals(modifyDNOperation.getResultCode(),
                  ResultCode.SUCCESS);
     assertEquals(modifyDNOperation.getErrorMessage().length(), 0);
-    Entry newEntry = DirectoryServer.getEntry(DN.decode(
+    Entry newEntry = DirectoryServer.getEntry(DN.valueOf(
         "uid=user.0,ou=People,dc=example,dc=com"));
     assertNotNull(newEntry);
 
@@ -394,14 +394,14 @@
 
     // Because deleteOldRDN is true, the values from RDN and the entry have to be identical
     ByteString valueFromEntry = attrList.get(0).iterator().next().getValue();
-    ByteString valueFromRDN = newEntry.getDN().getRDN().getAttributeValue(at).getValue();
+    ByteString valueFromRDN = newEntry.getDN().rdn().getAttributeValue(at).getValue();
     assertEquals(valueFromEntry,valueFromRDN);
 
     examineCompletedOperation(modifyDNOperation);
     InvocationCounterPlugin.resetAllCounters();
 
     modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=USER.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=USER.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.0"), true,
                                null);
 
@@ -409,7 +409,7 @@
     assertEquals(modifyDNOperation.getResultCode(),
                  ResultCode.SUCCESS);
     assertEquals(modifyDNOperation.getErrorMessage().length(), 0);
-    newEntry = DirectoryServer.getEntry(DN.decode(
+    newEntry = DirectoryServer.getEntry(DN.valueOf(
         "uid=user.0,ou=People,dc=example,dc=com"));
     assertNotNull(newEntry);
 
@@ -436,7 +436,7 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=userid.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=userid.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=UserID.0+cn=Test"), false,
                                null);
 
@@ -444,7 +444,7 @@
     assertEquals(modifyDNOperation.getResultCode(),
                  ResultCode.SUCCESS);
     assertEquals(modifyDNOperation.getErrorMessage().length(), 0);
-    Entry newEntry = DirectoryServer.getEntry(DN.decode(
+    Entry newEntry = DirectoryServer.getEntry(DN.valueOf(
         "uid=userid.0+cn=test,ou=People,dc=example,dc=com"));
     assertNotNull(newEntry);
 
@@ -459,11 +459,11 @@
 
     // Even though the value of the RDN changed, the representation of the entry's value should be preserved
     ByteString valueFromEntry = attrList.get(0).iterator().next().getValue();
-    ByteString valueFromRDN = newEntry.getDN().getRDN().getAttributeValue(at).getValue();
+    ByteString valueFromRDN = newEntry.getDN().rdn().getAttributeValue(at).getValue();
     assertEquals(valueFromEntry,ByteString.valueOf("userid.0"));
 
     examineCompletedOperation(modifyDNOperation);
-    TestCaseUtils.deleteEntry(DN.decode("uid=UserID.0+cn=Test,ou=People,dc=example,dc=com"));
+    TestCaseUtils.deleteEntry(DN.valueOf("uid=UserID.0+cn=Test,ou=People,dc=example,dc=com"));
   }
 
   /**
@@ -486,7 +486,7 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=userid.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=userid.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=userid.0+sn=JENSEN"), false,
                                null);
 
@@ -494,7 +494,7 @@
     assertEquals(modifyDNOperation.getResultCode(),
                  ResultCode.SUCCESS);
     assertEquals(modifyDNOperation.getErrorMessage().length(), 0);
-    Entry newEntry = DirectoryServer.getEntry(DN.decode(
+    Entry newEntry = DirectoryServer.getEntry(DN.valueOf(
         "uid=userid.0+sn=jensen,ou=People,dc=example,dc=com"));
     assertNotNull(newEntry);
 
@@ -510,11 +510,11 @@
     // Even though the representation of the sn value differs in the RDN,
     // the representation of the entry's value should be preserved
     ByteString valueFromEntry = attrList.get(0).iterator().next().getValue();
-    ByteString valueFromRDN = newEntry.getDN().getRDN().getAttributeValue(at).getValue();
+    ByteString valueFromRDN = newEntry.getDN().rdn().getAttributeValue(at).getValue();
     assertEquals(valueFromEntry,ByteString.valueOf("Jensen"));
 
     examineCompletedOperation(modifyDNOperation);
-    TestCaseUtils.deleteEntry(DN.decode("uid=userid.0+sn=Jensen,ou=People,dc=example,dc=com"));
+    TestCaseUtils.deleteEntry(DN.valueOf("uid=userid.0+sn=Jensen,ou=People,dc=example,dc=com"));
   }
 
   @Test
@@ -552,7 +552,7 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), true,
                                null);
 
@@ -570,7 +570,7 @@
     InvocationCounterPlugin.resetAllCounters();
 
     modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.test0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.test0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.0"), true,
                                null);
 
@@ -616,9 +616,9 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), true,
-                               DN.decode("dc=example,dc=com"));
+                               DN.valueOf("dc=example,dc=com"));
 
     modifyDNOperation.run();
     assertSuccessAndEntryExists(modifyDNOperation,
@@ -628,9 +628,9 @@
     InvocationCounterPlugin.resetAllCounters();
 
     modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.test0,dc=example,dc=com"),
+                               DN.valueOf("uid=user.test0,dc=example,dc=com"),
                                RDN.decode("uid=user.0"), true,
-                               DN.decode("ou=People,dc=example,dc=com"));
+                               DN.valueOf("ou=People,dc=example,dc=com"));
 
     modifyDNOperation.run();
     assertSuccessAndEntryExists(modifyDNOperation,
@@ -645,18 +645,18 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("cn=Aaccf Amar Test"), true,
-                               DN.decode("dc=example,dc=com"));
+                               DN.valueOf("dc=example,dc=com"));
 
     modifyDNOperation.run();
     assertEquals(modifyDNOperation.getResultCode(),
                  ResultCode.SUCCESS);
     assertEquals(modifyDNOperation.getErrorMessage().length(), 0);
-    Entry newEntry = DirectoryServer.getEntry(DN.decode(
+    Entry newEntry = DirectoryServer.getEntry(DN.valueOf(
         "cn=Aaccf Amar Test,dc=example,dc=com"));
     assertNotNull(newEntry);
-    assertNull(DirectoryServer.getEntry(DN.decode("uid=user.0,ou=People,dc=example,dc=com")));
+    assertNull(DirectoryServer.getEntry(DN.valueOf("uid=user.0,ou=People,dc=example,dc=com")));
     assertNull(newEntry.getAttribute("uid"));
 
     for(Attribute attribute : newEntry.getAttribute("cn"))
@@ -669,18 +669,18 @@
     InvocationCounterPlugin.resetAllCounters();
 
     modifyDNOperation = newModifyDNOperation(
-                               DN.decode("cn=Aaccf Amar Test,dc=example,dc=com"),
+                               DN.valueOf("cn=Aaccf Amar Test,dc=example,dc=com"),
                                RDN.decode("uid=user.0"), false,
-                               DN.decode("ou=People,dc=example,dc=com"));
+                               DN.valueOf("ou=People,dc=example,dc=com"));
 
     modifyDNOperation.run();
     assertEquals(modifyDNOperation.getResultCode(),
                  ResultCode.SUCCESS);
     assertEquals(modifyDNOperation.getErrorMessage().length(), 0);
-    Entry newOldEntry = DirectoryServer.getEntry(DN.decode(
+    Entry newOldEntry = DirectoryServer.getEntry(DN.valueOf(
         "uid=user.0,ou=People,dc=example,dc=com"));
     assertNotNull(newOldEntry);
-    assertNull(DirectoryServer.getEntry(DN.decode("cn=Aaccf Amar Test,dc=example,dc=com")));
+    assertNull(DirectoryServer.getEntry(DN.valueOf("cn=Aaccf Amar Test,dc=example,dc=com")));
     for(Attribute attribute : newOldEntry.getAttribute("cn"))
     {
       assertTrue(attribute.contains(AttributeValues.create(attribute.getAttributeType(), "Aaccf Amar Test")));
@@ -699,9 +699,9 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.invalid,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.invalid,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), true,
-                               DN.decode("dc=example,dc=com"));
+                               DN.valueOf("dc=example,dc=com"));
 
     modifyDNOperation.run();
     examineIncompleteOperation(modifyDNOperation, ResultCode.NO_SUCH_OBJECT);
@@ -713,9 +713,9 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("invalid=invalid"), true,
-                               DN.decode("dc=example,dc=com"));
+                               DN.valueOf("dc=example,dc=com"));
 
     modifyDNOperation.run();
     examineIncompleteOperation(modifyDNOperation,
@@ -728,9 +728,9 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), true,
-                               DN.decode("dc=invalid,dc=com"));
+                               DN.valueOf("dc=invalid,dc=com"));
 
     modifyDNOperation.run();
     examineIncompleteOperation(modifyDNOperation, ResultCode.NO_SUCH_OBJECT);
@@ -784,7 +784,7 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("dc=example,dc=com"),
+                               DN.valueOf("dc=example,dc=com"),
                                RDN.decode("dc=exampletest"), true,
                                null);
 
@@ -840,7 +840,7 @@
     ModifyDNOperation modifyDNOperation =
          new ModifyDNOperationBasis(proxyUserConn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), controls,
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), false,
                                null);
 
@@ -855,7 +855,7 @@
          new ModifyDNOperationBasis(proxyUserConn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(),
                                controls,
-                               DN.decode("uid=user.test0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.test0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.0"), true,
                                null);
 
@@ -877,7 +877,7 @@
     ModifyDNOperation modifyDNOperation =
          new ModifyDNOperationBasis(proxyUserConn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), controls,
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), false,
                                null);
 
@@ -898,7 +898,7 @@
     ModifyDNOperation modifyDNOperation =
          new ModifyDNOperationBasis(proxyUserConn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), controls,
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), false,
                                null);
 
@@ -912,7 +912,7 @@
     modifyDNOperation =
          new ModifyDNOperationBasis(proxyUserConn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), controls,
-                               DN.decode("uid=user.test0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.test0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.0"), true,
                                null);
 
@@ -934,7 +934,7 @@
     ModifyDNOperation modifyDNOperation =
          new ModifyDNOperationBasis(proxyUserConn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), controls,
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), false,
                                null);
 
@@ -956,7 +956,7 @@
     ModifyDNOperation modifyDNOperation =
          new ModifyDNOperationBasis(proxyUserConn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), controls,
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), false,
                                null);
 
@@ -978,7 +978,7 @@
     ModifyDNOperation modifyDNOperation =
          new ModifyDNOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                                controls,
-                               DN.decode("uid=user.0,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), false,
                                null);
 
@@ -1218,9 +1218,9 @@
         "userPassword: Password");
 
       assertTrue(DirectoryServer.entryExists(
-                      DN.decode("uid=first.test,ou=People,dc=example,dc=com")));
+                      DN.valueOf("uid=first.test,ou=People,dc=example,dc=com")));
       assertFalse(DirectoryServer.entryExists(
-                      DN.decode("uid=first.test,ou=Users,dc=example,dc=com")));
+                      DN.valueOf("uid=first.test,ou=Users,dc=example,dc=com")));
 
 
       InternalClientConnection conn =
@@ -1233,9 +1233,9 @@
 
 
       assertFalse(DirectoryServer.entryExists(
-                       DN.decode("uid=first.test,ou=People,dc=example,dc=com")));
+                       DN.valueOf("uid=first.test,ou=People,dc=example,dc=com")));
       assertTrue(DirectoryServer.entryExists(
-                      DN.decode("uid=first.test,ou=Users,dc=example,dc=com")));
+                      DN.valueOf("uid=first.test,ou=Users,dc=example,dc=com")));
     }
     finally
     {
@@ -1301,9 +1301,9 @@
         "userPassword: Password");
 
       assertTrue(DirectoryServer.entryExists(
-           DN.decode("uid=first.test,ou=Org 1.1,ou=Org 1,dc=example,dc=com")));
+           DN.valueOf("uid=first.test,ou=Org 1.1,ou=Org 1,dc=example,dc=com")));
       assertFalse(DirectoryServer.entryExists(
-           DN.decode("uid=first.test,ou=Org 2.1,ou=Org 2,dc=example,dc=com")));
+           DN.valueOf("uid=first.test,ou=Org 2.1,ou=Org 2,dc=example,dc=com")));
 
 
       InternalClientConnection conn =
@@ -1317,9 +1317,9 @@
 
 
       assertFalse(DirectoryServer.entryExists(
-           DN.decode("uid=first.test,ou=Org 1.1,ou=Org 1,dc=example,dc=com")));
+           DN.valueOf("uid=first.test,ou=Org 1.1,ou=Org 1,dc=example,dc=com")));
       assertTrue(DirectoryServer.entryExists(
-           DN.decode("uid=first.test,ou=Org 2.1,ou=Org 2,dc=example,dc=com")));
+           DN.valueOf("uid=first.test,ou=Org 2.1,ou=Org 2,dc=example,dc=com")));
     }
     finally
     {
@@ -1336,9 +1336,9 @@
     InvocationCounterPlugin.resetAllCounters();
 
     ModifyDNOperation modifyDNOperation = newModifyDNOperation(
-                               DN.decode("uid=user.invalid,ou=People,dc=example,dc=com"),
+                               DN.valueOf("uid=user.invalid,ou=People,dc=example,dc=com"),
                                RDN.decode("uid=user.test0"), true,
-                               DN.decode("dc=example,dc=com"));
+                               DN.valueOf("dc=example,dc=com"));
 
     CancelRequest cancelRequest = new CancelRequest(false,
                                                     Message.raw("testCancelBeforeStartup"));
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowConfigurationTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowConfigurationTest.java
index 3224fd1..951e02b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowConfigurationTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowConfigurationTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -298,7 +299,7 @@
     // Create a workflow and register it with the server
     String workflowID = baseDN + "#" + backendID;
     WorkflowImpl workflowImpl = new WorkflowImpl(
-        workflowID, DN.decode(baseDN), workflowElementID, workflowElement);
+        workflowID, DN.valueOf(baseDN), workflowElementID, workflowElement);
     workflowImpl.register();
     
     // Register the workflow with the internal network group
@@ -364,7 +365,7 @@
   private void createBaseEntry(String baseDN, String backendID)
       throws Exception
   {
-    Entry entry = StaticUtils.createEntry(DN.decode(baseDN));
+    Entry entry = StaticUtils.createEntry(DN.valueOf(baseDN));
 
     AddOperationBasis addOperation = new AddOperationBasis(
         InternalClientConnection.getRootConnection(),
@@ -455,7 +456,7 @@
     Backend backend = DirectoryServer.getBackend(backendID);
     if (createBaseEntry)
     {
-      Entry e = createEntry(DN.decode(baseDN));
+      Entry e = createEntry(DN.valueOf(baseDN));
       backend.addEntry(e, null);
     }
     return backend;
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java
index 7a3fcff..8f8e7b2 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -98,10 +99,10 @@
   public Object[][] initDNSet_1()
     throws Exception
   {
-    DN dnNull         = DN.decode ("");
-    DN baseDN1        = DN.decode ("o=test");
-    DN subordinateDN1 = DN.decode ("ou=subtest,o=test");
-    DN unrelatedDN    = DN.decode ("o=dummy");
+    DN dnNull         = DN.valueOf ("");
+    DN baseDN1        = DN.valueOf ("o=test");
+    DN subordinateDN1 = DN.valueOf ("ou=subtest,o=test");
+    DN unrelatedDN    = DN.valueOf ("o=dummy");
 
     // Sets of DNs
     Object[][] myData =
@@ -191,17 +192,17 @@
       String subordinateDN3 = "ou=subordinate3," + baseDN3;
 
       int i = 0;
-      baseDNs[i]        = DN.decode (baseDN1);
-      subordinateDNs[i] = DN.decode (subordinateDN1);
+      baseDNs[i]        = DN.valueOf (baseDN1);
+      subordinateDNs[i] = DN.valueOf (subordinateDN1);
       i++;
-      baseDNs[i]        = DN.decode (baseDN2);
-      subordinateDNs[i] = DN.decode (subordinateDN2);
+      baseDNs[i]        = DN.valueOf (baseDN2);
+      subordinateDNs[i] = DN.valueOf (subordinateDN2);
       i++;
-      baseDNs[i]        = DN.decode (baseDN3);
-      subordinateDNs[i] = DN.decode (subordinateDN3);
+      baseDNs[i]        = DN.valueOf (baseDN3);
+      subordinateDNs[i] = DN.valueOf (subordinateDN3);
 
-      unrelatedDN = DN.decode ("o=dummy");
-      rootDSE     = DN.decode ("");
+      unrelatedDN = DN.valueOf ("o=dummy");
+      rootDSE     = DN.valueOf ("");
     }
 
     // Sets of DNs
@@ -281,17 +282,17 @@
       String subordinateDN3 = "ou=subordinate3," + baseDN3;
 
       int i = 0;
-      baseDNs[i]        = DN.decode (baseDN1);
-      subordinateDNs[i] = DN.decode (subordinateDN1);
+      baseDNs[i]        = DN.valueOf (baseDN1);
+      subordinateDNs[i] = DN.valueOf (subordinateDN1);
       i++;
-      baseDNs[i]        = DN.decode (baseDN2);
-      subordinateDNs[i] = DN.decode (subordinateDN2);
+      baseDNs[i]        = DN.valueOf (baseDN2);
+      subordinateDNs[i] = DN.valueOf (subordinateDN2);
       i++;
-      baseDNs[i]        = DN.decode (baseDN3);
-      subordinateDNs[i] = DN.decode (subordinateDN3);
+      baseDNs[i]        = DN.valueOf (baseDN3);
+      subordinateDNs[i] = DN.valueOf (subordinateDN3);
 
-      unrelatedDN = DN.decode ("o=dummy");
-      rootDSE     = DN.decode ("");
+      unrelatedDN = DN.valueOf ("o=dummy");
+      rootDSE     = DN.valueOf ("");
     }
 
     // Sets of DNs
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/AuthMethodConnectionCriteriaTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/AuthMethodConnectionCriteriaTest.java
index 0707e54..bf12e06 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/AuthMethodConnectionCriteriaTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/AuthMethodConnectionCriteriaTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -131,12 +132,12 @@
 
     if (clientAuthMethod == AllowedAuthMethod.ANONYMOUS)
     {
-      bindDN = DN.nullDN();
+      bindDN = DN.rootDN();
     }
     else
     {
       bindDN =
-          DN.decode("cn=Directory Manager, cn=Root DNs, cn=config");
+          DN.valueOf("cn=Directory Manager, cn=Root DNs, cn=config");
     }
 
     ClientConnection client =
@@ -168,7 +169,7 @@
       boolean expectedResult) throws Exception
   {
     ClientConnection client =
-        new MockClientConnection(12345, false, DN.nullDN(),
+        new MockClientConnection(12345, false, DN.rootDN(),
             AllowedAuthMethod.ANONYMOUS);
 
     AuthenticationType authType;
@@ -178,17 +179,17 @@
     {
     case ANONYMOUS:
       authType = null;
-      bindDN = DN.nullDN();
+      bindDN = DN.rootDN();
       break;
     case SIMPLE:
       authType = AuthenticationType.SIMPLE;
       bindDN =
-          DN.decode("cn=Directory Manager, cn=Root DNs, cn=config");
+          DN.valueOf("cn=Directory Manager, cn=Root DNs, cn=config");
       break;
     default: // SASL
       authType = AuthenticationType.SASL;
       bindDN =
-          DN.decode("cn=Directory Manager, cn=Root DNs, cn=config");
+          DN.valueOf("cn=Directory Manager, cn=Root DNs, cn=config");
       break;
     }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/BindDNConnectionCriteriaTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/BindDNConnectionCriteriaTest.java
index 6736d5e..43e6ecc 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/BindDNConnectionCriteriaTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/BindDNConnectionCriteriaTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -76,9 +77,9 @@
   @DataProvider(name = "testData")
   public Object[][] createTestData() throws Exception
   {
-    DN anonymousUser = DN.nullDN();
+    DN anonymousUser = DN.rootDN();
     DN rootUser =
-        DN.decode("cn=Directory Manager, cn=Root DNs, cn=config");
+        DN.valueOf("cn=Directory Manager, cn=Root DNs, cn=config");
     PatternDN rootMatch = PatternDN.decode("*, cn=Root DNs, cn=config");
     PatternDN rootNoMatch =
         PatternDN.decode("cn=Dirx*, cn=Root DNs, cn=config");
@@ -142,7 +143,7 @@
       throws Exception
   {
     ClientConnection client =
-        new MockClientConnection(12345, false, DN.nullDN(),
+        new MockClientConnection(12345, false, DN.rootDN(),
             AllowedAuthMethod.ANONYMOUS);
 
     BindDNConnectionCriteria criteria =
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/IPConnectionCriteriaTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/IPConnectionCriteriaTest.java
index 1832052..858ccd8 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/IPConnectionCriteriaTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/IPConnectionCriteriaTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -77,7 +78,7 @@
     AddressMask matchAnything = AddressMask.decode("*.*.*.*");
     AddressMask matchNothing = AddressMask.decode("0.0.0.0");
     ClientConnection client =
-        new MockClientConnection(12345, false, DN.nullDN(),
+        new MockClientConnection(12345, false, DN.rootDN(),
             AllowedAuthMethod.ANONYMOUS);
 
     Collection<AddressMask> emptyMasks = Collections.emptySet();
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/NetworkGroupTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/NetworkGroupTest.java
index 5087077..41a340a 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/NetworkGroupTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/NetworkGroupTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.core.networkgroups;
 
@@ -92,8 +92,8 @@
     String networkGroupID2 = "networkGroup2";
 
     // Workflow base DNs
-    DN dn1 = DN.decode("o=test1");
-    DN dn2 = DN.decode("o=test2");
+    DN dn1 = DN.valueOf("o=test1");
+    DN dn2 = DN.valueOf("o=test2");
 
     // Network group info
     return new Object[][] {
@@ -129,17 +129,17 @@
   @DataProvider(name = "DNSet_1")
   public Object[][] initDNSet_1() throws Exception
   {
-    DN dnRootDSE = DN.decode("");
-    DN dnConfig  = DN.decode("cn=config");
-    DN dnMonitor = DN.decode("cn=monitor");
-    DN dnSchema  = DN.decode("cn=schema");
-    DN dnTasks   = DN.decode("cn=tasks");
-    DN dnBackups = DN.decode("cn=backups");
-    DN dnDummy   = DN.decode("o=dummy_suffix");
+    DN dnRootDSE = DN.valueOf("");
+    DN dnConfig  = DN.valueOf("cn=config");
+    DN dnMonitor = DN.valueOf("cn=monitor");
+    DN dnSchema  = DN.valueOf("cn=schema");
+    DN dnTasks   = DN.valueOf("cn=tasks");
+    DN dnBackups = DN.valueOf("cn=backups");
+    DN dnDummy   = DN.valueOf("o=dummy_suffix");
 
-    DN dnSubordinateConfig  = DN.decode("cn=Work Queue,cn=config");
-    DN dnSubordinateMonitor = DN.decode("cn=schema Backend,cn=monitor");
-    DN dnSubordinateTasks   = DN.decode("cn=Scheduled Tasks,cn=tasks");
+    DN dnSubordinateConfig  = DN.valueOf("cn=Work Queue,cn=config");
+    DN dnSubordinateMonitor = DN.valueOf("cn=schema Backend,cn=monitor");
+    DN dnSubordinateTasks   = DN.valueOf("cn=Scheduled Tasks,cn=tasks");
     // No DN subordinate for schema because the schema backend is
     // currently empty.
     // No DN subordinate for cn=backups because by default there is no
@@ -177,13 +177,13 @@
   public Object[][] initDNSet_2() throws Exception
   {
     // Network group definition
-    DN     dn1          = DN.decode("o=test1");
-    DN     dn2          = DN.decode("o=test2");
-    DN     dn3          = DN.decode("o=test3");
-    DN     subordinate1 = DN.decode("ou=subtest1,o=test1");
-    DN     subordinate2 = DN.decode("ou=subtest2,o=test2");
-    DN     subordinate3 = DN.decode("ou=subtest3,o=test3");
-    DN     unrelatedDN  = DN.decode("o=dummy");
+    DN     dn1          = DN.valueOf("o=test1");
+    DN     dn2          = DN.valueOf("o=test2");
+    DN     dn3          = DN.valueOf("o=test3");
+    DN     subordinate1 = DN.valueOf("ou=subtest1,o=test1");
+    DN     subordinate2 = DN.valueOf("ou=subtest2,o=test2");
+    DN     subordinate3 = DN.valueOf("ou=subtest3,o=test3");
+    DN     unrelatedDN  = DN.valueOf("o=dummy");
 
     // Network group info
     return new Object[][] {
@@ -217,7 +217,7 @@
   {
     // Network group definition
     String networkGroupID = "networkGroup1";
-    DN  dn = DN.decode("o=test1");
+    DN  dn = DN.valueOf("o=test1");
     int prio = 1;
 
     // Resource limits
@@ -256,8 +256,8 @@
   {
     String networkGroupID1 = "group1";
     String networkGroupID2 = "group2";
-    DN dn1 = DN.decode("o=test1");
-    DN dn2 = DN.decode("o=test2");
+    DN dn1 = DN.valueOf("o=test1");
+    DN dn2 = DN.valueOf("o=test2");
 
     return new Object[][] {
       {
@@ -884,7 +884,7 @@
 
     // Use simple bind on this connection
     Entry userEntry = DirectoryServer.getEntry(
-            DN.decode("cn=Directory Manager, cn=Root DNs, cn=config"));
+            DN.valueOf("cn=Directory Manager, cn=Root DNs, cn=config"));
     ClientConnection connection2 = new InternalClientConnection(
           new AuthenticationInfo(userEntry, userEntry.getDN(), true));
     ng = NetworkGroup.findMatchingNetworkGroup(connection2);
@@ -934,7 +934,7 @@
 
     // Use simple bind on this connection
     Entry userEntry = DirectoryServer.getEntry(
-            DN.decode("cn=Directory Manager, cn=Root DNs, cn=config"));
+            DN.valueOf("cn=Directory Manager, cn=Root DNs, cn=config"));
     ClientConnection connection2 = new InternalClientConnection(
           new AuthenticationInfo(userEntry, userEntry.getDN(), true));
     ng = NetworkGroup.findMatchingNetworkGroup(connection2);
@@ -1066,7 +1066,7 @@
       ) throws Exception
   {
     SearchOperation search = connection.processSearch(
-        DN.decode(""),
+        DN.valueOf(""),
         SearchScope.SINGLE_LEVEL,
         LDAPFilter.decode("(objectClass=*)").toSearchFilter());
 
@@ -1095,7 +1095,7 @@
       ) throws Exception
   {
     SearchOperation search = connection.processSearch(
-        DN.decode(baseDN),
+        DN.valueOf(baseDN),
         SearchScope.BASE_OBJECT,
         LDAPFilter.decode("(objectClass=*)").toSearchFilter());
 
@@ -1162,7 +1162,7 @@
       Attributes.create(attributeName, attributeValue);
     mods.add(new Modification(modType, attributeToModify));
     ModifyOperation modifyOperation = connection.processModify(
-        DN.decode(baseDN), mods);
+        DN.valueOf(baseDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyTest.java
index d661863..f7e6916 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -210,17 +211,17 @@
           throws DirectoryException
   {
     TreeSet<DN> subtrees1 = new TreeSet<DN>();
-    subtrees1.add(DN.decode("ou=people,dc=example,dc=com"));
+    subtrees1.add(DN.valueOf("ou=people,dc=example,dc=com"));
 
     TreeSet<DN> subtrees2 = new TreeSet<DN>();
-    subtrees2.add(DN.decode("ou=test,dc=example,dc=com"));
+    subtrees2.add(DN.valueOf("ou=test,dc=example,dc=com"));
 
     TreeSet<DN> subtrees3 = new TreeSet<DN>();
-    subtrees3.add(DN.decode("dc=example,dc=com"));
+    subtrees3.add(DN.valueOf("dc=example,dc=com"));
 
     TreeSet<DN> subtrees4 = new TreeSet<DN>();
-    subtrees4.add(DN.decode("dc=example,dc=com"));
-    subtrees4.add(DN.decode("dc=test,dc=com"));
+    subtrees4.add(DN.valueOf("dc=example,dc=com"));
+    subtrees4.add(DN.valueOf("dc=test,dc=com"));
 
     Object[][] myData = {
       // allowed subtrees, subtree to test, success
@@ -242,17 +243,17 @@
   public Object[][] initProhibitedSubtreesSet() throws DirectoryException
   {
     TreeSet<DN> subtrees1 = new TreeSet<DN>();
-    subtrees1.add(DN.decode("ou=people,dc=example,dc=com"));
+    subtrees1.add(DN.valueOf("ou=people,dc=example,dc=com"));
 
     TreeSet<DN> subtrees2 = new TreeSet<DN>();
-    subtrees2.add(DN.decode("ou=test,dc=example,dc=com"));
+    subtrees2.add(DN.valueOf("ou=test,dc=example,dc=com"));
 
     TreeSet<DN> subtrees3 = new TreeSet<DN>();
-    subtrees3.add(DN.decode("dc=example,dc=com"));
+    subtrees3.add(DN.valueOf("dc=example,dc=com"));
 
     TreeSet<DN> subtrees4 = new TreeSet<DN>();
-    subtrees4.add(DN.decode("dc=example,dc=com"));
-    subtrees4.add(DN.decode("dc=test,dc=com"));
+    subtrees4.add(DN.valueOf("dc=example,dc=com"));
+    subtrees4.add(DN.valueOf("dc=test,dc=com"));
 
     Object[][] myData = {
       // prohibited subtrees, subtree to test, success
@@ -275,13 +276,13 @@
     TreeSet<DN> subtrees_empty = new TreeSet<DN>();
 
     TreeSet<DN> subtrees_root = new TreeSet<DN>();
-    subtrees_root.add(DN.decode("dc=example,dc=com"));
+    subtrees_root.add(DN.valueOf("dc=example,dc=com"));
 
     TreeSet<DN> subtrees_people = new TreeSet<DN>();
-    subtrees_people.add(DN.decode("ou=people,dc=example,dc=com"));
+    subtrees_people.add(DN.valueOf("ou=people,dc=example,dc=com"));
 
     TreeSet<DN> subtrees_entry = new TreeSet<DN>();
-    subtrees_entry.add(DN.decode("uid=user.1,ou=people,dc=example,dc=com"));
+    subtrees_entry.add(DN.valueOf("uid=user.1,ou=people,dc=example,dc=com"));
 
     Object[][] myData = {
       // allowed subtree, prohibited subtree, subtree to test, success
@@ -371,7 +372,7 @@
 
     InternalClientConnection conn = new InternalClientConnection(DN.NULL_DN);
     InternalSearchOperation search = conn.processSearch(
-        DN.decode("dc=example,dc=com"),
+        DN.valueOf("dc=example,dc=com"),
         SearchScope.BASE_OBJECT,
         LDAPFilter.decode(searchFilter).toSearchFilter());
 
@@ -408,7 +409,7 @@
 
     InternalClientConnection conn = new InternalClientConnection(DN.NULL_DN);
     InternalSearchOperation search = conn.processSearch(
-        DN.decode("dc=example,dc=com"),
+        DN.valueOf("dc=example,dc=com"),
         SearchScope.BASE_OBJECT,
         LDAPFilter.decode(searchFilter).toSearchFilter());
 
@@ -445,7 +446,7 @@
 
     InternalClientConnection conn = new InternalClientConnection(DN.NULL_DN);
     InternalSearchOperation search = conn.processSearch(
-            DN.decode("dc=example,dc=com"),
+            DN.valueOf("dc=example,dc=com"),
             searchScope,
             LDAPFilter.decode("objectclass=*").toSearchFilter());
 
@@ -482,7 +483,7 @@
 
     InternalClientConnection conn = new InternalClientConnection(DN.NULL_DN);
     InternalSearchOperation search = conn.processSearch(
-            DN.decode(searchSubtree),
+            DN.valueOf(searchSubtree),
             SearchScope.WHOLE_SUBTREE,
             LDAPFilter.decode("objectclass=*").toSearchFilter());
 
@@ -519,7 +520,7 @@
 
     InternalClientConnection conn = new InternalClientConnection(DN.NULL_DN);
     InternalSearchOperation search = conn.processSearch(
-            DN.decode(searchSubtree),
+            DN.valueOf(searchSubtree),
             SearchScope.WHOLE_SUBTREE,
             LDAPFilter.decode("objectclass=*").toSearchFilter());
 
@@ -563,7 +564,7 @@
 
     InternalClientConnection conn = new InternalClientConnection(DN.NULL_DN);
     InternalSearchOperation search = conn.processSearch(
-            DN.decode(searchSubtree),
+            DN.valueOf(searchSubtree),
             SearchScope.WHOLE_SUBTREE,
             LDAPFilter.decode("objectclass=*").toSearchFilter());
 
@@ -634,7 +635,7 @@
          Attribute attributeToModify = Attributes.create("attr", "newVal");
          mods.add(new Modification(ModificationType.ADD, attributeToModify));
          op = (PreParseModifyOperation) conn.processModify(
-                 DN.decode("uid=user.1,ou=people,dc=example,dc=com"), mods);
+                 DN.valueOf("uid=user.1,ou=people,dc=example,dc=com"), mods);
          break;
        case MODIFY_DN:
          op = (PreParseModifyDNOperation) conn.processModifyDN(
@@ -642,7 +643,7 @@
                  "uid=usr.1,ou=people,dc=example,dc=com", true);
          break;
        case SEARCH:
-         op = conn.processSearch(DN.decode("dc=example,dc=com"),
+         op = conn.processSearch(DN.valueOf("dc=example,dc=com"),
             SearchScope.WHOLE_SUBTREE,
             LDAPFilter.decode("uid>=user.1").toSearchFilter());
          break;
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyTest.java
index 1620c23..e12e016 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -220,7 +220,7 @@
     limits.addConnection(conn1);
 
     InternalSearchOperation search = conn1.processSearch(
-        DN.decode("dc=example,dc=com"),
+        DN.valueOf("dc=example,dc=com"),
         SearchScope.BASE_OBJECT,
         LDAPFilter.decode(searchFilter).toSearchFilter());
 
@@ -259,7 +259,7 @@
     InternalClientConnection conn = new InternalClientConnection(DN.NULL_DN);
     limits.addConnection(conn);
 
-    final DN dn = DN.decode("dc=example,dc=com");
+    final DN dn = DN.valueOf("dc=example,dc=com");
     final SearchFilter all = SearchFilter.createFilterFromString("(objectclass=*)");
 
     // First operation is allowed
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/SecurityConnectionCriteriaTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/SecurityConnectionCriteriaTest.java
index 3776f9d..d1b8268 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/SecurityConnectionCriteriaTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/SecurityConnectionCriteriaTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -98,7 +99,7 @@
       throws Exception
   {
     ClientConnection client =
-        new MockClientConnection(12345, isSecure, DN.nullDN(),
+        new MockClientConnection(12345, isSecure, DN.rootDN(),
             AllowedAuthMethod.ANONYMOUS);
 
     Assert.assertEquals(criteria.matches(client), expectedResult);
@@ -124,11 +125,11 @@
       throws Exception
   {
     ClientConnection client =
-        new MockClientConnection(12345, false, DN.nullDN(),
+        new MockClientConnection(12345, false, DN.rootDN(),
             AllowedAuthMethod.ANONYMOUS);
 
     Assert.assertEquals(criteria.willMatchAfterBind(client,
-        DN.nullDN(), AuthenticationType.SIMPLE, isSecure),
+        DN.rootDN(), AuthenticationType.SIMPLE, isSecure),
         expectedResult);
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/CryptoManagerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/CryptoManagerTestCase.java
index 0e7c8d0..5f8e85f 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/CryptoManagerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/CryptoManagerTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.crypto;
 
@@ -359,7 +359,7 @@
     // specified transformation and key length. Mark each entry compromised.
     final String baseDNStr // TODO: is this DN defined elsewhere as a constant?
             = "cn=secret keys," + ADSContext.getAdministrationSuffixDN();
-    final DN baseDN = DN.decode(baseDNStr);
+    final DN baseDN = DN.valueOf(baseDNStr);
     final String FILTER_OC_INSTANCE_KEY
             = new StringBuilder("(objectclass=")
             .append(ConfigConstants.OC_CRYPTO_CIPHER_KEY)
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/GetSymmetricKeyExtendedOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/GetSymmetricKeyExtendedOperationTestCase.java
index 58091bf..0e6acd9 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/GetSymmetricKeyExtendedOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/GetSymmetricKeyExtendedOperationTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.crypto;
@@ -78,7 +79,7 @@
     // specified transformation and key length.
     final String baseDNStr // TODO: is this DN defined elsewhere as a constant?
             = "cn=secret keys," + ADSContext.getAdministrationSuffixDN();
-    final DN baseDN = DN.decode(baseDNStr);
+    final DN baseDN = DN.valueOf(baseDNStr);
     final String FILTER_OC_INSTANCE_KEY
             = new StringBuilder("(objectclass=")
             .append(ConfigConstants.OC_CRYPTO_CIPHER_KEY)
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AnonymousSASLMechanismHandlerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AnonymousSASLMechanismHandlerTestCase.java
index 3def652..aa2deec 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AnonymousSASLMechanismHandlerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AnonymousSASLMechanismHandlerTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -138,7 +139,7 @@
          InternalClientConnection.getRootConnection();
     BindOperationBasis bindOperation =
          new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                           new ArrayList<Control>(), "3", DN.nullDN(),
+                           new ArrayList<Control>(), "3", DN.rootDN(),
                            SASL_MECHANISM_ANONYMOUS, null);
     handler.processSASLBind(bindOperation);
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
@@ -165,7 +166,7 @@
          InternalClientConnection.getRootConnection();
     BindOperationBasis bindOperation =
          new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                           new ArrayList<Control>(), "3", DN.nullDN(),
+                           new ArrayList<Control>(), "3", DN.rootDN(),
                            SASL_MECHANISM_ANONYMOUS, ByteString.empty());
     handler.processSASLBind(bindOperation);
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
@@ -191,7 +192,7 @@
          InternalClientConnection.getRootConnection();
     BindOperationBasis bindOperation =
          new BindOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
-                           new ArrayList<Control>(), "3", DN.nullDN(),
+                           new ArrayList<Control>(), "3", DN.rootDN(),
                            SASL_MECHANISM_ANONYMOUS,
                            ByteString.valueOf("Internal Trace String"));
     handler.processSASLBind(bindOperation);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java
index 7c7534a..df870e6 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012-2013 ForgeRock, AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
@@ -447,7 +447,7 @@
     ModifyOperationBasis modifyOperation =
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertEquals(validator.passwordIsAcceptable(pwOS,
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandlerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandlerTestCase.java
index 89edda4..1386f1a 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandlerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandlerTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -696,7 +697,7 @@
     InternalClientConnection conn =
          new InternalClientConnection(new AuthenticationInfo());
     BindOperation bindOperation =
-         conn.processSASLBind(DN.nullDN(), SASL_MECHANISM_CRAM_MD5,
+         conn.processSASLBind(DN.rootDN(), SASL_MECHANISM_CRAM_MD5,
                               ByteString.valueOf("invalid"));
     assertFalse(bindOperation.getResultCode() == ResultCode.SUCCESS);
   }
@@ -716,12 +717,12 @@
     InternalClientConnection conn =
          new InternalClientConnection(new AuthenticationInfo());
     BindOperation bindOperation =
-         conn.processSASLBind(DN.nullDN(), SASL_MECHANISM_CRAM_MD5, null);
+         conn.processSASLBind(DN.rootDN(), SASL_MECHANISM_CRAM_MD5, null);
     assertEquals(bindOperation.getResultCode(),
                  ResultCode.SASL_BIND_IN_PROGRESS);
 
     bindOperation =
-         conn.processSASLBind(DN.nullDN(), SASL_MECHANISM_CRAM_MD5,
+         conn.processSASLBind(DN.rootDN(), SASL_MECHANISM_CRAM_MD5,
                               ByteString.valueOf("malformed"));
     assertFalse(bindOperation.getResultCode() == ResultCode.SUCCESS);
   }
@@ -741,14 +742,14 @@
     InternalClientConnection conn =
          new InternalClientConnection(new AuthenticationInfo());
     BindOperation bindOperation =
-         conn.processSASLBind(DN.nullDN(), SASL_MECHANISM_CRAM_MD5, null);
+         conn.processSASLBind(DN.rootDN(), SASL_MECHANISM_CRAM_MD5, null);
     assertEquals(bindOperation.getResultCode(),
                  ResultCode.SASL_BIND_IN_PROGRESS);
 
     ByteString creds =
          ByteString.valueOf("dn:cn=Directory Manager malformeddigest");
     bindOperation =
-         conn.processSASLBind(DN.nullDN(), SASL_MECHANISM_CRAM_MD5, creds);
+         conn.processSASLBind(DN.rootDN(), SASL_MECHANISM_CRAM_MD5, creds);
     assertFalse(bindOperation.getResultCode() == ResultCode.SUCCESS);
   }
 
@@ -768,7 +769,7 @@
     InternalClientConnection conn =
          new InternalClientConnection(new AuthenticationInfo());
     BindOperation bindOperation =
-         conn.processSASLBind(DN.nullDN(), SASL_MECHANISM_CRAM_MD5, null);
+         conn.processSASLBind(DN.rootDN(), SASL_MECHANISM_CRAM_MD5, null);
     assertEquals(bindOperation.getResultCode(),
                  ResultCode.SASL_BIND_IN_PROGRESS);
 
@@ -776,7 +777,7 @@
          ByteString.valueOf("dn:cn=Directory Manager " +
                           "malformedcredswiththerightlength");
     bindOperation =
-         conn.processSASLBind(DN.nullDN(), SASL_MECHANISM_CRAM_MD5, creds);
+         conn.processSASLBind(DN.rootDN(), SASL_MECHANISM_CRAM_MD5, creds);
     assertFalse(bindOperation.getResultCode() == ResultCode.SUCCESS);
   }
 }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CharacterSetPasswordValidatorTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CharacterSetPasswordValidatorTestCase.java
index 7c9c92d..a1f7f79 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CharacterSetPasswordValidatorTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CharacterSetPasswordValidatorTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -935,7 +935,7 @@
     ModifyOperationBasis modifyOperation =
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertEquals(validator.passwordIsAcceptable(pwOS,
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CommonEntryCacheTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CommonEntryCacheTestCase.java
index f3ebda3..8f5ce8c 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CommonEntryCacheTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CommonEntryCacheTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
@@ -109,7 +109,7 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     assertFalse(cache.containsEntry(testEntriesList.get(0).getDN()),
       "Not expected to find " + testEntriesList.get(0).getDN().toString() +
@@ -143,7 +143,7 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     assertNull(cache.getEntry(testEntriesList.get(0).getDN()),
       "Not expected to find " + testEntriesList.get(0).getDN().toString() +
@@ -177,7 +177,7 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     assertNull(cache.getEntry(testEntriesList.get(0).getDN()),
       "Not expected to find " + testEntriesList.get(0).getDN().toString() +
@@ -211,7 +211,7 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     assertNull(cache.getEntry(b, -1),
       "Not expected to find entry id " + Integer.toString(-1) +
@@ -244,7 +244,7 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     assertEquals(cache.getEntryID(testEntriesList.get(0).getDN()), -1,
       "Not expected to find " + testEntriesList.get(0).getDN().toString() +
@@ -277,7 +277,7 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     cache.putEntry(testEntriesList.get(0), b, 1);
 
@@ -310,7 +310,7 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     assertTrue(cache.putEntryIfAbsent(testEntriesList.get(0), b, 1),
       "Not expected to find " + testEntriesList.get(0).getDN().toString() +
@@ -351,7 +351,7 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     cache.removeEntry(testEntriesList.get(0).getDN());
     cache.putEntry(testEntriesList.get(0), b, 1);
@@ -386,7 +386,7 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     cache.clear();
     cache.putEntry(testEntriesList.get(0), b, 1);
@@ -421,8 +421,8 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
-    Backend c = DirectoryServer.getBackend(DN.decode("cn=config"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
+    Backend c = DirectoryServer.getBackend(DN.valueOf("cn=config"));
 
     cache.clearBackend(b);
     cache.putEntry(testEntriesList.get(0), b, 1);
@@ -463,16 +463,16 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
-    Backend c = DirectoryServer.getBackend(DN.decode("cn=config"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
+    Backend c = DirectoryServer.getBackend(DN.valueOf("cn=config"));
 
     cache.putEntry(testEntriesList.get(0), b, 1);
     Entry testEntry = testEntriesList.get(1);
     testEntry.getDN();
-    testEntry.setDN(DN.decode(
-      testEntry.getDN().getRDN() + ",cn=config"));
+    testEntry.setDN(DN.valueOf(
+      testEntry.getDN().rdn() + ",cn=config"));
     cache.putEntry(testEntry, c, 1);
-    cache.clearSubtree(DN.decode("o=test"));
+    cache.clearSubtree(DN.valueOf("o=test"));
 
     assertNull(cache.getEntry(testEntriesList.get(0).getDN()),
       "Not expected to find " + testEntriesList.get(0).getDN().toString() +
@@ -524,7 +524,7 @@
   public void testCacheConcurrency()
          throws Exception
   {
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     for(int loops = 0; loops < CONCURRENCYLOOPS; loops++) {
       for(int i = 0; i < NUMTESTENTRIES; i++) {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CryptPasswordStorageSchemeTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CryptPasswordStorageSchemeTestCase.java
index 8785c8b..1d3d3ba 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CryptPasswordStorageSchemeTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/CryptPasswordStorageSchemeTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2010-2013 ForgeRock AS.
+ *      Portions Copyright 2010-2014 ForgeRock AS.
  *      Portions Copyright 2012 Dariusz Janny <dariusz.janny@gmail.com>
  */
 package org.opends.server.extensions;
@@ -96,7 +96,7 @@
   {
     TestCaseUtils.startServer();
 
-    configEntry = DirectoryServer.getConfigEntry(DN.decode(configDNString));
+    configEntry = DirectoryServer.getConfigEntry(DN.valueOf(configDNString));
   }
 
 
@@ -310,7 +310,7 @@
     // PasswordPolicyTestCase.testAllowPreEncodedPasswordsAuth
     boolean previousValue = false;
     try {
-      DN dn = DN.decode("cn=Default Password Policy,cn=Password Policies,cn=config");
+      DN dn = DN.valueOf("cn=Default Password Policy,cn=Password Policies,cn=config");
       PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
       previousValue = p.isAllowPreEncodedPasswords();
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DefaultEntryCacheTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DefaultEntryCacheTestCase.java
index a67690b..16fcb10 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DefaultEntryCacheTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DefaultEntryCacheTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -449,7 +449,7 @@
       cache.toVerboseString());
 
     TestCaseUtils.initializeTestBackend(false);
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     // Spread test entries among all cache levels via default cache.
     for (int i = 0; i < NUMTESTENTRIES; i++) {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java
index 8d26f9a..041eef3 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java
@@ -23,6 +23,7 @@
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
  *      Portions Copyright 2011 profiq, s.r.o.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -96,7 +97,7 @@
 
   /**
    * The Dictionary can take up a lot of memory, so we restart the server to
-   * implicitly unregister the validator and free the memory. 
+   * implicitly unregister the validator and free the memory.
    */
   @AfterClass
   public void freeDictionaryMemory() throws Exception
@@ -495,7 +496,7 @@
         "dRoWsSaP",
         true
       },
-   
+
       // Substrings checking configuration with a word in the dictionary,
       // case-sensitive matching enabled
       new Object[]
@@ -517,7 +518,7 @@
         "oldpassword",
         false
       },
-      
+
       // Substrings checking configuration with a word in the dictionary,
       // case-sensitive matching disabled
       new Object[]
@@ -539,7 +540,7 @@
         "NewPassword",
         false
       },
-      
+
       // Substrings checking configuration with a word in the dictionary,
       // case-sensitive matching enabled (dictionary word is lower case)
       new Object[]
@@ -561,7 +562,7 @@
         "NewPassword",
         true
       },
-      
+
       // Substrings checking configuration with a word in the dictionary,
       // case-sensitive matching disabled, and minimal substring length
       // of 5 while the password is only 3 characters
@@ -584,7 +585,7 @@
         "god",
         false
       },
-      
+
       // Substrings checking configuration with a word in the dictionary,
       // case-sensitive matching disabled, and minimal substring length
       // of 5 while the word in the dictionary is only 3 characters
@@ -607,9 +608,9 @@
         "godblessus",
         true
       },
-      
-      // Substring checking configuration with a reverse of a word in the 
-      // dictionary, reversed matching enabled and case-insensitive 
+
+      // Substring checking configuration with a reverse of a word in the
+      // dictionary, reversed matching enabled and case-insensitive
       // matching enabled
       new Object[]
       {
@@ -683,7 +684,7 @@
     ModifyOperationBasis modifyOperation =
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(), InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertEquals(validator.passwordIsAcceptable(pwOS,
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandlerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandlerTestCase.java
index 5261ed3..957ca53 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandlerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandlerTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -1013,7 +1014,7 @@
     InternalClientConnection conn =
          new InternalClientConnection(new AuthenticationInfo());
     BindOperation bindOperation =
-         conn.processSASLBind(DN.nullDN(), SASL_MECHANISM_DIGEST_MD5,
+         conn.processSASLBind(DN.rootDN(), SASL_MECHANISM_DIGEST_MD5,
                               ByteString.valueOf("invalid"));
     assertFalse(bindOperation.getResultCode() == ResultCode.SUCCESS);
   }
@@ -1033,12 +1034,12 @@
     InternalClientConnection conn =
          new InternalClientConnection(new AuthenticationInfo());
     BindOperation bindOperation =
-         conn.processSASLBind(DN.nullDN(), SASL_MECHANISM_DIGEST_MD5, null);
+         conn.processSASLBind(DN.rootDN(), SASL_MECHANISM_DIGEST_MD5, null);
     assertEquals(bindOperation.getResultCode(),
                  ResultCode.SASL_BIND_IN_PROGRESS);
 
     bindOperation =
-         conn.processSASLBind(DN.nullDN(), SASL_MECHANISM_DIGEST_MD5,
+         conn.processSASLBind(DN.rootDN(), SASL_MECHANISM_DIGEST_MD5,
                               ByteString.valueOf("malformed"));
     assertFalse(bindOperation.getResultCode() == ResultCode.SUCCESS);
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryDNVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryDNVirtualAttributeProviderTestCase.java
index f2bd49c..eeb7c9f 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryDNVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryDNVirtualAttributeProviderTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -98,14 +98,14 @@
   {
     return new Object[][]
     {
-      new Object[] { DN.decode("") },
-      new Object[] { DN.decode("o=test") },
-      new Object[] { DN.decode("dc=example,dc=com") },
-      new Object[] { DN.decode("cn=config") },
-      new Object[] { DN.decode("cn=schema") },
-      new Object[] { DN.decode("cn=tasks") },
-      new Object[] { DN.decode("cn=monitor") },
-      new Object[] { DN.decode("cn=backups") }
+      new Object[] { DN.valueOf("") },
+      new Object[] { DN.valueOf("o=test") },
+      new Object[] { DN.valueOf("dc=example,dc=com") },
+      new Object[] { DN.valueOf("cn=config") },
+      new Object[] { DN.valueOf("cn=schema") },
+      new Object[] { DN.valueOf("cn=tasks") },
+      new Object[] { DN.valueOf("cn=monitor") },
+      new Object[] { DN.valueOf("cn=backups") }
     };
   }
 
@@ -934,7 +934,7 @@
     InternalSearchOperation searchOperation =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                      InternalClientConnection.nextMessageID(), null,
-                                     DN.decode("o=test"),
+                                     DN.valueOf("o=test"),
                                      SearchScope.WHOLE_SUBTREE,
                                      DereferencePolicy.NEVER_DEREF_ALIASES, 0,
                                      0, false, filter, null, null);
@@ -987,7 +987,7 @@
     InternalSearchOperation searchOperation =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                      InternalClientConnection.nextMessageID(), null,
-                                     DN.decode("o=test"),
+                                     DN.valueOf("o=test"),
                                      SearchScope.WHOLE_SUBTREE,
                                      DereferencePolicy.NEVER_DEREF_ALIASES, 0,
                                      0, false, filter, null, null);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProviderTestCase.java
index 3f748ca..d8bda9b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProviderTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -98,12 +98,12 @@
   {
     return new Object[][]
     {
-      new Object[] { DN.decode("") },
-      new Object[] { DN.decode("cn=config") },
-      new Object[] { DN.decode("cn=schema") },
-      new Object[] { DN.decode("cn=tasks") },
-      new Object[] { DN.decode("cn=monitor") },
-      new Object[] { DN.decode("cn=backups") }
+      new Object[] { DN.valueOf("") },
+      new Object[] { DN.valueOf("cn=config") },
+      new Object[] { DN.valueOf("cn=schema") },
+      new Object[] { DN.valueOf("cn=tasks") },
+      new Object[] { DN.valueOf("cn=monitor") },
+      new Object[] { DN.valueOf("cn=backups") }
     };
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java
index 7ef33f1..fa502ff 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
@@ -159,7 +159,7 @@
          throws Exception
   {
     DN parentDN =
-            DN.decode("cn=Account Status Notification Handlers,cn=config");
+            DN.valueOf("cn=Account Status Notification Handlers,cn=config");
     ConfigEntry parentEntry = DirectoryServer.getConfigEntry(parentDN);
     ConfigEntry configEntry = new ConfigEntry(e, parentEntry);
 
@@ -187,7 +187,7 @@
   {
     String dnStr = "cn=Error Log Handler,cn=Account Status Notification " +
                         "Handlers,cn=config";
-    DN handlerDN = DN.decode(dnStr);
+    DN handlerDN = DN.valueOf(dnStr);
     AccountStatusNotificationHandler<?> handler =
          DirectoryServer.getAccountStatusNotificationHandler(handlerDN);
     assertNotNull(handler);
@@ -248,13 +248,13 @@
 
     String dnStr = "cn=Error Log Handler,cn=Account Status Notification " +
                         "Handlers,cn=config";
-    DN handlerDN = DN.decode(dnStr);
+    DN handlerDN = DN.valueOf(dnStr);
     AccountStatusNotificationHandler<?> handler =
          DirectoryServer.getAccountStatusNotificationHandler(handlerDN);
     assertNotNull(handler);
 
     Entry userEntry =
-               DirectoryServer.getEntry(DN.decode("uid=test.user,o=test"));
+               DirectoryServer.getEntry(DN.valueOf("uid=test.user,o=test"));
 
     PasswordPolicy policy = (PasswordPolicy) AuthenticationPolicy.forUser(
         userEntry, false);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExactMatchIdentityMapperTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExactMatchIdentityMapperTestCase.java
index b212001..4b34069 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExactMatchIdentityMapperTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExactMatchIdentityMapperTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -275,7 +276,7 @@
   public void testMapperEnabled()
          throws Exception
   {
-    DN mapperDN = DN.decode("cn=Exact Match,cn=Identity Mappers,cn=config");
+    DN mapperDN = DN.valueOf("cn=Exact Match,cn=Identity Mappers,cn=config");
     IdentityMapper mapper = DirectoryServer.getIdentityMapper(mapperDN);
     assertNotNull(mapper);
     assertTrue(mapper instanceof ExactMatchIdentityMapper);
@@ -340,7 +341,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("test");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
 
     mapper.finalizeIdentityMapper();
@@ -406,7 +407,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("test");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
 
     mapper.finalizeIdentityMapper();
@@ -684,7 +685,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("foo");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=foo,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=foo,o=test"));
 
 
     mapper.finalizeIdentityMapper();
@@ -750,7 +751,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("bar");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=foo,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=foo,o=test"));
 
 
     mapper.finalizeIdentityMapper();
@@ -834,7 +835,7 @@
          throws Exception
   {
     String mapperDNString = "cn=Exact Match,cn=Identity Mappers,cn=config";
-    DN mapperDN = DN.decode(mapperDNString);
+    DN mapperDN = DN.valueOf(mapperDNString);
     IdentityMapper mapper = DirectoryServer.getIdentityMapper(mapperDN);
     assertNotNull(mapper);
     assertTrue(mapper instanceof ExactMatchIdentityMapper);
@@ -866,7 +867,7 @@
     // does not.
     Entry mappedEntry = mapper.getEntryForID("test");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
     mappedEntry = mapper.getEntryForID("test user");
     assertNull(mappedEntry);
@@ -891,7 +892,7 @@
 
     mappedEntry = mapper.getEntryForID("test user");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
 
     // Change the configuration back to the way it was.
@@ -904,7 +905,7 @@
     // Verify that the original matching pattern is back.
     mappedEntry = mapper.getEntryForID("test");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
     mappedEntry = mapper.getEntryForID("test user");
     assertNull(mappedEntry);
@@ -923,7 +924,7 @@
          throws Exception
   {
     String mapperDNString = "cn=Exact Match,cn=Identity Mappers,cn=config";
-    DN mapperDN = DN.decode(mapperDNString);
+    DN mapperDN = DN.valueOf(mapperDNString);
     IdentityMapper mapper = DirectoryServer.getIdentityMapper(mapperDN);
     assertNotNull(mapper);
     assertTrue(mapper instanceof ExactMatchIdentityMapper);
@@ -954,7 +955,7 @@
     // Verify that we can retrieve the user.
     Entry mappedEntry = mapper.getEntryForID("test");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
 
     // Create a modification to set the map base DN to "dc=example,dc=com".
@@ -985,7 +986,7 @@
     // Verify that we can retrieve the user again.
     mappedEntry = mapper.getEntryForID("test");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
 
     // Change the configuration back to its original setting.
@@ -998,7 +999,7 @@
     // Verify that we can still retrieve the user.
     mappedEntry = mapper.getEntryForID("test");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
   }
 
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExternalSASLMechanismHandlerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExternalSASLMechanismHandlerTestCase.java
index 0786c2d..dc5e139 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExternalSASLMechanismHandlerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ExternalSASLMechanismHandlerTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012 Forgerock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -395,7 +395,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create(attrName, "always")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -423,7 +423,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create(attrName, "ifpresent")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -612,7 +612,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create(attrName, "always")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -637,7 +637,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create(attrName, "ifpresent")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -699,7 +699,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create(attrName, "always")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -727,7 +727,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create(attrName, "ifpresent")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FIFOEntryCacheTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FIFOEntryCacheTestCase.java
index e0d2a09..dd22808 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FIFOEntryCacheTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FIFOEntryCacheTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
@@ -293,7 +293,7 @@
       "Expected empty cache.  " + "Cache contents:" + ServerConstants.EOL +
       cache.toVerboseString());
 
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     for(int i = 0; i < super.NUMTESTENTRIES; i++ ) {
       super.cache.putEntry(super.testEntriesList.get(i), b, i);
@@ -365,7 +365,7 @@
       "Expected empty cache.  " + "Cache contents:" + ServerConstants.EOL +
       cache.toVerboseString());
 
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
 
     for(int i = 0; i < super.NUMTESTENTRIES; i++ ) {
       super.cache.putEntry(super.testEntriesList.get(i), b, i);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java
index 6d8b88a..606d756 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -517,7 +517,7 @@
       cache.toVerboseString());
 
     // Put some test entries in the cache.
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
     for(int i = 0; i < super.NUMTESTENTRIES; i++ ) {
       super.cache.putEntry(super.testEntriesList.get(i), b, i);
     }
@@ -560,7 +560,7 @@
     setupLRUCache();
 
     // Put some test entries in the cache.
-    Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=test"));
     for(int i = 0; i < super.NUMTESTENTRIES; i++) {
       super.cache.putEntry(super.testEntriesList.get(i), b, i);
       // Sacrifice one cache entry to support rotation.
@@ -620,7 +620,7 @@
     persistentCacheSetup();
 
     // Put some test entries in the cache.
-    Backend b = DirectoryServer.getBackend(DN.decode("o=cachetest"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=cachetest"));
     for(int i = 0; i < super.NUMTESTENTRIES; i++) {
       super.cache.putEntry(super.testEntriesList.get(i), b, i);
     }
@@ -672,7 +672,7 @@
     persistentCacheSetup();
 
     // Put some test entries in the cache.
-    Backend b = DirectoryServer.getBackend(DN.decode("o=cachetest"));
+    Backend b = DirectoryServer.getBackend(DN.valueOf("o=cachetest"));
     for(int i = 0; i < super.NUMTESTENTRIES; i++) {
       super.cache.putEntry(super.testEntriesList.get(i), b, i);
     }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FingerprintCertificateMapperTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FingerprintCertificateMapperTestCase.java
index 64dcc5e..7075707 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FingerprintCertificateMapperTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/FingerprintCertificateMapperTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -460,7 +460,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertFalse(modifyOperation.getResultCode() == ResultCode.SUCCESS);
   }
 
@@ -488,7 +488,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertFalse(modifyOperation.getResultCode() == ResultCode.SUCCESS);
   }
 
@@ -558,7 +558,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(externalDN), mods);
+         conn.processModify(DN.valueOf(externalDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -584,7 +584,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(externalDN), mods);
+         conn.processModify(DN.valueOf(externalDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -612,7 +612,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -639,7 +639,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -679,7 +679,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProviderTestCase.java
index e4be8dd..420ad1b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProviderTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -144,8 +144,8 @@
   {
     return new Object[][]
     {
-      new Object[] { DN.decode("o=test") },
-      new Object[] { DN.decode("dc=example,dc=com") }
+      new Object[] { DN.valueOf("o=test") },
+      new Object[] { DN.valueOf("dc=example,dc=com") }
     };
   }
 
@@ -165,8 +165,8 @@
          throws Exception
   {
     return new Object[][] {
-        {DN.decode("o=test"), "22"},
-        {DN.decode("dc=example,dc=com"), "21"},
+        {DN.valueOf("o=test"), "22"},
+        {DN.valueOf("dc=example,dc=com"), "21"},
     };
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/HasSubordinatesVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/HasSubordinatesVirtualAttributeProviderTestCase.java
index 63e3d64..a61bc45 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/HasSubordinatesVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/HasSubordinatesVirtualAttributeProviderTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -182,20 +182,20 @@
   {
     return new Object[][]
     {
-      new Object[] { DN.decode("dc=example,dc=com"), true },
-      new Object[] { DN.decode("ou=People,dc=example,dc=com"), true },
-      new Object[] { DN.decode("ou=Employees,ou=People,dc=example,dc=com"), true },
-      new Object[] { DN.decode("ou=Buildings,dc=example,dc=com"), false },
-      new Object[] { DN.decode("uid=user.0,ou=People,dc=example,dc=com"), false },
-      new Object[] { DN.decode("uid=user.1,ou=People,dc=example,dc=com"), false },
-      new Object[] { DN.decode("uid=user.2,ou=Employees,ou=People" +
+      new Object[] { DN.valueOf("dc=example,dc=com"), true },
+      new Object[] { DN.valueOf("ou=People,dc=example,dc=com"), true },
+      new Object[] { DN.valueOf("ou=Employees,ou=People,dc=example,dc=com"), true },
+      new Object[] { DN.valueOf("ou=Buildings,dc=example,dc=com"), false },
+      new Object[] { DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"), false },
+      new Object[] { DN.valueOf("uid=user.1,ou=People,dc=example,dc=com"), false },
+      new Object[] { DN.valueOf("uid=user.2,ou=Employees,ou=People" +
             ",dc=example,dc=com"), false },
-      new Object[] { DN.decode("cn=monitor"), true },
-      new Object[] { DN.decode("cn=Backends,cn=config"), true },
-      new Object[] { DN.decode("cn=Work Queue,cn=config"), false },
-      new Object[] { DN.decode("cn=tasks"), true },
-      new Object[] { DN.decode("cn=Recurring Tasks,cn=tasks"), false },
-      new Object[] { DN.decode("cn=backups"), false }
+      new Object[] { DN.valueOf("cn=monitor"), true },
+      new Object[] { DN.valueOf("cn=Backends,cn=config"), true },
+      new Object[] { DN.valueOf("cn=Work Queue,cn=config"), false },
+      new Object[] { DN.valueOf("cn=tasks"), true },
+      new Object[] { DN.valueOf("cn=Recurring Tasks,cn=tasks"), false },
+      new Object[] { DN.valueOf("cn=backups"), false }
     };
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java
index 9d482b8..cfd9b87 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProviderTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -134,7 +134,7 @@
       "member: uid=test.user,ou=People,o=test");
 
     Entry e =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
     assertNotNull(e);
     assertTrue(e.hasAttribute(isMemberOfType));
     for (Attribute a : e.getAttribute(isMemberOfType))
@@ -152,7 +152,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test static group,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test static group,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -200,7 +200,7 @@
       "uniqueMember: uid=test.user,ou=People,o=test");
 
     Entry e =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
     assertNotNull(e);
     assertTrue(e.hasAttribute(isMemberOfType));
     for (Attribute a : e.getAttribute(isMemberOfType))
@@ -218,7 +218,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test static group,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test static group,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -265,7 +265,7 @@
       "memberURL: ldap:///ou=People,o=test??sub?(sn=user)");
 
     Entry e =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
     assertNotNull(e);
     assertTrue(e.hasAttribute(isMemberOfType));
     for (Attribute a : e.getAttribute(isMemberOfType))
@@ -284,7 +284,7 @@
          InternalClientConnection.getRootConnection();
     DeleteOperation deleteOperation =
          conn.processDelete(
-              DN.decode("cn=test dynamic group,ou=groups,o=test"));
+              DN.valueOf("cn=test dynamic group,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -355,7 +355,7 @@
       "member: uid=test.user2,ou=People,o=test");
 
     Entry e =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
     assertNotNull(e);
     assertTrue(e.hasAttribute(isMemberOfType));
     for (Attribute a : e.getAttribute(isMemberOfType))
@@ -377,15 +377,15 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 1,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 1,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 2,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 2,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 3,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 3,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -474,7 +474,7 @@
       "memberURL: ldap:///o=test??sub?(givenName=test)");
 
     Entry e =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
     assertNotNull(e);
     assertTrue(e.hasAttribute(isMemberOfType));
     for (Attribute a : e.getAttribute(isMemberOfType))
@@ -502,27 +502,27 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 1,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 1,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 2,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 2,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 3,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 3,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 4,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 4,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 5,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 5,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 6,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 6,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -581,7 +581,7 @@
       "member: uid=test.user,ou=People,o=test");
 
     Entry e =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
 
     IsMemberOfVirtualAttributeProvider provider =
          new IsMemberOfVirtualAttributeProvider();
@@ -599,7 +599,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test static group,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test static group,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -646,7 +646,7 @@
       "member: uid=test.user,ou=People,o=test");
 
     Entry e =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
 
     IsMemberOfVirtualAttributeProvider provider =
          new IsMemberOfVirtualAttributeProvider();
@@ -667,7 +667,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test static group,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test static group,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -714,7 +714,7 @@
       "member: uid=test.user,ou=People,o=test");
 
     Entry e =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
 
     IsMemberOfVirtualAttributeProvider provider =
          new IsMemberOfVirtualAttributeProvider();
@@ -735,7 +735,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test static group,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test static group,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -782,7 +782,7 @@
       "member: uid=test.user,ou=People,o=test");
 
     Entry e =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
 
     IsMemberOfVirtualAttributeProvider provider =
          new IsMemberOfVirtualAttributeProvider();
@@ -805,7 +805,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test static group,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test static group,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -852,7 +852,7 @@
       "member: uid=test.user,ou=People,o=test");
 
     Entry e =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
 
     IsMemberOfVirtualAttributeProvider provider =
          new IsMemberOfVirtualAttributeProvider();
@@ -875,7 +875,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test static group,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test static group,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1121,7 +1121,7 @@
                                      InternalClientConnection.nextOperationID(),
                                      InternalClientConnection.nextMessageID(),
                                      null,
-                                     DN.decode("o=test"),
+                                     DN.valueOf("o=test"),
                                      SearchScope.WHOLE_SUBTREE,
                                      DereferencePolicy.NEVER_DEREF_ALIASES, 0,
                                      0, false, filter, null, null);
@@ -1230,7 +1230,7 @@
       "member: uid=test.user3,ou=People,o=test");
 
     Entry userEntry =
-         DirectoryServer.getEntry(DN.decode("uid=test.user,ou=People,o=test"));
+         DirectoryServer.getEntry(DN.valueOf("uid=test.user,ou=People,o=test"));
     assertNotNull(userEntry);
 
     IsMemberOfVirtualAttributeProvider provider =
@@ -1253,7 +1253,7 @@
                                      InternalClientConnection.nextOperationID(),
                                      InternalClientConnection.nextMessageID(),
                                      null,
-                                     DN.decode("o=test"),
+                                     DN.valueOf("o=test"),
                                      SearchScope.WHOLE_SUBTREE,
                                      DereferencePolicy.NEVER_DEREF_ALIASES, 0,
                                      0, false, filter, null, null);
@@ -1278,19 +1278,19 @@
     assertEquals(matchFound, shouldMatch);
 
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 1,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 1,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 2,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 2,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 3,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 3,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation =
-         conn.processDelete(DN.decode("cn=test group 4,ou=groups,o=test"));
+         conn.processDelete(DN.valueOf("cn=test group 4,ou=groups,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1334,7 +1334,7 @@
     TestCaseUtils.addEntries(builder.toString());
     //Verify the entry.
     Entry e =
-         DirectoryServer.getEntry(DN.decode("cn=user.0,ou=People"+SUFFIX));
+         DirectoryServer.getEntry(DN.valueOf("cn=user.0,ou=People"+SUFFIX));
     assertNotNull(e);
     //Do an ldapsearch.
     InternalClientConnection conn =
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyTestCase.java
index b4b9f62..d5d4915 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -591,7 +592,7 @@
     {
       try
       {
-        baseDNs.add(DN.decode(baseDN));
+        baseDNs.add(DN.valueOf(baseDN));
       }
       catch (final DirectoryException e)
       {
@@ -754,7 +755,7 @@
     {
       try
       {
-        return DN.decode("cn=Salted SHA-1,cn=Password Storage Schemes,cn=config");
+        return DN.valueOf("cn=Salted SHA-1,cn=Password Storage Schemes,cn=config");
       }
       catch (DirectoryException e)
       {
@@ -1614,9 +1615,9 @@
   {
     TestCaseUtils.startServer();
 
-    policyDN = DN.decode(policyDNString);
-    trustManagerDN = DN.decode(trustManagerDNString);
-    searchBindDN = DN.decode(searchBindDNString);
+    policyDN = DN.valueOf(policyDNString);
+    trustManagerDN = DN.valueOf(trustManagerDNString);
+    searchBindDN = DN.valueOf(searchBindDNString);
     userEntry = TestCaseUtils.makeEntry(
         /* @formatter:off */
         "dn: " + opendjDNString,
@@ -4327,7 +4328,7 @@
 
     // Check that the password has been cached if needed.
     Entry updatedTestUser = DirectoryServer.getEntry(DN
-        .decode("cn=test user,o=test"));
+        .valueOf("cn=test user,o=test"));
 
     String newCachedPassword = updatedTestUser.getAttributeValue(
         DirectoryServer.getAttributeType("ds-pta-cached-password"),
@@ -4411,7 +4412,7 @@
   SearchResultEntryProtocolOp newSearchEntry(final String dn)
       throws DirectoryException
   {
-    return new SearchResultEntryProtocolOp(DN.decode(dn));
+    return new SearchResultEntryProtocolOp(DN.valueOf(dn));
   }
 
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java
index 10519c0..696ea5e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -371,7 +372,7 @@
       ModifyOperationBasis op =
            new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
-                               DN.decode("cn=uid=test.user,o=test"), mods);
+                               DN.valueOf("cn=uid=test.user,o=test"), mods);
 
       MessageBuilder invalidReason = new MessageBuilder();
       assertTrue(validator.passwordIsAcceptable(password,
@@ -444,7 +445,7 @@
       ModifyOperationBasis op =
            new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
-                               DN.decode("cn=uid=test.user,o=test"), mods);
+                               DN.valueOf("cn=uid=test.user,o=test"), mods);
 
       MessageBuilder invalidReason = new MessageBuilder();
       assertEquals((buffer.length() >= 10),
@@ -519,7 +520,7 @@
       ModifyOperationBasis op =
            new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
-                               DN.decode("cn=uid=test.user,o=test"), mods);
+                               DN.valueOf("cn=uid=test.user,o=test"), mods);
 
       MessageBuilder invalidReason = new MessageBuilder();
       assertEquals((buffer.length() <= 10),
@@ -594,7 +595,7 @@
       ModifyOperationBasis op =
            new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
-                               DN.decode("cn=uid=test.user,o=test"), mods);
+                               DN.valueOf("cn=uid=test.user,o=test"), mods);
 
       MessageBuilder invalidReason = new MessageBuilder();
       assertEquals(((buffer.length() >= 6) && (buffer.length() <= 10)),
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProviderTestCase.java
index 6e2c7ad..6e16421 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProviderTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -183,22 +183,22 @@
   {
     return new Object[][]
     {
-      new Object[] { DN.decode("dc=example,dc=com"), 2 },
-      new Object[] { DN.decode("ou=People,dc=example,dc=com"), 3 },
-      new Object[] { DN.decode("ou=Employees,ou=People,dc=example,dc=com"), 1 },
-      new Object[] { DN.decode("ou=Buildings,dc=example,dc=com"), 0 },
-      new Object[] { DN.decode("uid=user.0,ou=People,dc=example,dc=com"), 0 },
-      new Object[] { DN.decode("uid=user.1,ou=People,dc=example,dc=com"), 0 },
-      new Object[] { DN.decode("uid=user.2,ou=Employees,ou=People" +
+      new Object[] { DN.valueOf("dc=example,dc=com"), 2 },
+      new Object[] { DN.valueOf("ou=People,dc=example,dc=com"), 3 },
+      new Object[] { DN.valueOf("ou=Employees,ou=People,dc=example,dc=com"), 1 },
+      new Object[] { DN.valueOf("ou=Buildings,dc=example,dc=com"), 0 },
+      new Object[] { DN.valueOf("uid=user.0,ou=People,dc=example,dc=com"), 0 },
+      new Object[] { DN.valueOf("uid=user.1,ou=People,dc=example,dc=com"), 0 },
+      new Object[] { DN.valueOf("uid=user.2,ou=Employees,ou=People" +
                                ",dc=example,dc=com"), 0 },
 //      new Object[] { DN.decode("cn=monitor"),
 //          DirectoryServer.getMonitorProviders().size() },
 // Disable test on # of backends. Some might be disabled, falsing count.
 //      new Object[] { DN.decode("cn=Backends,cn=config"),
 //          DirectoryServer.getBackends().size() },
-      new Object[] { DN.decode("cn=Work Queue,cn=config"), 0 },
-      new Object[] { DN.decode("cn=tasks"), 2 },
-      new Object[] { DN.decode("cn=backups"), 0 }
+      new Object[] { DN.valueOf("cn=Work Queue,cn=config"), 0 },
+      new Object[] { DN.valueOf("cn=tasks"), 2 },
+      new Object[] { DN.valueOf("cn=backups"), 0 }
     };
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordModifyExtendedOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordModifyExtendedOperationTestCase.java
index cb8858a..d848cdc 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordModifyExtendedOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordModifyExtendedOperationTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
@@ -188,7 +188,7 @@
     InternalClientConnection conn =
          new InternalClientConnection(new AuthenticationInfo());
     BindOperation bindOperation =
-         conn.processSimpleBind(DN.decode("cn=Directory Manager"),
+         conn.processSimpleBind(DN.valueOf("cn=Directory Manager"),
                                 ByteString.valueOf("newPassword"));
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
 
@@ -245,7 +245,7 @@
     InternalClientConnection conn =
          new InternalClientConnection(new AuthenticationInfo());
     BindOperation bindOperation =
-         conn.processSimpleBind(DN.decode("cn=Directory Manager"),
+         conn.processSimpleBind(DN.valueOf("cn=Directory Manager"),
                                 ByteString.valueOf("newPassword"));
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
 
@@ -301,7 +301,7 @@
     InternalClientConnection conn =
          new InternalClientConnection(new AuthenticationInfo());
     BindOperation bindOperation =
-         conn.processSimpleBind(DN.decode("cn=Directory Manager"),
+         conn.processSimpleBind(DN.valueOf("cn=Directory Manager"),
                                 ByteString.valueOf("newPassword"));
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
 
@@ -1244,7 +1244,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "true")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -1267,7 +1267,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "false")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1314,7 +1314,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create(attr, "false")));
     ModifyOperation modifyOperation =
-        conn.processModify(DN.decode(dnStr), mods);
+        conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
     String[] args =
@@ -1376,7 +1376,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create(attr, "false")));
     ModifyOperation modifyOperation =
-        conn.processModify(DN.decode(dnStr), mods);
+        conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
     String[] args =
@@ -1504,7 +1504,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "false")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -1526,7 +1526,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "true")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1572,7 +1572,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "false")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -1595,7 +1595,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "true")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1641,7 +1641,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "true")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -1664,7 +1664,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "false")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1710,7 +1710,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "true")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -1732,7 +1732,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "false")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1778,7 +1778,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "true")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -1800,7 +1800,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "false")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1846,7 +1846,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "true")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -1869,7 +1869,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "false")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1915,7 +1915,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "24 hours")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -1936,7 +1936,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "0 seconds")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1982,7 +1982,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "24 hours")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2004,7 +2004,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "0 seconds")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -2055,7 +2055,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr2, "true")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2086,7 +2086,7 @@
                               Attributes.create(attr1, "0 seconds")));
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr2, "false")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -2140,7 +2140,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr3, "true")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2174,7 +2174,7 @@
                               Attributes.create(attr2, "false")));
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr3, "false")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -2222,7 +2222,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                       Attributes.empty(DirectoryServer.getAttributeType(attr))));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2244,7 +2244,7 @@
          "cn=Random Password Generator,cn=Password Generators,cn=config";
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, genDN)));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -2292,7 +2292,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                       Attributes.empty(DirectoryServer.getAttributeType(attr))));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2314,7 +2314,7 @@
          "cn=Random Password Generator,cn=Password Generators,cn=config";
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, genDN)));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -2363,7 +2363,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, valDN)));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2384,7 +2384,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                       Attributes.empty(DirectoryServer.getAttributeType(attr))));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -2433,7 +2433,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, valDN)));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2454,7 +2454,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                       Attributes.empty(DirectoryServer.getAttributeType(attr))));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -2495,7 +2495,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "true")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2526,7 +2526,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "false")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -2570,7 +2570,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "true")));
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(dnStr), mods);
+         conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2601,7 +2601,7 @@
     mods.clear();
     mods.add(new Modification(ModificationType.REPLACE,
                               Attributes.create(attr, "false")));
-    modifyOperation = conn.processModify(DN.decode(dnStr), mods);
+    modifyOperation = conn.processModify(DN.valueOf(dnStr), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -2654,7 +2654,7 @@
            DirectoryServer.getAttributeType("ds-pwp-last-login-time", false);
       assertNotNull(lastLoginTimeAttr);
 
-      DN userDN = DN.decode("uid=test.user,o=test");
+      DN userDN = DN.valueOf("uid=test.user,o=test");
       Entry userEntry = DirectoryServer.getEntry(userDN);
       assertNotNull(userEntry);
       assertFalse(userEntry.hasAttribute(lastLoginTimeAttr));
@@ -2726,7 +2726,7 @@
            DirectoryServer.getAttributeType("pwdfailuretime", false);
       assertNotNull(authFailureTimesAttr);
 
-      DN userDN = DN.decode("uid=test.user,o=test");
+      DN userDN = DN.valueOf("uid=test.user,o=test");
       Entry userEntry = DirectoryServer.getEntry(userDN);
       assertNotNull(userEntry);
       assertFalse(userEntry.hasAttribute(authFailureTimesAttr));
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordStorageSchemeTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordStorageSchemeTestCase.java
index 3c0d5fd..38c79f7 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordStorageSchemeTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordStorageSchemeTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2010-2011 ForgeRock AS.
+ *      Portions Copyright 2010-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
@@ -99,7 +99,7 @@
 
     if (configDNString != null)
     {
-      configEntry = DirectoryServer.getConfigEntry(DN.decode(configDNString));
+      configEntry = DirectoryServer.getConfigEntry(DN.valueOf(configDNString));
     }
   }
 
@@ -308,7 +308,7 @@
     // PasswordPolicyTestCase.testAllowPreEncodedPasswordsAuth
     boolean previousValue = false;
     try {
-      DN dn = DN.decode("cn=Default Password Policy,cn=Password Policies,cn=config");
+      DN dn = DN.valueOf("cn=Default Password Policy,cn=Password Policies,cn=config");
       PasswordPolicy p = (PasswordPolicy) DirectoryServer.getAuthenticationPolicy(dn);
       previousValue = p.isAllowPreEncodedPasswords();
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RandomPasswordGeneratorTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RandomPasswordGeneratorTestCase.java
index 4824495..2a0187d 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RandomPasswordGeneratorTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RandomPasswordGeneratorTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -77,7 +78,7 @@
   public void testDefaultConfiguration()
          throws Exception
   {
-    DN dn = DN.decode("cn=Random Password Generator,cn=Password Generators," +
+    DN dn = DN.valueOf("cn=Random Password Generator,cn=Password Generators," +
                       "cn=config");
     ConfigEntry configEntry = DirectoryServer.getConfigEntry(dn);
     assertNotNull(configEntry);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java
index 8581df4..cfdafc3 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -81,7 +82,7 @@
          throws Exception
   {
     DN mapperDN =
-         DN.decode("cn=Regular Expression,cn=Identity Mappers,cn=config");
+         DN.valueOf("cn=Regular Expression,cn=Identity Mappers,cn=config");
     IdentityMapper mapper = DirectoryServer.getIdentityMapper(mapperDN);
     assertNotNull(mapper);
     assertTrue(mapper instanceof RegularExpressionIdentityMapper);
@@ -222,7 +223,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("test@example.com");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
     mapper.finalizeIdentityMapper();
   }
@@ -287,7 +288,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("test@example.com");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
     mapper.finalizeIdentityMapper();
   }
@@ -352,7 +353,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("test@example.com");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
     mapper.finalizeIdentityMapper();
   }
@@ -482,7 +483,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("test@example.com");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
     mapper.finalizeIdentityMapper();
   }
@@ -546,7 +547,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("test");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
     mapper.finalizeIdentityMapper();
   }
@@ -608,7 +609,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("test@example.com");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test,o=test"));
 
     mapper.finalizeIdentityMapper();
   }
@@ -671,7 +672,7 @@
     // successfully.
     Entry mappedEntry = mapper.getEntryForID("test");
     assertNotNull(mappedEntry);
-    assertEquals(mappedEntry.getDN(), DN.decode("uid=test@example.com,o=test"));
+    assertEquals(mappedEntry.getDN(), DN.valueOf("uid=test@example.com,o=test"));
 
     mapper.finalizeIdentityMapper();
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java
index 0be043f..144b6ea 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -318,7 +319,7 @@
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
@@ -387,7 +388,7 @@
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
@@ -455,7 +456,7 @@
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
@@ -524,7 +525,7 @@
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
@@ -591,7 +592,7 @@
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
@@ -659,7 +660,7 @@
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java
index fe708a1..d593dfe 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -292,7 +293,7 @@
       ModifyOperationBasis op =
            new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
-                               DN.decode("cn=uid=test.user,o=test"), mods);
+                               DN.valueOf("cn=uid=test.user,o=test"), mods);
 
       MessageBuilder invalidReason = new MessageBuilder();
       assertTrue(validator.passwordIsAcceptable(password,
@@ -368,7 +369,7 @@
       ModifyOperationBasis op =
            new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
-                               DN.decode("cn=uid=test.user,o=test"), mods);
+                               DN.valueOf("cn=uid=test.user,o=test"), mods);
 
       MessageBuilder invalidReason = new MessageBuilder();
       assertEquals((buffer.length() >= 6),
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProviderTestCase.java
index bb20ff6..f87a882 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProviderTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -107,14 +107,14 @@
   {
     return new Object[][]
     {
-      new Object[] { DN.decode("") },
-      new Object[] { DN.decode("o=test") },
-      new Object[] { DN.decode("dc=example,dc=com") },
-      new Object[] { DN.decode("cn=config") },
-      new Object[] { DN.decode("cn=schema") },
-      new Object[] { DN.decode("cn=tasks") },
-      new Object[] { DN.decode("cn=monitor") },
-      new Object[] { DN.decode("cn=backups") }
+      new Object[] { DN.valueOf("") },
+      new Object[] { DN.valueOf("o=test") },
+      new Object[] { DN.valueOf("dc=example,dc=com") },
+      new Object[] { DN.valueOf("cn=config") },
+      new Object[] { DN.valueOf("cn=schema") },
+      new Object[] { DN.valueOf("cn=tasks") },
+      new Object[] { DN.valueOf("cn=monitor") },
+      new Object[] { DN.valueOf("cn=backups") }
     };
   }
 
@@ -134,8 +134,8 @@
          throws Exception
   {
     return new Object[][] {
-        {DN.decode("o=test"), "structuralObjectClass=organization"},
-        {DN.decode("dc=example,dc=com"), "structuralObjectClass=domain"},
+        {DN.valueOf("o=test"), "structuralObjectClass=organization"},
+        {DN.valueOf("dc=example,dc=com"), "structuralObjectClass=domain"},
     };
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapperTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapperTestCase.java
index 011c5e4..d58fe71 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapperTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapperTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  *      Portions Copyright 2013 Manuel Gaupp
  */
 package org.opends.server.extensions;
@@ -747,7 +747,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertFalse(modifyOperation.getResultCode() == ResultCode.SUCCESS);
   }
 
@@ -878,7 +878,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(externalDN), mods);
+         conn.processModify(DN.valueOf(externalDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -904,7 +904,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(externalDN), mods);
+         conn.processModify(DN.valueOf(externalDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -944,7 +944,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -985,7 +985,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapperTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapperTestCase.java
index c98f881..8abe273 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapperTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapperTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -558,7 +558,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertFalse(modifyOperation.getResultCode() == ResultCode.SUCCESS);
   }
 
@@ -614,7 +614,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(externalDN), mods);
+         conn.processModify(DN.valueOf(externalDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -640,7 +640,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(externalDN), mods);
+         conn.processModify(DN.valueOf(externalDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -669,7 +669,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -710,7 +710,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode(mapperDN), mods);
+         conn.processModify(DN.valueOf(mapperDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProviderTestCase.java
index 0b746aa..c6ff209 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProviderTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -106,14 +106,14 @@
   {
     return new Object[][]
     {
-      new Object[] { DN.decode("") },
-      new Object[] { DN.decode("o=test") },
-      new Object[] { DN.decode("dc=example,dc=com") },
-      new Object[] { DN.decode("cn=config") },
-      new Object[] { DN.decode("cn=schema") },
-      new Object[] { DN.decode("cn=tasks") },
-      new Object[] { DN.decode("cn=monitor") },
-      new Object[] { DN.decode("cn=backups") }
+      new Object[] { DN.valueOf("") },
+      new Object[] { DN.valueOf("o=test") },
+      new Object[] { DN.valueOf("dc=example,dc=com") },
+      new Object[] { DN.valueOf("cn=config") },
+      new Object[] { DN.valueOf("cn=schema") },
+      new Object[] { DN.valueOf("cn=tasks") },
+      new Object[] { DN.valueOf("cn=monitor") },
+      new Object[] { DN.valueOf("cn=backups") }
     };
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestAlertGenerator.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestAlertGenerator.java
index b170b7e..4459633 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestAlertGenerator.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestAlertGenerator.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -68,7 +69,7 @@
   public TestAlertGenerator()
          throws Exception
   {
-    configEntryDN    = DN.decode("cn=Test Alert Generator,cn=config");
+    configEntryDN    = DN.valueOf("cn=Test Alert Generator,cn=config");
     alertType        = "org.opends.server.TestAlert";
     alertDescription = "This is a test alert.";
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TraditionalWorkQueueTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TraditionalWorkQueueTestCase.java
index 7dd7d6d..939e629 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TraditionalWorkQueueTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TraditionalWorkQueueTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -100,7 +100,7 @@
   public void testChangingNumWorkerThreads()
          throws Exception
   {
-    DN     dn   = DN.decode("cn=Work Queue,cn=config");
+    DN     dn   = DN.valueOf("cn=Work Queue,cn=config");
     String attr = "ds-cfg-num-worker-threads";
     ArrayList<Modification> mods = new ArrayList<Modification>();
     mods.add(new Modification(ModificationType.REPLACE,
@@ -202,7 +202,7 @@
     InternalSearchOperation searchOperation =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                      InternalClientConnection.nextMessageID(),requestControls,
-                                     DN.decode("o=test"),
+                                     DN.valueOf("o=test"),
                                      SearchScope.BASE_OBJECT,
                                      DereferencePolicy.NEVER_DEREF_ALIASES, 0,
                                      0, false, filter, attrs, null);
@@ -239,7 +239,7 @@
     InternalSearchOperation searchOperation =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                      InternalClientConnection.nextMessageID(), requestControls,
-                                     DN.decode("o=test"),
+                                     DN.valueOf("o=test"),
                                      SearchScope.BASE_OBJECT,
                                      DereferencePolicy.NEVER_DEREF_ALIASES, 0,
                                      0, false, filter, attrs, null);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java
index 77996a0..1c9d7be 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -318,7 +319,7 @@
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
@@ -387,7 +388,7 @@
       new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
@@ -455,7 +456,7 @@
       new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
@@ -524,7 +525,7 @@
       new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
@@ -591,7 +592,7 @@
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
@@ -659,7 +660,7 @@
          new ModifyOperationBasis(conn, InternalClientConnection.nextOperationID(),
                              InternalClientConnection.nextMessageID(),
                              new ArrayList<Control>(),
-                             DN.decode("uid=test.user,o=test"), mods);
+                             DN.valueOf("uid=test.user,o=test"), mods);
 
     MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProviderTestCase.java
index 7f91c4d..9ddbf03 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProviderTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -119,7 +119,7 @@
       InternalSearchOperation searchOperation =
           new InternalSearchOperation(conn, InternalClientConnection
               .nextOperationID(), InternalClientConnection
-              .nextMessageID(), null, DN.decode(ruleDN),
+              .nextMessageID(), null, DN.valueOf(ruleDN),
               SearchScope.BASE_OBJECT,
               DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
               SearchFilter.createFilterFromString("(objectClass=*)"),
@@ -147,7 +147,7 @@
     finally
     {
       DeleteOperation deleteOperation =
-          conn.processDelete(DN.decode(ruleDN));
+          conn.processDelete(DN.valueOf(ruleDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -187,7 +187,7 @@
       InternalSearchOperation searchOperation =
           new InternalSearchOperation(conn, InternalClientConnection
               .nextOperationID(), InternalClientConnection
-              .nextMessageID(), null, DN.decode(ruleDN),
+              .nextMessageID(), null, DN.valueOf(ruleDN),
               SearchScope.BASE_OBJECT,
               DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
               SearchFilter.createFilterFromString("(objectClass=*)"),
@@ -214,7 +214,7 @@
     finally
     {
       DeleteOperation deleteOperation =
-          conn.processDelete(DN.decode(ruleDN));
+          conn.processDelete(DN.valueOf(ruleDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -267,7 +267,7 @@
     try
     {
       InternalSearchOperation searchOperation =
-          conn.processSearch(DN.decode(userDN),
+          conn.processSearch(DN.valueOf(userDN),
               SearchScope.BASE_OBJECT, SearchFilter
                   .createFilterFromString("(objectClass=*)"));
 
@@ -285,7 +285,7 @@
     finally
     {
       DeleteOperation deleteOperation =
-          conn.processDelete(DN.decode(ruleDN));
+          conn.processDelete(DN.valueOf(ruleDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -340,7 +340,7 @@
     try
     {
       InternalSearchOperation searchOperation =
-          conn.processSearch(DN.decode(userDN),
+          conn.processSearch(DN.valueOf(userDN),
               SearchScope.BASE_OBJECT, SearchFilter
                   .createFilterFromString("(objectClass=*)"));
 
@@ -360,7 +360,7 @@
     finally
     {
       DeleteOperation deleteOperation =
-          conn.processDelete(DN.decode(ruleDN));
+          conn.processDelete(DN.valueOf(ruleDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -415,7 +415,7 @@
     try
     {
       InternalSearchOperation searchOperation =
-          conn.processSearch(DN.decode(userDN),
+          conn.processSearch(DN.valueOf(userDN),
               SearchScope.BASE_OBJECT, SearchFilter
                   .createFilterFromString("(objectClass=*)"));
 
@@ -433,7 +433,7 @@
     finally
     {
       DeleteOperation deleteOperation =
-          conn.processDelete(DN.decode(ruleDN));
+          conn.processDelete(DN.valueOf(ruleDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -488,7 +488,7 @@
     try
     {
       InternalSearchOperation searchOperation =
-          conn.processSearch(DN.decode(userDN),
+          conn.processSearch(DN.valueOf(userDN),
               SearchScope.BASE_OBJECT, SearchFilter
                   .createFilterFromString("(objectClass=*)"));
 
@@ -506,7 +506,7 @@
     finally
     {
       DeleteOperation deleteOperation =
-          conn.processDelete(DN.decode(ruleDN));
+          conn.processDelete(DN.valueOf(ruleDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -561,7 +561,7 @@
     try
     {
       InternalSearchOperation searchOperation =
-          conn.processSearch(DN.decode(userDN),
+          conn.processSearch(DN.valueOf(userDN),
               SearchScope.BASE_OBJECT, SearchFilter
                   .createFilterFromString("(objectClass=*)"));
 
@@ -583,7 +583,7 @@
     finally
     {
       DeleteOperation deleteOperation =
-          conn.processDelete(DN.decode(ruleDN));
+          conn.processDelete(DN.valueOf(ruleDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -645,7 +645,7 @@
       attributes.add("description");
 
       InternalSearchOperation searchOperation =
-          conn.processSearch(DN.decode(userDN),
+          conn.processSearch(DN.valueOf(userDN),
               SearchScope.BASE_OBJECT,
               DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
               SearchFilter.createFilterFromString("(objectClass=*)"),
@@ -668,7 +668,7 @@
     finally
     {
       DeleteOperation deleteOperation =
-          conn.processDelete(DN.decode(ruleDN));
+          conn.processDelete(DN.valueOf(ruleDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -780,10 +780,10 @@
           InternalClientConnection.getRootConnection();
 
       DeleteOperation deleteOperation =
-          conn.processDelete(DN.decode(ruleDN));
+          conn.processDelete(DN.valueOf(ruleDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
-      deleteOperation = conn.processDelete(DN.decode(policyDN));
+      deleteOperation = conn.processDelete(DN.valueOf(policyDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -867,7 +867,7 @@
           InternalClientConnection.getRootConnection();
 
       DeleteOperation deleteOperation =
-          conn.processDelete(DN.decode(ruleDN));
+          conn.processDelete(DN.valueOf(ruleDN));
       assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/VirtualStaticGroupTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/VirtualStaticGroupTestCase.java
index 7997082..1bb17cd 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/VirtualStaticGroupTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/VirtualStaticGroupTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -258,24 +258,24 @@
 
     groupManager = DirectoryServer.getGroupManager();
 
-    u1 = DN.decode("uid=test.1,ou=People,o=test");
-    u2 = DN.decode("uid=test.2,ou=People,o=test");
-    u3 = DN.decode("uid=test.3,ou=People,o=test");
-    u4 = DN.decode("uid=test.4,ou=People,o=test");
-    da = DN.decode("cn=Dynamic All Users,ou=Groups,o=test");
-    d1 = DN.decode("cn=Dynamic One User,ou=Groups,o=test");
-    sm = DN.decode("cn=Static member List,ou=Groups,o=test");
-    su = DN.decode("cn=Static uniqueMember List,ou=Groups,o=test");
-    vmda = DN.decode("cn=Virtual member All Users,ou=Groups,o=test");
-    vuda = DN.decode("cn=Virtual uniqueMember All Users,ou=Groups,o=test");
-    vmd1 = DN.decode("cn=Virtual member One User,ou=Groups,o=test");
-    vud1 = DN.decode("cn=Virtual uniqueMember One User,ou=Groups,o=test");
-    vsm = DN.decode("cn=Virtual Static member List,ou=Groups,o=test");
-    vsu = DN.decode("cn=Virtual Static uniqueMember List,ou=Groups,o=test");
-    vcm = DN.decode("cn=Crossover member Static Group,ou=Groups,o=test");
-    vcu = DN.decode("cn=Crossover uniqueMember Static Group,ou=Groups,o=test");
-    vn = DN.decode("cn=Virtual Nonexistent,ou=Groups,o=test");
-    ne = DN.decode("cn=Nonexistent,ou=Groups,o=test");
+    u1 = DN.valueOf("uid=test.1,ou=People,o=test");
+    u2 = DN.valueOf("uid=test.2,ou=People,o=test");
+    u3 = DN.valueOf("uid=test.3,ou=People,o=test");
+    u4 = DN.valueOf("uid=test.4,ou=People,o=test");
+    da = DN.valueOf("cn=Dynamic All Users,ou=Groups,o=test");
+    d1 = DN.valueOf("cn=Dynamic One User,ou=Groups,o=test");
+    sm = DN.valueOf("cn=Static member List,ou=Groups,o=test");
+    su = DN.valueOf("cn=Static uniqueMember List,ou=Groups,o=test");
+    vmda = DN.valueOf("cn=Virtual member All Users,ou=Groups,o=test");
+    vuda = DN.valueOf("cn=Virtual uniqueMember All Users,ou=Groups,o=test");
+    vmd1 = DN.valueOf("cn=Virtual member One User,ou=Groups,o=test");
+    vud1 = DN.valueOf("cn=Virtual uniqueMember One User,ou=Groups,o=test");
+    vsm = DN.valueOf("cn=Virtual Static member List,ou=Groups,o=test");
+    vsu = DN.valueOf("cn=Virtual Static uniqueMember List,ou=Groups,o=test");
+    vcm = DN.valueOf("cn=Crossover member Static Group,ou=Groups,o=test");
+    vcu = DN.valueOf("cn=Crossover uniqueMember Static Group,ou=Groups,o=test");
+    vn = DN.valueOf("cn=Virtual Nonexistent,ou=Groups,o=test");
+    ne = DN.valueOf("cn=Nonexistent,ou=Groups,o=test");
   }
 
 
@@ -408,7 +408,7 @@
     assertFalse(memberList.hasMoreMembers());
 
     SearchFilter filter = SearchFilter.createFilterFromString("(sn=1)");
-    memberList = g.getMembers(DN.decode("o=test"), SearchScope.WHOLE_SUBTREE,
+    memberList = g.getMembers(DN.valueOf("o=test"), SearchScope.WHOLE_SUBTREE,
                               filter);
     assertTrue(memberList.hasMoreMembers());
     assertNotNull(memberList.nextMemberDN());
@@ -492,7 +492,7 @@
     try
     {
       SearchFilter filter = SearchFilter.createFilterFromString("(sn=1)");
-      g.getMembers(DN.decode("o=test"), SearchScope.WHOLE_SUBTREE, filter);
+      g.getMembers(DN.valueOf("o=test"), SearchScope.WHOLE_SUBTREE, filter);
       fail("Expected an exception from getMembers(base, scope, filter)");
     } catch (Exception e) {}
 
@@ -662,7 +662,7 @@
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
-                  InternalClientConnection.nextMessageID(), null, DN.decode("o=test"),
+                  InternalClientConnection.nextMessageID(), null, DN.valueOf("o=test"),
                   SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString(
@@ -737,7 +737,7 @@
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
-                  InternalClientConnection.nextMessageID(), null, DN.decode("o=test"),
+                  InternalClientConnection.nextMessageID(), null, DN.valueOf("o=test"),
                   SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString(
@@ -856,7 +856,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create("ds-cfg-allow-retrieving-membership", "false")));
     DN definitionDN =
-         DN.decode("cn=Virtual Static member,cn=Virtual Attributes,cn=config");
+         DN.valueOf("cn=Virtual Static member,cn=Virtual Attributes,cn=config");
     ModifyOperation modifyOperation = conn.processModify(definitionDN, mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
@@ -895,7 +895,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("ou=Groups,dc=example,dc=com"),
+         conn.processSearch(DN.valueOf("ou=Groups,dc=example,dc=com"),
               SearchScope.SINGLE_LEVEL,
               SearchFilter.createFilterFromString("(objectClass=*)"));
     for (Entry e : searchOperation.getSearchEntries())
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/WhoAmIExtendedOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/WhoAmIExtendedOperationTestCase.java
index b6cbd22..8421d3f 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/WhoAmIExtendedOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/WhoAmIExtendedOperationTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -104,7 +105,7 @@
   public void testAsInternalAnonymous()
          throws Exception
   {
-    InternalClientConnection conn = new InternalClientConnection(DN.nullDN());
+    InternalClientConnection conn = new InternalClientConnection(DN.rootDN());
     ExtendedOperation extOp =
          conn.processExtendedOperation(OID_WHO_AM_I_REQUEST, null);
     assertEquals(extOp.getResultCode(), ResultCode.SUCCESS);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java
index f87859a..0aa808b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/monitors/GenericMonitorTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.monitors;
 
@@ -69,7 +70,7 @@
 
     if (dnString != null)
     {
-      DN dn = DN.decode(dnString);
+      DN dn = DN.valueOf(dnString);
       configEntry = DirectoryServer.getConfigEntry(dn);
       assertNotNull(configEntry);
     }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java
index 7c3efc6..100da0a 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/monitors/InternalSearchMonitorTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.monitors;
 
@@ -87,7 +87,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("cn=monitor"), SearchScope.WHOLE_SUBTREE,
+         conn.processSearch(DN.valueOf("cn=monitor"), SearchScope.WHOLE_SUBTREE,
               SearchFilter.createFilterFromString("(objectClass=*)"));
     assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);
   }
@@ -131,7 +131,7 @@
          throws Exception
   {
     // could be more than one level
-    DN monitorDN = DN.decode("cn="+monitorName+",cn=monitor");
+    DN monitorDN = DN.valueOf("cn="+monitorName+",cn=monitor");
 
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
@@ -156,7 +156,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("cn=monitor"), SearchScope.WHOLE_SUBTREE,
+         conn.processSearch(DN.valueOf("cn=monitor"), SearchScope.WHOLE_SUBTREE,
               SearchFilter.createFilterFromString("(objectClass=*)"));
     assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/EntryUUIDPluginTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/EntryUUIDPluginTestCase.java
index 9efafa0..8442d68 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/EntryUUIDPluginTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/EntryUUIDPluginTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.plugins;
 
@@ -307,7 +308,7 @@
          new ByteArrayInputStream(ldifString.getBytes("UTF-8"));
     LDIFImportConfig importConfig = new LDIFImportConfig(bais);
 
-    DN dn = DN.decode("cn=Entry UUID,cn=plugins,cn=config");
+    DN dn = DN.valueOf("cn=Entry UUID,cn=plugins,cn=config");
     EntryUUIDPlugin plugin =
          (EntryUUIDPlugin)
          DirectoryServer.getPluginConfigManager().getRegisteredPlugin(dn);
@@ -348,7 +349,7 @@
          new ByteArrayInputStream(ldifString.getBytes("UTF-8"));
     LDIFImportConfig importConfig = new LDIFImportConfig(bais);
 
-    DN dn = DN.decode("cn=Entry UUID,cn=plugins,cn=config");
+    DN dn = DN.valueOf("cn=Entry UUID,cn=plugins,cn=config");
     EntryUUIDPlugin plugin =
          (EntryUUIDPlugin)
          DirectoryServer.getPluginConfigManager().getRegisteredPlugin(dn);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/LDAPADListPluginTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/LDAPADListPluginTestCase.java
index f321c8b..563c262 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/LDAPADListPluginTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/LDAPADListPluginTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.plugins;
 
@@ -248,7 +249,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("o=test"), SearchScope.BASE_OBJECT,
+         conn.processSearch(DN.valueOf("o=test"), SearchScope.BASE_OBJECT,
               DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
               SearchFilter.createFilterFromString("(objectClass=*)"), attrList);
     assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);
@@ -278,7 +279,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("o=test"), SearchScope.BASE_OBJECT,
+         conn.processSearch(DN.valueOf("o=test"), SearchScope.BASE_OBJECT,
               DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
               SearchFilter.createFilterFromString("(objectClass=*)"), attrList);
     assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);
@@ -308,7 +309,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("o=test"), SearchScope.BASE_OBJECT,
+         conn.processSearch(DN.valueOf("o=test"), SearchScope.BASE_OBJECT,
               DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
               SearchFilter.createFilterFromString("(objectClass=*)"), attrList);
     assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);
@@ -338,7 +339,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.decode("o=test"), SearchScope.BASE_OBJECT,
+         conn.processSearch(DN.valueOf("o=test"), SearchScope.BASE_OBJECT,
               DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
               SearchFilter.createFilterFromString("(objectClass=*)"), attrList);
     assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/LastModPluginTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/LastModPluginTestCase.java
index 239f11d..f7b5b13 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/LastModPluginTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/LastModPluginTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.plugins;
 
@@ -360,10 +361,10 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode("o=test"), mods);
+         conn.processModify(DN.valueOf("o=test"), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
-    Entry e = DirectoryConfig.getEntry(DN.decode("o=test"));
+    Entry e = DirectoryConfig.getEntry(DN.valueOf("o=test"));
     assertNotNull(e);
     assertNotNull(e.getAttribute("modifiersname"));
     assertNotNull(e.getAttribute("modifytimestamp"));
@@ -399,7 +400,7 @@
          conn.processModifyDN(e.getDN(), RDN.decode("cn=test2"), false);
     assertEquals(modifyDNOperation.getResultCode(), ResultCode.SUCCESS);
 
-    e = DirectoryConfig.getEntry(DN.decode("cn=test2,o=test"));
+    e = DirectoryConfig.getEntry(DN.valueOf("cn=test2,o=test"));
     assertNotNull(e);
     assertNotNull(e.getAttribute("modifiersname"));
     assertNotNull(e.getAttribute("modifytimestamp"));
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/PasswordPolicyImportPluginTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/PasswordPolicyImportPluginTestCase.java
index fd28a5e..963b2c6 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/PasswordPolicyImportPluginTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/PasswordPolicyImportPluginTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.plugins;
 
@@ -279,7 +280,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    DN dn = DN.decode("cn=Password Policy Import,cn=plugins,cn=config");
+    DN dn = DN.valueOf("cn=Password Policy Import,cn=plugins,cn=config");
     PasswordPolicyImportPlugin plugin =
          (PasswordPolicyImportPlugin)
          DirectoryServer.getPluginConfigManager().getRegisteredPlugin(dn);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/ReferentialIntegrityPluginTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/ReferentialIntegrityPluginTestCase.java
index cad144e..08816df 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/ReferentialIntegrityPluginTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/ReferentialIntegrityPluginTestCase.java
@@ -23,6 +23,7 @@
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
  *      Portions copyright 2011 profiq s.r.o.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.plugins;
@@ -127,10 +128,10 @@
     replaceAttrEntry(configDN, dsConfigBaseDN, testSuffix);
     addAttrEntry(configDN, dsConfigBaseDN, ugroup);
     //Add DNs to groups and special entries
-    addAttrEntry(DN.decode(tgroup), "member", user1, user2, user3);
-    addAttrEntry(DN.decode(tugroup), "uniquemember", user1, user2, user3);
-    addAttrEntry(DN.decode(ugroup), "uniquemember", user1, user2, user3);
-    addAttrEntry(DN.decode(spPerson), "seealso", user1, user2, user3);
+    addAttrEntry(DN.valueOf(tgroup), "member", user1, user2, user3);
+    addAttrEntry(DN.valueOf(tugroup), "uniquemember", user1, user2, user3);
+    addAttrEntry(DN.valueOf(ugroup), "uniquemember", user1, user2, user3);
+    addAttrEntry(DN.valueOf(spPerson), "seealso", user1, user2, user3);
     //Perform the move.
     doModDN(oldSuperior, newRdn, newSuperior);
     //This group under the suffix all DNs should be moved.
@@ -166,10 +167,10 @@
     addAttrEntry(configDN, dsConfigBaseDN, ugroup);
 
     // Add DNs to groups and special entries
-    addAttrEntry(DN.decode(tgroup), "member", user1, user2, user3);
-    addAttrEntry(DN.decode(tugroup), "uniquemember", user1, user2, user3);
-    addAttrEntry(DN.decode(ugroup), "uniquemember", user1, user2, user3);
-    addAttrEntry(DN.decode(spPerson), "seealso", user1, user2, user3);
+    addAttrEntry(DN.valueOf(tgroup), "member", user1, user2, user3);
+    addAttrEntry(DN.valueOf(tugroup), "uniquemember", user1, user2, user3);
+    addAttrEntry(DN.valueOf(ugroup), "uniquemember", user1, user2, user3);
+    addAttrEntry(DN.valueOf(spPerson), "seealso", user1, user2, user3);
 
     // Check group membership before delete.
     isMember(tgroup, true, user1, user2, user3);
@@ -213,10 +214,10 @@
     replaceAttrEntry(configDN, dsConfigBaseDN, exSuffix);
     addAttrEntry(configDN, dsConfigBaseDN, tugroup);
     //Add DNs to groups and special entry
-    addAttrEntry(DN.decode(group), "member", tuser1, tuser2, tuser3);
-    addAttrEntry(DN.decode(ugroup), "uniquemember", tuser1, tuser2, tuser3);
-    addAttrEntry(DN.decode(tugroup), "uniquemember", tuser1, tuser2, tuser3);
-    addAttrEntry(DN.decode(tspPerson), "seealso", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(group), "member", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(ugroup), "uniquemember", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(tugroup), "uniquemember", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(tspPerson), "seealso", tuser1, tuser2, tuser3);
     //Perform rename.
     doModDN(tuser1,tuser1_rdn, null);
     //Verify that the changes were made.
@@ -239,7 +240,7 @@
   @Test()
   public void testReferentialDelete() throws Exception {
    replaceAttrEntry(configDN, dsConfigAttrType,"member");
-   addAttrEntry(DN.decode(tgroup), "member", tuser1, tuser2, tuser3);
+   addAttrEntry(DN.valueOf(tgroup), "member", tuser1, tuser2, tuser3);
    deleteEntries(tuser1, tuser2, tuser3);
    isMember(tgroup, false, tuser1, tuser2, tuser3);
   }
@@ -259,7 +260,7 @@
     //Set interval to 1 second, this should start the background thread
     //and put the plugin in background mode.
     replaceAttrEntry(configDN, dsConfigUpdateInterval,"1 seconds");
-    addAttrEntry(DN.decode(tgroup), "member", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(tgroup), "member", tuser1, tuser2, tuser3);
     deleteEntries(tuser1, tuser2, tuser3);
     //Wait two seconds and then check the group.
     Thread.sleep(2000);
@@ -268,7 +269,7 @@
     //thread.
     replaceAttrEntry(configDN, dsConfigUpdateInterval,"0 seconds");
     addEntries(tuser1, tuser2, tuser3);
-    addAttrEntry(DN.decode(tgroup), "member", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(tgroup), "member", tuser1, tuser2, tuser3);
     deleteEntries(tuser1, tuser2, tuser3);
     //Don't wait, the changes should be there.
     isMember(tgroup, false, tuser1, tuser2, tuser3);
@@ -284,9 +285,9 @@
    public void testReferentialDeleteAttrs() throws Exception {
     replaceAttrEntry(configDN, dsConfigAttrType,"member");
     addAttrEntry(configDN, dsConfigAttrType,"uniquemember", "seealso");
-    addAttrEntry(DN.decode(tgroup), "member", tuser1, tuser2, tuser3);
-    addAttrEntry(DN.decode(tugroup), "uniquemember", tuser1, tuser2, tuser3);
-    addAttrEntry(DN.decode(tspPerson), "seealso", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(tgroup), "member", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(tugroup), "uniquemember", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(tspPerson), "seealso", tuser1, tuser2, tuser3);
     deleteEntries(tuser1, tuser2, tuser3);
     isMember(tgroup, false, tuser1, tuser2, tuser3);
     isAttributeValueEntry(tugroup, false, "uniquemember",
@@ -307,10 +308,10 @@
     addAttrEntry(configDN, dsConfigAttrType,"uniquemember", "seealso");
     replaceAttrEntry(configDN, dsConfigBaseDN, exSuffix);
     addAttrEntry(configDN, dsConfigBaseDN, tugroup);
-    addAttrEntry(DN.decode(group), "member", tuser1, tuser2, tuser3);
-    addAttrEntry(DN.decode(ugroup), "uniquemember", tuser1, tuser2, tuser3);
-    addAttrEntry(DN.decode(tugroup), "uniquemember", tuser1, tuser2, tuser3);
-    addAttrEntry(DN.decode(tspPerson), "seealso", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(group), "member", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(ugroup), "uniquemember", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(tugroup), "uniquemember", tuser1, tuser2, tuser3);
+    addAttrEntry(DN.valueOf(tspPerson), "seealso", tuser1, tuser2, tuser3);
     deleteEntries(tuser1, tuser2, tuser3);
     isMember(group, false, tuser1, tuser2, tuser3);
     isAttributeValueEntry(ugroup, true, "uniquemember",
@@ -815,7 +816,7 @@
           throws Exception
   {
     TestCaseUtils.startServer();
-    configDN= DN.decode("cn=Referential Integrity ,cn=Plugins,cn=config");
+    configDN= DN.valueOf("cn=Referential Integrity ,cn=Plugins,cn=config");
   }
 
   /**
@@ -1121,7 +1122,7 @@
     InternalClientConnection conn =
                                  InternalClientConnection.getRootConnection();
     for(String dn : dns) {
-         DeleteOperation op=conn.processDelete(DN.decode(dn));
+         DeleteOperation op=conn.processDelete(DN.valueOf(dn));
        assertEquals(op.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -1139,7 +1140,7 @@
 
     for (String dn : dns)
     {
-      DeleteOperation op = conn.processDelete(DN.decode(dn), controls);
+      DeleteOperation op = conn.processDelete(DN.valueOf(dn), controls);
       assertEquals(op.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -1162,9 +1163,9 @@
   private void isMember(String group, boolean expected, String... dns)
   throws Exception {
    GroupManager groupManager=DirectoryServer.getGroupManager();
-   Group<?> instance=groupManager.getGroupInstance(DN.decode(group));
+   Group<?> instance=groupManager.getGroupInstance(DN.valueOf(group));
    for(String dn : dns)
-     assertEquals(instance.isMember(DN.decode(dn)), expected);
+     assertEquals(instance.isMember(DN.valueOf(dn)), expected);
   }
 
   private void isAttributeValueEntry(String entryDN, boolean expected,
@@ -1175,7 +1176,7 @@
     String filterStr="(" + attr + "=*)";
     InternalClientConnection conn =
             InternalClientConnection.getRootConnection();
-    InternalSearchOperation operation = conn.processSearch(DN.decode(entryDN),
+    InternalSearchOperation operation = conn.processSearch(DN.valueOf(entryDN),
             SearchScope.BASE_OBJECT,
             DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
             SearchFilter.createFilterFromString(filterStr),
@@ -1245,10 +1246,10 @@
             InternalClientConnection.getRootConnection();
     ModifyDNOperation modDNop;
     if(newSuperior != null)
-        modDNop = conn.processModifyDN(DN.decode(dn), RDN.decode(rdn), true,
-                                       DN.decode(newSuperior));
+        modDNop = conn.processModifyDN(DN.valueOf(dn), RDN.decode(rdn), true,
+                                       DN.valueOf(newSuperior));
     else
-        modDNop = conn.processModifyDN(DN.decode(dn), RDN.decode(rdn),
+        modDNop = conn.processModifyDN(DN.valueOf(dn), RDN.decode(rdn),
                                        false, null);
     assertEquals(modDNop.getResultCode(), ResultCode.SUCCESS);
   }
@@ -1398,7 +1399,7 @@
 
     Entry entry = null;
     AddOperation addOperation = null;
-    
+
     InternalClientConnection conn =
       InternalClientConnection.getRootConnection();
 
@@ -1452,7 +1453,7 @@
 
     Entry entry = null;
     AddOperation addOperation = null;
-    
+
     InternalClientConnection conn =
       InternalClientConnection.getRootConnection();
 
@@ -1615,7 +1616,7 @@
                            "member:(objectclass=person)");
     replaceAttrEntry(configDN, "ds-cfg-enabled", "true");
 
-    
+
     InternalClientConnection conn =
       InternalClientConnection.getRootConnection();
 
@@ -1632,7 +1633,7 @@
       );
 
     AddOperation addOperation = conn.processAdd(entry);
-    assertEquals(addOperation.getResultCode(), 
+    assertEquals(addOperation.getResultCode(),
                  ResultCode.CONSTRAINT_VIOLATION);
   }
 
@@ -1772,7 +1773,7 @@
     AddOperation addOperation = conn.processAdd(entry);
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
 
-    ModifyOperation modOperation = addAttrEntry(DN.decode(user1),
+    ModifyOperation modOperation = addAttrEntry(DN.valueOf(user1),
      "manager", "uid=manager,ou=people,ou=dept,dc=example,dc=com");
     assertEquals(modOperation.getResultCode(), ResultCode.SUCCESS);
   }
@@ -1813,11 +1814,11 @@
     AddOperation addOperation = conn.processAdd(entry);
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
 
-    ModifyOperation modOperation = addAttrEntry(DN.decode(user1),
+    ModifyOperation modOperation = addAttrEntry(DN.valueOf(user1),
      "manager", "uid=manager,ou=people,ou=dept,dc=example,dc=com");
     assertEquals(modOperation.getResultCode(), ResultCode.SUCCESS);
 
-    modOperation = replaceAttrEntry(DN.decode(user1),
+    modOperation = replaceAttrEntry(DN.valueOf(user1),
                                     "manager", user2);
     assertEquals(modOperation.getResultCode(), ResultCode.SUCCESS);
   }
@@ -1858,7 +1859,7 @@
     AddOperation addOperation = conn.processAdd(entry);
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
 
-    ModifyOperation modOperation = addAttrEntry(DN.decode(user1),
+    ModifyOperation modOperation = addAttrEntry(DN.valueOf(user1),
      "manager", "uid=manager,ou=people,ou=dept,dc=example,dc=com");
     assertEquals(modOperation.getResultCode(),
                  ResultCode.CONSTRAINT_VIOLATION);
@@ -1902,7 +1903,7 @@
     AddOperation addOperation = conn.processAdd(entry);
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
 
-    ModifyOperation modOperation = addAttrEntry(DN.decode(user1),
+    ModifyOperation modOperation = addAttrEntry(DN.valueOf(user1),
      "manager", "uid=manager,ou=people,ou=dept,o=test");
     assertEquals(modOperation.getResultCode(),
                  ResultCode.SUCCESS);
@@ -1935,7 +1936,7 @@
                            "manager:(objectclass=person)");
     replaceAttrEntry(configDN, "ds-cfg-enabled", "true");
 
-    ModifyOperation modOperation = addAttrEntry(DN.decode(user1),
+    ModifyOperation modOperation = addAttrEntry(DN.valueOf(user1),
      "manager", "uid=manager,ou=people,ou=dept,dc=example,dc=com");
     assertEquals(modOperation.getResultCode(),
                  ResultCode.CONSTRAINT_VIOLATION);
@@ -1960,7 +1961,7 @@
                            "member:(objectclass=person)");
     replaceAttrEntry(configDN, "ds-cfg-enabled", "true");
 
-    ModifyOperation modOperation = addAttrEntry(DN.decode(group),
+    ModifyOperation modOperation = addAttrEntry(DN.valueOf(group),
                                                 "member",
                                                 user1);
     assertEquals(modOperation.getResultCode(), ResultCode.SUCCESS);
@@ -1985,7 +1986,7 @@
                            "member:(objectclass=person)");
     replaceAttrEntry(configDN, "ds-cfg-enabled", "true");
 
-    ModifyOperation modOperation = addAttrEntry(DN.decode(group),
+    ModifyOperation modOperation = addAttrEntry(DN.valueOf(group),
       "member", "uid=user.100,ou=people,ou=dept,dc=example,dc=com");
     assertEquals(modOperation.getResultCode(),
                  ResultCode.CONSTRAINT_VIOLATION);
@@ -2010,7 +2011,7 @@
                            "member:(objectclass=posixaccount)");
     replaceAttrEntry(configDN, "ds-cfg-enabled", "true");
 
-    ModifyOperation modOperation = addAttrEntry(DN.decode(group),
+    ModifyOperation modOperation = addAttrEntry(DN.valueOf(group),
       "member", "uid=user.100,ou=people,ou=dept,dc=example,dc=com");
     assertEquals(modOperation.getResultCode(),
                  ResultCode.CONSTRAINT_VIOLATION);
@@ -2028,7 +2029,7 @@
                                "subordinatedelete",
                                "preoperationadd",
                                "preoperationmodify");
-    addAttrEntry(configDN, dsConfigBaseDN, 
+    addAttrEntry(configDN, dsConfigBaseDN,
                            "dc=example,dc=com",
                            "o=test");
     replaceAttrEntry(configDN, dsConfigEnforceIntegrity, "true");
@@ -2037,7 +2038,7 @@
                            "member:(objectclass=person)");
     replaceAttrEntry(configDN, "ds-cfg-enabled", "true");
 
-    ModifyOperation modOperation = addAttrEntry(DN.decode(group),
+    ModifyOperation modOperation = addAttrEntry(DN.valueOf(group),
       "member", "uid=user.1,ou=people,ou=dept,o=test");
     assertEquals(modOperation.getResultCode(),
                  ResultCode.SUCCESS);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/SambaPasswordPluginTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/SambaPasswordPluginTestCase.java
index 902c288..e10632f 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/SambaPasswordPluginTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/SambaPasswordPluginTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2011-2012 profiq s.r.o.
- *      Portions copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 
 package org.opends.server.plugins;
@@ -106,7 +106,7 @@
   public void afterClass() throws Exception
   {
     TestCaseUtils.deleteEntry(DN
-        .decode("cn=samba password,cn=Plugins,cn=config"));
+        .valueOf("cn=samba password,cn=Plugins,cn=config"));
   }
 
 
@@ -153,7 +153,7 @@
             + "(version 3.0; acl \"Samba admin\"; allow (all) "
             + "userdn=\"ldap:///cn=samba admin,o=test\";)")));
 
-    ModifyOperation modOp = conn.processModify(DN.decode("o=test"), mods);
+    ModifyOperation modOp = conn.processModify(DN.valueOf("o=test"), mods);
 
     assertEquals(modOp.getResultCode(), ResultCode.SUCCESS);
   }
@@ -675,7 +675,7 @@
   {
     SambaPasswordPlugin plugin = (SambaPasswordPlugin)
       DirectoryServer.getPluginConfigManager().getRegisteredPlugin(
-        DN.decode("cn=samba password,cn=Plugins,cn=config"));
+        DN.valueOf("cn=samba password,cn=Plugins,cn=config"));
 
     TimeStampProvider testTimeStampProvider = new TimeStampProvider()
     {
@@ -755,7 +755,7 @@
   {
     SambaPasswordPlugin plugin = (SambaPasswordPlugin)
       DirectoryServer.getPluginConfigManager().getRegisteredPlugin(
-        DN.decode("cn=samba password,cn=Plugins,cn=config"));
+        DN.valueOf("cn=samba password,cn=Plugins,cn=config"));
 
     TimeStampProvider testTimeStampProvider = new TimeStampProvider()
     {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/UniqueAttributePluginTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/UniqueAttributePluginTestCase.java
index c2775fc..2692e2c 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/UniqueAttributePluginTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/UniqueAttributePluginTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 
@@ -75,8 +75,8 @@
     addTestEntries("o=test", 't');
     TestCaseUtils.clearJEBackend(true,"userRoot", "dc=example,dc=com");
     addTestEntries("dc=example,dc=com", 'x');
-    uidConfigDN=DN.decode("cn=UID Unique Attribute ,cn=Plugins,cn=config");
-    testConfigDN=DN.decode("cn=Test Unique Attribute,cn=Plugins,cn=config");
+    uidConfigDN=DN.valueOf("cn=UID Unique Attribute ,cn=Plugins,cn=config");
+    testConfigDN=DN.valueOf("cn=Test Unique Attribute,cn=Plugins,cn=config");
   }
 
 
@@ -365,11 +365,11 @@
     replaceAttrInEntry(uidConfigDN,dsConfigAttrType,"uid");
     //Rename with new rdn, should fail, there is an entry already with that
     //uid value.
-    doModDN(DN.decode("uid=3user.3, ou=people, o=test"), RDN.decode("uid=4"),
+    doModDN(DN.valueOf("uid=3user.3, ou=people, o=test"), RDN.decode("uid=4"),
                       false, null, ResultCode.CONSTRAINT_VIOLATION);
     //Rename with multi-valued RDN, should fail there is an entry already with
     //that uid value.
-    doModDN(DN.decode("uid=3user.3, ou=people, o=test"),
+    doModDN(DN.valueOf("uid=3user.3, ou=people, o=test"),
                       RDN.decode("sn=xx+uid=4"),
                       false, null, ResultCode.CONSTRAINT_VIOLATION);
     //Now add a base dn to be unique under, so new superior move can be tested.
@@ -379,15 +379,15 @@
     //Try to move the entry to a new superior.
     //Should fail, there is an entry under the new superior already with
     //that uid value.
-    doModDN(DN.decode("uid=3user.3, ou=people, o=test"),
+    doModDN(DN.valueOf("uid=3user.3, ou=people, o=test"),
                       RDN.decode("uid=3user.3"), false,
-                       DN.decode("ou=new people, o=test"),
+                       DN.valueOf("ou=new people, o=test"),
                        ResultCode.CONSTRAINT_VIOLATION);
    //Test again with different superior, should succeed, new superior DN is
    //not in base DN scope.
-   doModDN(DN.decode("uid=3user.3, ou=people, o=test"),
+   doModDN(DN.valueOf("uid=3user.3, ou=people, o=test"),
                       RDN.decode("uid=3user.3"), false,
-                       DN.decode("ou=new people1, o=test"),
+                       DN.valueOf("ou=new people1, o=test"),
                        ResultCode.SUCCESS);
   }
 
@@ -404,14 +404,14 @@
     addMods(mods,"mail",ModificationType.REPLACE,"userx@test","userxx@test",
            "user1t@test");
     //Fail because user1t@test already exists under "o=people,o=test".
-    doMods(mods, DN.decode("uid=5user.5,ou=People,o=test"),
+    doMods(mods, DN.valueOf("uid=5user.5,ou=People,o=test"),
            ResultCode.CONSTRAINT_VIOLATION);
     mods.clear();
     addMods(mods,"pager",ModificationType.ADD,"2-999-1234","1-999-5678");
     addMods(mods,"mail",ModificationType.ADD,"userx@test","userxx@test",
            "user1t@test");
     //Fail because user1t@test already exists under "o=people,o=test".
-    doMods(mods, DN.decode("uid=5user.5,ou=People,o=test"),
+    doMods(mods, DN.valueOf("uid=5user.5,ou=People,o=test"),
            ResultCode.CONSTRAINT_VIOLATION);
     mods.clear();
     addMods(mods,"pager",ModificationType.ADD,"2-999-1234","1-999-5678");
@@ -419,7 +419,7 @@
            "user1t@test");
     //Ok because adding mail value user1t@test to entry that already
     //contains mail value user1t@test.
-    doMods(mods, DN.decode("uid=1user.1,ou=People,o=test"),
+    doMods(mods, DN.valueOf("uid=1user.1,ou=People,o=test"),
            ResultCode.SUCCESS);
     mods.clear();
     //Replace employeenumber as the unique attribute.
@@ -427,7 +427,7 @@
     addMods(mods,"employeenumber",ModificationType.INCREMENT,"1");
     //Test modify increment extension.
     //Fail because incremented value of employeenumber (2) already exists.
-    doMods(mods, DN.decode("uid=1user.1,ou=People,o=test"),
+    doMods(mods, DN.valueOf("uid=1user.1,ou=People,o=test"),
            ResultCode.CONSTRAINT_VIOLATION);
   }
 
@@ -485,7 +485,7 @@
                        "pager","telephonenumber");
     addAttribute(e, "mobile", "1-999-1234","1-999-5678","1-444-9012");
     addEntry(e, ResultCode.CONSTRAINT_VIOLATION);
-    e.setDN(DN.decode("cn=test user, ou=People,o=test"));
+    e.setDN(DN.valueOf("cn=test user, ou=People,o=test"));
     //Fail because "2-333-9012" already exists in "ou=people,o=test" in
     //telephonenumber attribute.
     addEntry(e, ResultCode.CONSTRAINT_VIOLATION);
@@ -530,7 +530,7 @@
     //Fail because "2-777-9012"  is a telephone value under the
     //"dc=example,dc=com" naming context.
     addEntry(e, ResultCode.CONSTRAINT_VIOLATION);
-    e.setDN(DN.decode("cn=test user, ou=People,o=test"));
+    e.setDN(DN.valueOf("cn=test user, ou=People,o=test"));
     addEntry(e, ResultCode.CONSTRAINT_VIOLATION);
     delAttribute(e, "mobile");
     addAttribute(e, "pager", "2-777-1234","1-999-5678","1-999-9012");
@@ -729,8 +729,8 @@
 
   private void clearAcis(String suffix) throws Exception
   {
-    deleteAttrsFromEntry(DN.decode("ou=People," + suffix), "aci");
-    deleteAttrsFromEntry(DN.decode("ou=People1," + suffix), "aci");
+    deleteAttrsFromEntry(DN.valueOf("ou=People," + suffix), "aci");
+    deleteAttrsFromEntry(DN.valueOf("ou=People1," + suffix), "aci");
   }
 
   /**
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java
index 53d8b63..7cbf343 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.internal;
 
@@ -90,7 +91,7 @@
   public Object[][] getInternalConnections()
          throws Exception
   {
-    DN dmDN = DN.decode("cn=Directory Manager,cn=Root DNs,cn=config");
+    DN dmDN = DN.valueOf("cn=Directory Manager,cn=Root DNs,cn=config");
     Entry dmEntry = DirectoryServer.getEntry(dmDN);
 
     TestCaseUtils.initializeTestBackend(true);
@@ -116,7 +117,7 @@
       new Object[] { new InternalClientConnection(
            new AuthenticationInfo(userEntry, false)) },
       new Object[] { new InternalClientConnection(dmDN) },
-      new Object[] { new InternalClientConnection(DN.nullDN()) },
+      new Object[] { new InternalClientConnection(DN.rootDN()) },
       new Object[] { new InternalClientConnection((DN) null) }
     };
   }
@@ -382,7 +383,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     BindOperation bindOperation =
-         conn.processSimpleBind(DN.decode("cn=Directory Manager"),
+         conn.processSimpleBind(DN.valueOf("cn=Directory Manager"),
                                 ByteString.valueOf("password"));
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
   }
@@ -427,7 +428,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     BindOperation bindOperation =
-         conn.processSASLBind(DN.nullDN(), "PLAIN", creds);
+         conn.processSASLBind(DN.rootDN(), "PLAIN", creds);
     assertEquals(bindOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -492,7 +493,7 @@
 
 
     CompareOperation compareOperation =
-         conn.processCompare(DN.decode("cn=test,o=test"),
+         conn.processCompare(DN.valueOf("cn=test,o=test"),
                              DirectoryServer.getAttributeType("cn", true),
                              ByteString.valueOf("test"));
     assertEquals(compareOperation.getResultCode(), ResultCode.COMPARE_TRUE);
@@ -558,7 +559,7 @@
 
 
     DeleteOperation deleteOperation =
-         conn.processDelete(DN.decode("cn=test,o=test"));
+         conn.processDelete(DN.valueOf("cn=test,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -651,7 +652,7 @@
         Attributes.create("description", "This is a test")));
 
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode("cn=test,o=test"), mods);
+         conn.processModify(DN.valueOf("cn=test,o=test"), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -751,7 +752,7 @@
 
 
     ModifyDNOperation modifyDNOperation =
-         conn.processModifyDN(DN.decode("cn=test,o=test"),
+         conn.processModifyDN(DN.valueOf("cn=test,o=test"),
                               RDN.decode("cn=test2"), true);
     assertEquals(modifyDNOperation.getResultCode(), ResultCode.SUCCESS);
   }
@@ -784,9 +785,9 @@
 
 
     ModifyDNOperation modifyDNOperation =
-         conn.processModifyDN(DN.decode("cn=test,o=test"),
+         conn.processModifyDN(DN.valueOf("cn=test,o=test"),
                               RDN.decode("cn=test2"), true,
-                              DN.decode("dc=example,dc=com"));
+                              DN.valueOf("dc=example,dc=com"));
     assertEquals(modifyDNOperation.getResultCode(),
                  ResultCode.UNWILLING_TO_PERFORM);
   }
@@ -880,7 +881,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.nullDN(), SearchScope.BASE_OBJECT,
+         conn.processSearch(DN.rootDN(), SearchScope.BASE_OBJECT,
               SearchFilter.createFilterFromString("(objectClass=*)"));
     assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);
     assertFalse(searchOperation.getSearchEntries().isEmpty());
@@ -902,7 +903,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.nullDN(), SearchScope.BASE_OBJECT,
+         conn.processSearch(DN.rootDN(), SearchScope.BASE_OBJECT,
               DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
               SearchFilter.createFilterFromString("(objectClass=*)"),
               new LinkedHashSet<String>());
@@ -930,7 +931,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     InternalSearchOperation searchOperation =
-         conn.processSearch(DN.nullDN(), SearchScope.BASE_OBJECT,
+         conn.processSearch(DN.rootDN(), SearchScope.BASE_OBJECT,
               DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
               SearchFilter.createFilterFromString("(objectClass=*)"),
               new LinkedHashSet<String>(), searchListener);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalLDAPSocketTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalLDAPSocketTestCase.java
index 557d573..a09c625 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalLDAPSocketTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalLDAPSocketTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.internal;
 
@@ -88,7 +89,7 @@
          throws Exception
   {
     TestCaseUtils.initializeTestBackend(false);
-    assertFalse(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
     InternalLDAPSocket socket = new InternalLDAPSocket();
     LDAPReader reader = new LDAPReader(socket);
@@ -117,7 +118,7 @@
     assertNotNull(message);
     assertEquals(message.getAddResponseProtocolOp().getResultCode(),
                  LDAPResultCode.SUCCESS);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
     reader.close();
     writer.close();
@@ -137,7 +138,7 @@
          throws Exception
   {
     TestCaseUtils.initializeTestBackend(false);
-    assertFalse(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
 
     Hashtable<String,String> env = new Hashtable<String,String>();
@@ -165,7 +166,7 @@
     attributes.put(o);
 
     context.createSubcontext("o=test", attributes);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
     context.close();
   }
@@ -183,7 +184,7 @@
          throws Exception
   {
     TestCaseUtils.initializeTestBackend(true);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
     InternalLDAPSocket socket = new InternalLDAPSocket();
     LDAPReader reader = new LDAPReader(socket);
@@ -228,7 +229,7 @@
          throws Exception
   {
     TestCaseUtils.initializeTestBackend(true);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
 
     Hashtable<String,String> env = new Hashtable<String,String>();
@@ -269,7 +270,7 @@
          throws Exception
   {
     TestCaseUtils.initializeTestBackend(true);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
     InternalLDAPSocket socket = new InternalLDAPSocket();
     LDAPReader reader = new LDAPReader(socket);
@@ -294,7 +295,7 @@
     assertNotNull(message);
     assertEquals(message.getDeleteResponseProtocolOp().getResultCode(),
                  LDAPResultCode.SUCCESS);
-    assertFalse(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
     reader.close();
     writer.close();
@@ -314,7 +315,7 @@
          throws Exception
   {
     TestCaseUtils.initializeTestBackend(true);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
 
     Hashtable<String,String> env = new Hashtable<String,String>();
@@ -330,7 +331,7 @@
     DirContext context = new InitialDirContext(env);
 
     context.destroySubcontext("o=test");
-    assertFalse(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
     context.close();
   }
@@ -393,7 +394,7 @@
          throws Exception
   {
     TestCaseUtils.initializeTestBackend(true);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
     InternalLDAPSocket socket = new InternalLDAPSocket();
     LDAPReader reader = new LDAPReader(socket);
@@ -441,7 +442,7 @@
          throws Exception
   {
     TestCaseUtils.initializeTestBackend(true);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
 
     Hashtable<String,String> env = new Hashtable<String,String>();
@@ -485,8 +486,8 @@
       "objectClass: organizationalUnit",
       "ou: People");
 
-    assertTrue(DirectoryServer.entryExists(DN.decode("ou=People,o=test")));
-    assertFalse(DirectoryServer.entryExists(DN.decode("ou=Users,o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("ou=People,o=test")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("ou=Users,o=test")));
 
     InternalLDAPSocket socket = new InternalLDAPSocket();
     LDAPReader reader = new LDAPReader(socket);
@@ -513,8 +514,8 @@
     assertEquals(message.getModifyDNResponseProtocolOp().getResultCode(),
                  LDAPResultCode.SUCCESS);
 
-    assertFalse(DirectoryServer.entryExists(DN.decode("ou=People,o=test")));
-    assertTrue(DirectoryServer.entryExists(DN.decode("ou=Users,o=test")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("ou=People,o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("ou=Users,o=test")));
 
     reader.close();
     writer.close();
@@ -540,8 +541,8 @@
       "objectClass: organizationalUnit",
       "ou: People");
 
-    assertTrue(DirectoryServer.entryExists(DN.decode("ou=People,o=test")));
-    assertFalse(DirectoryServer.entryExists(DN.decode("ou=Users,o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("ou=People,o=test")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("ou=Users,o=test")));
 
 
     Hashtable<String,String> env = new Hashtable<String,String>();
@@ -558,8 +559,8 @@
 
     context.rename("ou=People,o=test", "ou=Users,o=test");
 
-    assertFalse(DirectoryServer.entryExists(DN.decode("ou=People,o=test")));
-    assertTrue(DirectoryServer.entryExists(DN.decode("ou=Users,o=test")));
+    assertFalse(DirectoryServer.entryExists(DN.valueOf("ou=People,o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("ou=Users,o=test")));
 
     context.close();
   }
@@ -577,7 +578,7 @@
          throws Exception
   {
     TestCaseUtils.initializeTestBackend(true);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
     InternalLDAPSocket socket = new InternalLDAPSocket();
     LDAPReader reader = new LDAPReader(socket);
@@ -606,7 +607,7 @@
     message = reader.readMessage();
     assertNotNull(message);
     assertEquals(message.getSearchResultEntryProtocolOp().getDN(),
-                 DN.decode("o=test"));
+                 DN.valueOf("o=test"));
 
     message = reader.readMessage();
     assertNotNull(message);
@@ -631,7 +632,7 @@
          throws Exception
   {
     TestCaseUtils.initializeTestBackend(true);
-    assertTrue(DirectoryServer.entryExists(DN.decode("o=test")));
+    assertTrue(DirectoryServer.entryExists(DN.valueOf("o=test")));
 
 
     Hashtable<String,String> env = new Hashtable<String,String>();
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalSearchOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalSearchOperationTestCase.java
index 0785481..22ac47b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalSearchOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalSearchOperationTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.internal;
 
@@ -123,7 +124,7 @@
          InternalClientConnection.getRootConnection();
     new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                 InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
-                                DN.nullDN(), SearchScope.BASE_OBJECT,
+                                DN.rootDN(), SearchScope.BASE_OBJECT,
                                 DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0,
                                 false, searchFilter,
                                 new LinkedHashSet<String>(), null);
@@ -148,7 +149,7 @@
          InternalClientConnection.getRootConnection();
     new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                                 InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
-                                DN.nullDN(), SearchScope.BASE_OBJECT,
+                                DN.rootDN(), SearchScope.BASE_OBJECT,
                                 DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0,
                                 false, searchFilter,
                                 new LinkedHashSet<String>(),
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java
index b02b88f..d8438b8 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.protocols.jmx;
 
@@ -150,11 +150,11 @@
         .getRootConnection();
 
     DeleteOperation deleteOperation = conn.processDelete(DN
-        .decode("cn=Privileged User,o=test"));
+        .valueOf("cn=Privileged User,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation = conn.processDelete(DN
-        .decode("cn=Unprivileged JMX User,o=test"));
+        .valueOf("cn=Unprivileged JMX User,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -625,7 +625,7 @@
    */
   private Object jmxGet(String dn, String attributeName,
       MBeanServerConnection mbsc) throws Exception {
-    String jmxName = JMXMBean.getJmxName(DN.decode(dn));
+    String jmxName = JMXMBean.getJmxName(DN.valueOf(dn));
     ObjectName name = ObjectName.getInstance(jmxName);
 
     try
@@ -650,7 +650,7 @@
    */
   private void jmxSet(String dn, String attributeName, Object value,
       MBeanServerConnection mbsc) throws Exception {
-    String jmxName = JMXMBean.getJmxName(DN.decode(dn));
+    String jmxName = JMXMBean.getJmxName(DN.valueOf(dn));
     ObjectName name = ObjectName.getInstance(jmxName);
     Attribute attr = new Attribute(attributeName, value);
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java
index bf69d60..9610322 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.protocols.jmx;
 
@@ -235,25 +235,25 @@
     successList.add(false);
 
     userDN    = "cn=Unprivileged Root,cn=Root DNs,cn=config";
-    userEntry = DirectoryServer.getEntry(DN.decode(userDN));
+    userEntry = DirectoryServer.getEntry(DN.valueOf(userDN));
     authInfo  = new AuthenticationInfo(userEntry, true);
     connList.add(new JmxClientConnection(jmxCtx,authInfo));
     successList.add(false);
 
     userDN    = "cn=Proxy Root,cn=Root DNs,cn=config";
-    userEntry = DirectoryServer.getEntry(DN.decode(userDN));
+    userEntry = DirectoryServer.getEntry(DN.valueOf(userDN));
     authInfo  = new AuthenticationInfo(userEntry, true);
     connList.add(new JmxClientConnection(jmxCtx,authInfo));
     successList.add(true);
 
     userDN    = "cn=Unprivileged User,o=test";
-    userEntry = DirectoryServer.getEntry(DN.decode(userDN));
+    userEntry = DirectoryServer.getEntry(DN.valueOf(userDN));
     authInfo  = new AuthenticationInfo(userEntry, false);
     connList.add(new JmxClientConnection(jmxCtx,authInfo));
     successList.add(false);
 
     userDN    = "cn=Privileged User,o=test";
-    userEntry = DirectoryServer.getEntry(DN.decode(userDN));
+    userEntry = DirectoryServer.getEntry(DN.valueOf(userDN));
     authInfo  = new AuthenticationInfo(userEntry, false);
     connList.add(new JmxClientConnection(jmxCtx,authInfo));
     successList.add(true);
@@ -308,39 +308,39 @@
         .getRootConnection();
 
     DeleteOperation deleteOperation = conn.processDelete(DN
-        .decode("cn=Unprivileged Root,cn=Root DNs,cn=config"));
+        .valueOf("cn=Unprivileged Root,cn=Root DNs,cn=config"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation = conn.processDelete(DN
-        .decode("cn=Unprivileged JMX Root,cn=Root DNs,cn=config"));
+        .valueOf("cn=Unprivileged JMX Root,cn=Root DNs,cn=config"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation = conn.processDelete(DN
-        .decode("cn=Proxy Root,cn=Root DNs,cn=config"));
+        .valueOf("cn=Proxy Root,cn=Root DNs,cn=config"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation = conn.processDelete(DN
-        .decode("cn=Privileged User,o=test"));
+        .valueOf("cn=Privileged User,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation = conn.processDelete(DN
-        .decode("cn=UnPrivileged User,o=test"));
+        .valueOf("cn=UnPrivileged User,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation = conn.processDelete(DN
-        .decode("cn=PWReset Target,o=test"));
+        .valueOf("cn=PWReset Target,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation = conn.processDelete(DN
-        .decode("cn=test1 user,dc=unindexed,dc=jeb"));
+        .valueOf("cn=test1 user,dc=unindexed,dc=jeb"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation = conn.processDelete(DN
-        .decode("cn=test2 user,dc=unindexed,dc=jeb"));
+        .valueOf("cn=test2 user,dc=unindexed,dc=jeb"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     deleteOperation = conn.processDelete(DN
-        .decode("dc=unindexed,dc=jeb"));
+        .valueOf("dc=unindexed,dc=jeb"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
 
     for (int i = 0; (connections != null) && (i < connections.length); i++)
@@ -418,7 +418,7 @@
     mods.add(new Modification(ModificationType.ADD, Attributes.create(
         "ds-privilege-name", "jmx-read")));
     ModifyOperation modifyOperation =
-         rootConnection.processModify(DN.decode(user), mods);
+         rootConnection.processModify(DN.valueOf(user), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
     //  Try connection withoutJMX_READ privilege
@@ -441,7 +441,7 @@
     mods.add(new Modification(ModificationType.DELETE,
         Attributes.create("ds-privilege-name", "jmx-read")));
     modifyOperation =
-         rootConnection.processModify(DN.decode(user), mods);
+         rootConnection.processModify(DN.valueOf(user), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
     // Try connection withoutJMX_READ privilege
@@ -587,7 +587,7 @@
 
       DeleteOperation deleteOperation =
            conn.processDelete(
-                DN.decode("cn=Telex Number,cn=Syntaxes,cn=config"));
+                DN.valueOf("cn=Telex Number,cn=Syntaxes,cn=config"));
       assertEquals(deleteOperation.getResultCode(),
                    ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
     }
@@ -620,7 +620,7 @@
         Attributes.create("ds-cfg-size-limit", "2000")));
 
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode("cn=config"), mods);
+         conn.processModify(DN.valueOf("cn=config"), mods);
     if (hasPrivilege)
     {
       assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
@@ -629,7 +629,7 @@
       mods.add(new Modification(ModificationType.REPLACE,
           Attributes.create("ds-cfg-size-limit", "1000")));
 
-      modifyOperation = conn.processModify(DN.decode("cn=config"), mods);
+      modifyOperation = conn.processModify(DN.valueOf("cn=config"), mods);
       assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     }
     else
@@ -663,7 +663,7 @@
     assertEquals(conn.hasPrivilege(Privilege.JMX_WRITE, null), hasPrivilege);
 
     ModifyDNOperation modifyDNOperation =
-         conn.processModifyDN(DN.decode("cn=Work Queue,cn=config"),
+         conn.processModifyDN(DN.valueOf("cn=Work Queue,cn=config"),
                               RDN.decode("cn=New RDN for Work Queue"), true,
                               null);
     if (hasPrivilege)
@@ -712,7 +712,7 @@
         Attributes.create("attributetypes", attrDefinition)));
 
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode("cn=schema"), mods);
+         conn.processModify(DN.valueOf("cn=schema"), mods);
     if (hasPrivilege)
     {
       assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
@@ -721,7 +721,7 @@
       mods.add(new Modification(ModificationType.DELETE,
           Attributes.create("attributetypes", attrDefinition)));
 
-      modifyOperation = conn.processModify(DN.decode("cn=schema"), mods);
+      modifyOperation = conn.processModify(DN.valueOf("cn=schema"), mods);
       assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     }
     else
@@ -1114,7 +1114,7 @@
 
     ArrayList<Control> controls = new ArrayList<Control>(1);
     controls.add(new ProxiedAuthV1Control(
-                          DN.decode("cn=PWReset Target,o=test")));
+                          DN.valueOf("cn=PWReset Target,o=test")));
 
 
     // Try to add the entry.  If this fails with the proxy control, then add it
@@ -1228,7 +1228,7 @@
     // privileges the user actually has.
     boolean hasProxyPrivilege = conn.hasPrivilege(Privilege.PROXIED_AUTH, null);
 
-    DN targetDN = DN.decode("cn=PWReset Target,o=test");
+    DN targetDN = DN.valueOf("cn=PWReset Target,o=test");
     ArrayList<Control> controls = new ArrayList<Control>(1);
     controls.add(new ProxiedAuthV1Control(targetDN));
 
@@ -1434,7 +1434,7 @@
     // privileges the user actually has.
     boolean hasProxyPrivilege = conn.hasPrivilege(Privilege.PROXIED_AUTH, null);
 
-    DN targetDN = DN.decode("cn=PWReset Target,o=test");
+    DN targetDN = DN.valueOf("cn=PWReset Target,o=test");
     ArrayList<Control> controls = new ArrayList<Control>(1);
     controls.add(new ProxiedAuthV2Control(
                           ByteString.valueOf("dn:" + targetDN.toString())));
@@ -1507,7 +1507,7 @@
 
 
     Entry testEntry =
-               DirectoryServer.getEntry(DN.decode("cn=Test User,o=test"));
+               DirectoryServer.getEntry(DN.valueOf("cn=Test User,o=test"));
     AuthenticationInfo authInfo = new AuthenticationInfo(testEntry, false);
     JmxConnectionHandler jmxCtx = getJmxConnectionHandler();
     JmxClientConnection testConnection =
@@ -1527,7 +1527,7 @@
     mods.add(new Modification(ModificationType.ADD,
         Attributes.create("ds-privilege-name", "jmx-read")));
     ModifyOperation modifyOperation =
-         rootConnection.processModify(DN.decode("cn=Test User,o=test"), mods);
+         rootConnection.processModify(DN.valueOf("cn=Test User,o=test"), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     assertTrue(testConnection.hasPrivilege(Privilege.JMX_READ, null));
 
@@ -1538,13 +1538,13 @@
     mods.add(new Modification(ModificationType.DELETE,
         Attributes.create("ds-privilege-name", "jmx-read")));
     modifyOperation =
-         rootConnection.processModify(DN.decode("cn=Test User,o=test"), mods);
+         rootConnection.processModify(DN.valueOf("cn=Test User,o=test"), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     assertFalse(testConnection.hasPrivilege(Privilege.JMX_READ, null));
 
 
     DeleteOperation deleteOperation =
-         rootConnection.processDelete(DN.decode("cn=Test User,o=test"));
+         rootConnection.processDelete(DN.valueOf("cn=Test User,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -1562,7 +1562,7 @@
   {
     // Make sure that a root connection doesn't  have the proxied auth
     // privilege.
-    DN unprivRootDN = DN.decode("cn=Unprivileged Root,cn=Root DNs,cn=config");
+    DN unprivRootDN = DN.valueOf("cn=Unprivileged Root,cn=Root DNs,cn=config");
     Entry unprivRootEntry = DirectoryServer.getEntry(unprivRootDN);
     AuthenticationInfo authInfo = new AuthenticationInfo(unprivRootEntry, true);
     JmxConnectionHandler jmxCtx = getJmxConnectionHandler();
@@ -1580,7 +1580,7 @@
         Attributes.create("ds-cfg-default-root-privilege-name",
                                     "proxied-auth")));
     ModifyOperation modifyOperation =
-         internalRootConn.processModify(DN.decode("cn=Root DNs,cn=config"),
+         internalRootConn.processModify(DN.valueOf("cn=Root DNs,cn=config"),
                                         mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
@@ -1598,7 +1598,7 @@
         Attributes.create("ds-cfg-default-root-privilege-name",
                                     "proxied-auth")));
     modifyOperation =
-         internalRootConn.processModify(DN.decode("cn=Root DNs,cn=config"),
+         internalRootConn.processModify(DN.valueOf("cn=Root DNs,cn=config"),
                                         mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
@@ -1626,7 +1626,7 @@
           throws Exception
   {
     TaskBackend taskBackend =
-         (TaskBackend) DirectoryServer.getBackend(DN.decode("cn=tasks"));
+         (TaskBackend) DirectoryServer.getBackend(DN.valueOf("cn=tasks"));
     Task task = taskBackend.getScheduledTask(taskEntryDN);
     if (task == null)
     {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxTestCase.java
index 2bfd86a..273af8d 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.protocols.jmx;
 
@@ -135,7 +135,7 @@
         InternalClientConnection.nextMessageID(),
         new ArrayList<Control>(),
         DN
-            .decode("cn=JMX Connection Handler,cn=Connection Handlers,cn=config"),
+            .valueOf("cn=JMX Connection Handler,cn=Connection Handlers,cn=config"),
         mods);
     op.run();
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/PostConnectedDisconnectTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/PostConnectedDisconnectTest.java
index c9d1e2d..75fa471 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/PostConnectedDisconnectTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/PostConnectedDisconnectTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.jmx;
 
@@ -98,7 +99,7 @@
         .getRootConnection();
 
     DeleteOperation deleteOperation = conn.processDelete(DN
-        .decode("cn=Privileged User,o=test"));
+        .valueOf("cn=Privileged User,o=test"));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java
index 76f88f0..f5da364 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
 
@@ -285,7 +286,7 @@
 
 
     //Test case for a full encode decode operation with an empty DN params.
-    addEncoded = new AddResponseProtocolOp(resultCode, resultMsg, DN.nullDN(),
+    addEncoded = new AddResponseProtocolOp(resultCode, resultMsg, DN.rootDN(),
                                            referralURLs);
     builder.clear();
     addEncoded.write(writer);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java
index c4cc190..8e9a6d7 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
 
@@ -72,7 +73,7 @@
     {
         List<String> referralURLs=new ArrayList<String>();
         referralURLs.add(url);
-        DN responseDn = DN.decode(dn);
+        DN responseDn = DN.valueOf(dn);
         ByteString serverSASLCredentials =
             ByteString.valueOf(saslCreds);
         BindResponseProtocolOp r =
@@ -100,7 +101,7 @@
    */
     @Test
     public void testBindResponseTooMany() throws Exception {
-      DN responseDn = DN.decode(dn);
+      DN responseDn = DN.valueOf(dn);
 
       ByteStringBuilder bsb = new ByteStringBuilder();
       ASN1Writer writer = ASN1.getWriter(bsb);
@@ -143,7 +144,7 @@
    */
     @Test
     public void testBindResponseBadReferral() throws Exception {
-      DN responseDn = DN.decode(dn);
+      DN responseDn = DN.valueOf(dn);
       ByteString serverSASLCredentials =
           ByteString.valueOf(saslCreds);
 
@@ -174,7 +175,7 @@
     public void testBindResponseEncodeDecode() throws Exception {
         List<String> referralURLs=new ArrayList<String>();
         referralURLs.add(url);
-        DN responseDn = DN.decode(dn);
+        DN responseDn = DN.valueOf(dn);
         ByteString serverSASLCredentials =
             ByteString.valueOf(saslCreds);
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java
index 4628b50..4019039 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
 
@@ -291,7 +292,7 @@
 
 
     //Test case for a full encode decode operation with an empty DN params.
-    deleteEncoded = new CompareResponseProtocolOp(resultCode, resultMsg, DN.nullDN(),
+    deleteEncoded = new CompareResponseProtocolOp(resultCode, resultMsg, DN.rootDN(),
                                                  referralURLs);
     builder.clear();
     deleteEncoded.write(writer);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java
index 75106bf..aeef923 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
 
@@ -287,7 +288,7 @@
 
 
     //Test case for a full encode decode operation with an empty DN params.
-    deleteEncoded = new DeleteResponseProtocolOp(resultCode, resultMsg, DN.nullDN(),
+    deleteEncoded = new DeleteResponseProtocolOp(resultCode, resultMsg, DN.rootDN(),
                                            referralURLs);
     builder.clear();
     deleteEncoded.write(writer);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java
index 8f73443..5c0bfc6 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
 
@@ -291,7 +292,7 @@
 
 
     //Test case for a full encode decode operation with an empty DN params.
-    deleteEncoded = new ModifyDNResponseProtocolOp(resultCode, resultMsg, DN.nullDN(),
+    deleteEncoded = new ModifyDNResponseProtocolOp(resultCode, resultMsg, DN.rootDN(),
                                                   referralURLs);
     builder.clear();
     deleteEncoded.write(writer);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java
index da07fad..27c388e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
 
@@ -291,7 +292,7 @@
 
 
     //Test case for a full encode decode operation with an empty DN params.
-    modifyEncoded = new ModifyResponseProtocolOp(resultCode, resultMsg, DN.nullDN(),
+    modifyEncoded = new ModifyResponseProtocolOp(resultCode, resultMsg, DN.rootDN(),
                                                  referralURLs);
     builder.clear();
     modifyEncoded.write(writer);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ChangeNumberControlPluginTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ChangeNumberControlPluginTestCase.java
index 5fc8214..af297a8 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ChangeNumberControlPluginTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ChangeNumberControlPluginTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.replication;
 
@@ -67,7 +67,7 @@
   public void setUp() throws Exception {
     super.setUp();
 
-    baseDn = DN.decode(TEST_ROOT_DN_STRING);
+    baseDn = DN.valueOf(TEST_ROOT_DN_STRING);
 
     replServerPort = TestCaseUtils.findFreePort();
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/DependencyTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/DependencyTest.java
index 6314d5e..39a518d 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/DependencyTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/DependencyTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication;
 
@@ -69,7 +69,7 @@
   @BeforeClass
   public void setup() throws Exception
   {
-     TEST_ROOT_DN = DN.decode(TEST_ROOT_DN_STRING);
+     TEST_ROOT_DN = DN.valueOf(TEST_ROOT_DN_STRING);
   }
   
   /**
@@ -150,7 +150,7 @@
         entry.removeAttribute(uidType);
         entry.addAttribute(Attributes.create("entryuuid", stringUID(sequence+1)),
                            new LinkedList<AttributeValue>());
-        addDN = DN.decode("dc=dependency" + sequence + "," + addDN);
+        addDN = DN.valueOf("dc=dependency" + sequence + "," + addDN);
         AddMsg addMsg =
           new AddMsg(gen.newCSN(), addDN, stringUID(sequence+1),
                      stringUID(sequence),
@@ -184,7 +184,7 @@
       addDN = TEST_ROOT_DN;
       for (sequence = 1; sequence<=AddSequenceLength; sequence ++)
       {
-        addDN = DN.decode("dc=dependency" + sequence + "," + addDN);
+        addDN = DN.valueOf("dc=dependency" + sequence + "," + addDN);
 
         boolean found = checkEntryHasAttribute(addDN, "description", "test", 10000, true);
         assertTrue(found, "The modification was not replayed on entry " + addDN);
@@ -210,7 +210,7 @@
       {
         DeleteMsg delMsg = new DeleteMsg(deleteDN, gen.newCSN(), stringUID(sequence + 1));
         broker.publish(delMsg);
-        deleteDN = deleteDN.getParent();
+        deleteDN = deleteDN.parent();
       }
 
       domain.enable();
@@ -218,7 +218,7 @@
       // check that entry just below the base entry was deleted.
       // (we can't delete the base entry because some other tests might
       // have added other children)
-      DN node1 = DN.decode("dc=dependency1," + TEST_ROOT_DN_STRING);
+      DN node1 = DN.valueOf("dc=dependency1," + TEST_ROOT_DN_STRING);
       Entry baseEntry = getEntry(node1, 30000, false);
       assertNull(baseEntry,
                  "The last entry of the DEL sequence was not deleted.");
@@ -289,7 +289,7 @@
       entry.addAttribute(Attributes.create("entryuuid",
                          stringUID(renamedEntryUuid)),
                          new LinkedList<AttributeValue>());
-      DN addDN = DN.decode("dc=moddndel" + "," + TEST_ROOT_DN_STRING);
+      DN addDN = DN.valueOf("dc=moddndel" + "," + TEST_ROOT_DN_STRING);
       AddMsg addMsg =
           new AddMsg(gen.newCSN(), addDN, stringUID(renamedEntryUuid),
                    stringUID(1),
@@ -314,7 +314,7 @@
                         stringUID(1), true, null, "dc=new_name");
       broker.publish(moddnMsg);
       DeleteMsg delMsg =
-        new DeleteMsg(DN.decode("dc=new_name" + "," + TEST_ROOT_DN_STRING),
+        new DeleteMsg(DN.valueOf("dc=new_name" + "," + TEST_ROOT_DN_STRING),
                       gen.newCSN(), stringUID(renamedEntryUuid));
       broker.publish(delMsg);
 
@@ -323,7 +323,7 @@
 
       // check that entry does not exist anymore.
       Thread.sleep(10000);
-      found = checkEntryHasAttribute(DN.decode("dc=new_name" + "," + TEST_ROOT_DN_STRING),
+      found = checkEntryHasAttribute(DN.valueOf("dc=new_name" + "," + TEST_ROOT_DN_STRING),
                                      "entryuuid",
                                      stringUID(renamedEntryUuid),
                                      30000, false);
@@ -416,7 +416,7 @@
         entry.removeAttribute(uidType);
         entry.addAttribute(Attributes.create("entryuuid", stringUID(sequence+1)),
                            new LinkedList<AttributeValue>());
-        DN addDN = DN.decode("dc=dependency" + sequence + "," + TEST_ROOT_DN_STRING);
+        DN addDN = DN.valueOf("dc=dependency" + sequence + "," + TEST_ROOT_DN_STRING);
         AddMsg addMsg =
           new AddMsg(gen.newCSN(), addDN, stringUID(sequence+1),
                      stringUID(1),
@@ -455,7 +455,7 @@
         String addDn = "dc=dependency" + sequence + "," + TEST_ROOT_DN_STRING;
 
         boolean found =
-          checkEntryHasAttribute(DN.decode(addDn), "entryuuid",
+          checkEntryHasAttribute(DN.valueOf(addDn), "entryuuid",
                                  stringUID(sequence+1025),
                                  30000, true);
         if (!found)
@@ -466,7 +466,7 @@
 
       for (sequence = 1; sequence<=AddSequenceLength; sequence ++)
       {
-        DN deleteDN = DN.decode("dc=dependency" + sequence + "," + TEST_ROOT_DN_STRING);
+        DN deleteDN = DN.valueOf("dc=dependency" + sequence + "," + TEST_ROOT_DN_STRING);
         DeleteMsg delMsg = new DeleteMsg(deleteDN,
                                          gen.newCSN(),
                                          stringUID(sequence + 1025));
@@ -474,7 +474,7 @@
       }
 
       // check that the database was cleaned successfully
-      DN node1 = DN.decode("dc=dependency1," + TEST_ROOT_DN_STRING);
+      DN node1 = DN.valueOf("dc=dependency1," + TEST_ROOT_DN_STRING);
       Entry baseEntry = getEntry(node1, 30000, false);
       assertNull(baseEntry,
         "The entry were not removed succesfully after test completion.");
@@ -537,7 +537,7 @@
         entry.removeAttribute(uidType);
         entry.addAttribute(Attributes.create("entryuuid", stringUID(sequence+1)),
                            new LinkedList<AttributeValue>());
-        addDN = DN.decode("dc=dependency" + sequence + "," + TEST_ROOT_DN_STRING);
+        addDN = DN.valueOf("dc=dependency" + sequence + "," + TEST_ROOT_DN_STRING);
         AddMsg addMsg =
           new AddMsg(gen.newCSN(), addDN, stringUID(sequence+1),
                      stringUID(1),
@@ -562,7 +562,7 @@
       // check that all entries have been renamed
       for (sequence = 1; sequence<=AddSequenceLength; sequence ++)
       {
-        addDN = DN.decode("dc=new_dep" + sequence + "," + TEST_ROOT_DN_STRING);
+        addDN = DN.valueOf("dc=new_dep" + sequence + "," + TEST_ROOT_DN_STRING);
         Entry baseEntry = getEntry(addDN, 30000, true);
         assertNotNull(baseEntry,
           "The rename was not applied correctly on :" + addDN);
@@ -571,7 +571,7 @@
       // delete the entries to clean the database.
       for (sequence = 1; sequence<=AddSequenceLength; sequence ++)
       {
-        addDN = DN.decode("dc=new_dep" + sequence + "," + TEST_ROOT_DN_STRING);
+        addDN = DN.valueOf("dc=new_dep" + sequence + "," + TEST_ROOT_DN_STRING);
         DeleteMsg delMsg = new DeleteMsg(addDN, gen.newCSN(), stringUID(sequence + 1));
         broker.publish(delMsg);
       }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
index 9471505..57bb7cb 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication;
 
@@ -163,7 +163,7 @@
     super.setUp();
 
     replServerPort = TestCaseUtils.findFreePorts(3);
-    baseDN = DN.decode(baseDnStr);
+    baseDN = DN.valueOf(baseDnStr);
 
     updatedEntries = newLDIFEntries();
 
@@ -195,7 +195,7 @@
 
       debugInfo("Search Entry: " + dn);
 
-      DN entryDN = DN.decode(dn);
+      DN entryDN = DN.valueOf(dn);
 
       try
       {
@@ -412,10 +412,10 @@
       String synchroServerStringDN = "cn=" + testName + ", cn=domains," + SYNCHRO_PLUGIN_DN;
       assertNotNull(synchroServerEntry);
 
-      DN synchroServerDN = DN.decode(synchroServerStringDN);
+      DN synchroServerDN = DN.valueOf(synchroServerStringDN);
 
       Entry ecle = DirectoryServer.getConfigHandler().getEntry(
-          DN.decode("cn=external changelog," + synchroServerStringDN));
+          DN.valueOf("cn=external changelog," + synchroServerStringDN));
       if (ecle!=null)
       {
         DirectoryServer.getConfigHandler().deleteEntry(ecle.getDN(), null);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
index dec8127..9ff523e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication;
 
@@ -137,7 +137,7 @@
     log("Setup: debugEnabled:" + debugEnabled());
 
     // This test suite depends on having the schema available.
-    baseDN = DN.decode(EXAMPLE_DN);
+    baseDN = DN.valueOf(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
@@ -200,7 +200,7 @@
 
       log("Search Entry: " + dn);
 
-      DN entryDN = DN.decode(dn);
+      DN entryDN = DN.valueOf(dn);
 
       Entry resultEntry = getEntry(entryDN, 1000, true);
       if (resultEntry == null)
@@ -1333,7 +1333,7 @@
     // do not try to remove non-leaves
     entriesToCleanup.removeAll(Arrays.asList(
         baseDN,
-        DN.decode("ou=people," + EXAMPLE_DN)));
+        DN.valueOf("ou=people," + EXAMPLE_DN)));
     super.cleanRealEntries();
 
     remove(replServer1, replServer2, replServer3);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java
index 9e24553..c9ebf2b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.replication;
 
@@ -250,7 +250,7 @@
     // This test suite depends on having the schema available.
     super.setUp();
 
-    baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
 
     replServerPort = TestCaseUtils.findFreePort();
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java
index bb657c8..7d49788 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2009 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.replication;
 
@@ -153,7 +153,7 @@
   {
     // Delete the entry we are going to use to make sure that
     // we do test something.
-    DN entryDN = DN.decode("dc=fooUniqueName1," + EXAMPLE_DN);
+    DN entryDN = DN.valueOf("dc=fooUniqueName1," + EXAMPLE_DN);
     connection.processDelete(entryDN);
 
     task("dn: ds-task-id=" + UUID.randomUUID()
@@ -200,7 +200,7 @@
   {
     // delete the entry we are going to use to make sure that
     // we do test something.
-    DN entryDN = DN.decode("dc=fooUniqueName2," + EXAMPLE_DN);
+    DN entryDN = DN.valueOf("dc=fooUniqueName2," + EXAMPLE_DN);
     connection.processDelete(entryDN);
 
     String path = reSyncTempDir.getAbsolutePath() + File.pathSeparator + "ReSynchTest";
@@ -243,7 +243,7 @@
     callParanoiaCheck = false;
 
     // Do not try to remove non leaves
-    entriesToCleanup.remove(DN.decode(EXAMPLE_DN));
+    entriesToCleanup.remove(DN.valueOf(EXAMPLE_DN));
     super.classCleanUp();
 
     TestCaseUtils.clearJEBackend(false, "userRoot", EXAMPLE_DN);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
index 52fa8cf..74f0d20 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication;
 
@@ -270,8 +270,8 @@
 
   protected void deleteEntry(DN dn) throws Exception
   {
-    if (dn.getParent().getRDN().toString().equalsIgnoreCase("cn=domains"))
-      deleteEntry(DN.decode("cn=external changelog," + dn));
+    if (dn.parent().rdn().toString().equalsIgnoreCase("cn=domains"))
+      deleteEntry(DN.valueOf("cn=external changelog," + dn));
 
     DeleteOperation op = connection.processDelete(dn);
     assertTrue(op.getResultCode() == SUCCESS || op.getResultCode() == NO_SUCH_OBJECT,
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java
index 96de39d..52e42d5 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.replication;
 
@@ -115,7 +115,7 @@
 
     cleanUpReplicationServersDB();
 
-    final DN baseDN = DN.decode("cn=schema");
+    final DN baseDN = DN.valueOf("cn=schema");
 
     ReplicationBroker broker =
       openReplicationSession(baseDN, 2, 100, replServerPort, 5000);
@@ -183,7 +183,7 @@
 
     cleanUpReplicationServersDB();
 
-    final DN baseDN = DN.decode("cn=schema");
+    final DN baseDN = DN.valueOf("cn=schema");
 
     ReplicationBroker broker =
       openReplicationSession(baseDN, 2, 100, replServerPort, 5000);
@@ -220,7 +220,7 @@
 
     cleanUpReplicationServersDB();
 
-    final DN baseDN = DN.decode("cn=schema");
+    final DN baseDN = DN.valueOf("cn=schema");
 
     ReplicationBroker broker =
       openReplicationSession(baseDN, 3, 100, replServerPort, 5000);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
index 6851a7e..bf6ee1f 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock As.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.replication;
 
@@ -81,7 +81,7 @@
     logError(Message.raw(Category.SYNC, Severity.NOTICE,
         "Starting replication StressTest : fromServertoBroker"));
 
-    final DN baseDN = DN.decode("ou=People," + TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf("ou=People," + TEST_ROOT_DN_STRING);
     final int TOTAL_MESSAGES = 1000;
 
     ReplicationBroker broker =
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java
index 2508268..193a526 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication;
 
@@ -109,7 +109,7 @@
   {
     super.setUp();
 
-    baseDN = DN.decode("ou=People," + TEST_ROOT_DN_STRING);
+    baseDN = DN.valueOf("ou=People," + TEST_ROOT_DN_STRING);
 
     // Create necessary backend top level entry
     String topEntry = "dn: " + baseDN + "\n"
@@ -171,7 +171,7 @@
      */
     user1entryUUID = "33333333-3333-3333-3333-333333333333";
     user1entrysecondUUID = "22222222-2222-2222-2222-222222222222";
-    user1dn = DN.decode("uid=user1" + tc + "," + baseDN);
+    user1dn = DN.valueOf("uid=user1" + tc + "," + baseDN);
     personWithUUIDEntry = TestCaseUtils.entryFromLdifString("dn: "+ user1dn + "\n"
       + "objectClass: top\n" + "objectClass: person\n"
       + "objectClass: organizationalPerson\n"
@@ -205,7 +205,7 @@
       + "entryUUID: "+ user1entrysecondUUID + "\n");
 
     user3UUID = "44444444-4444-4444-4444-444444444444";
-    user3dn = DN.decode("uid=user3" + tc + "," + baseDN);
+    user3dn = DN.valueOf("uid=user3" + tc + "," + baseDN);
     user3Entry = TestCaseUtils.entryFromLdifString("dn: "+ user3dn + "\n"
       + "objectClass: top\n" + "objectClass: person\n"
       + "objectClass: organizationalPerson\n"
@@ -222,9 +222,9 @@
       + "userPassword: password\n" + "initials: AA\n"
       + "entryUUID: " + user3UUID + "\n");
 
-    domain1dn = DN.decode("dc=domain1," + baseDN);
-    domain2dn = DN.decode("dc=domain2,dc=domain1," + baseDN);
-    domain3dn = DN.decode("dc=domain3,dc=domain1," + baseDN);
+    domain1dn = DN.valueOf("dc=domain1," + baseDN);
+    domain2dn = DN.valueOf("dc=domain2,dc=domain1," + baseDN);
+    domain3dn = DN.valueOf("dc=domain3,dc=domain1," + baseDN);
     domain1 = TestCaseUtils.entryFromLdifString(
         "dn:" + domain1dn + "\n"
         + "objectClass:domain\n"
@@ -404,7 +404,7 @@
   public void modifyConflicts() throws Exception
   {
     testSetUp("modifyConflicts");
-    final DN dn1 = DN.decode("cn=test1," + baseDN);
+    final DN dn1 = DN.valueOf("cn=test1," + baseDN);
     final AttributeType attrType =
          DirectoryServer.getAttributeType("displayname");
     final AttributeType entryuuidType =
@@ -574,7 +574,7 @@
     // send a modify operation with the correct unique ID but another DN
     List<Modification> mods = generatemods("telephonenumber", "01 02 45");
     ModifyMsg modMsg = new ModifyMsg(gen.newCSN(),
-        DN.decode("cn=something," + baseDN), mods, user1entryUUID);
+        DN.valueOf("cn=something," + baseDN), mods, user1entryUUID);
     updateMonitorCount(baseDN, resolvedMonitorAttr);
       int alertCount = DummyAlertHandler.getAlertCount();
     broker.publish(modMsg);
@@ -654,7 +654,7 @@
       // used above
       updateMonitorCount(baseDN, resolvedMonitorAttr);
       alertCount = DummyAlertHandler.getAlertCount();
-      DN delDN = DN.decode("cn=anotherdn," + baseDN);
+      DN delDN = DN.valueOf("cn=anotherdn," + baseDN);
       broker.publish(new DeleteMsg(delDN, gen.newCSN(), user1entryUUID));
 
       // check that the delete operation has been applied
@@ -681,7 +681,7 @@
       broker.publish(addMsg(gen, personWithSecondUniqueID, user1entrysecondUUID, baseUUID));
 
       // Check that the entry has been renamed and created in the local DS.
-      DN dn2 = DN.decode("entryuuid=" + user1entrysecondUUID + " + " + user1dn);
+      DN dn2 = DN.valueOf("entryuuid=" + user1entrysecondUUID + " + " + user1dn);
       final Entry entryAfterAdd = getEntry(dn2, 10000, true);
       assertNotNull(entryAfterAdd, "The ADD replication message was not applied");
       assertEquals(getMonitorDelta(), 1);
@@ -707,7 +707,7 @@
      */
       String addDN = "uid=new person,o=nothere,o=below," + baseDN;
     AddMsg addMsg = new AddMsg(gen.newCSN(),
-        DN.decode(addDN),
+        DN.valueOf(addDN),
         user1entryUUID,
         baseUUID,
         personWithUUIDEntry.getObjectClassAttribute(),
@@ -717,7 +717,7 @@
     broker.publish(addMsg);
 
     //  Check that the entry has been created in the local DS.
-      DN newPersonDN = DN.decode("uid=new person," + baseDN);
+      DN newPersonDN = DN.valueOf("uid=new person," + baseDN);
       assertNotNull(getEntry(newPersonDN, 10000, true),
           "The ADD replication message was not applied");
     assertEquals(getMonitorDelta(), 1);
@@ -762,7 +762,7 @@
     broker.publish(modDnMsg);
 
       // check that the operation has been correctly relayed
-      assertNotNull(getEntry(DN.decode("uid=newrdn," + baseDN), 10000, true),
+      assertNotNull(getEntry(DN.valueOf("uid=newrdn," + baseDN), 10000, true),
           "The modify dn was not or badly replayed");
       assertEquals(getMonitorDelta(), 1);
       assertConflictAutomaticallyResolved(alertCount);
@@ -771,14 +771,14 @@
     /*
      * same test but by giving a bad entry DN
      */
-      DN modDN = DN.decode("uid=wrong," + baseDN);
+      DN modDN = DN.valueOf("uid=wrong," + baseDN);
     modDnMsg = new ModifyDNMsg(modDN, gen.newCSN(),
         user1entryUUID, null, false, null, "uid=reallynewrdn");
     updateMonitorCount(baseDN, resolvedMonitorAttr);
       alertCount = DummyAlertHandler.getAlertCount();
     broker.publish(modDnMsg);
 
-      DN reallyNewDN = DN.decode("uid=reallynewrdn," + baseDN);
+      DN reallyNewDN = DN.valueOf("uid=reallynewrdn," + baseDN);
 
       // check that the operation has been correctly relayed
       assertNotNull(getEntry(reallyNewDN, 10000, true),
@@ -808,7 +808,7 @@
       broker.publish(modDnMsg);
 
       // check that the second entry has been renamed
-      DN dn = DN.decode("entryUUID = " + user1entrysecondUUID + "+uid=reallynewrdn," + baseDN);
+      DN dn = DN.valueOf("entryUUID = " + user1entrysecondUUID + "+uid=reallynewrdn," + baseDN);
       final Entry entryAfterModDN = getEntry(dn, 10000, true);
       assertNotNull(entryAfterModDN, "The modifyDN was not or incorrectly replayed");
       assertEquals(getMonitorDelta(), 1);
@@ -817,8 +817,8 @@
 
 
       // delete the entries to clean the database
-      DN delDN2 = DN.decode(
-          "entryUUID = " + user1entrysecondUUID + "+" + user1dn.getRDN() + "," + baseDN);
+      DN delDN2 = DN.valueOf(
+          "entryUUID = " + user1entrysecondUUID + "+" + user1dn.rdn() + "," + baseDN);
       broker.publish(new DeleteMsg(delDN2, gen.newCSN(), user1entrysecondUUID));
       assertNull(getEntry(delDN2, 10000, false),
           "The DELETE replication message was not replayed");
@@ -843,8 +843,8 @@
      * - publish msg
      * - check that the Dn has been changed to baseDn2 in the msg received
      */
-      DN baseDN1 = DN.decode("ou=baseDn1," + baseDN);
-      DN baseDN2 = DN.decode("ou=baseDn2," + baseDN);
+      DN baseDN1 = DN.valueOf("ou=baseDn1," + baseDN);
+      DN baseDN2 = DN.valueOf("ou=baseDn2," + baseDN);
 
       // - create parent entry 1 with baseDn1
       connection.processAdd(TestCaseUtils.entryFromLdifString(
@@ -856,7 +856,7 @@
           "Entry not added: " + baseDN1);
 
     // - create Add Msg for user1 with parent entry 1 UUID
-    DN newPersonDN2 = DN.decode("uid=new person," + baseDN1);
+    DN newPersonDN2 = DN.valueOf("uid=new person," + baseDN1);
     addMsg = new AddMsg(gen.newCSN(),
         newPersonDN2,
         user1entryUUID,
@@ -887,7 +887,7 @@
       // - check that the DN has been changed to baseDn2
       assertNull(getEntry(newPersonDN2, 10000, false),
           "The ADD replication message was applied under " + baseDN1);
-      assertNotNull(getEntry(DN.decode("uid=new person," + baseDN2), 10000, true),
+      assertNotNull(getEntry(DN.valueOf("uid=new person," + baseDN2), 10000, true),
           "The ADD replication message was NOT applied under " + baseDN2);
       assertEquals(getMonitorDelta(), 1);
       assertConflictAutomaticallyResolved(alertCount);
@@ -908,9 +908,9 @@
     domain2uid = getEntryUUID(domain2dn);
     addEntry(domain3);
     domain3uid = getEntryUUID(domain3dn);
-    DN conflictDomain2dn = DN.decode(
+    DN conflictDomain2dn = DN.valueOf(
         "entryUUID = " + domain2uid + "+dc=domain2," + baseDN);
-    DN conflictDomain3dn = DN.decode(
+    DN conflictDomain3dn = DN.valueOf(
         "entryUUID = " + domain3uid + "+dc=domain3," + baseDN);
 
       updateMonitorCount(baseDN, unresolvedMonitorAttr);
@@ -1033,7 +1033,7 @@
 
       // check that the entry have been correctly marked as conflicting.
       assertTrue(checkEntryHasAttribute(
-          DN.decode("uid=new person," + baseDN2),
+          DN.valueOf("uid=new person," + baseDN2),
           LDAPReplicationDomain.DS_SYNC_CONFLICT,
           "uid=newrdn," + baseDN2, 1000, true));
     }
@@ -1141,7 +1141,7 @@
       assertClientReceivesExpectedMsg(broker, ModifyMsg.class, personEntry.getDN());
 
       // Modify the entry DN
-      DN newDN = DN.decode("uid= new person," + baseDN);
+      DN newDN = DN.valueOf("uid= new person," + baseDN);
       connection.processModifyDN(personEntry.getDN(),
           RDN.decode("uid=new person"), true, baseDN);
       assertTrue(DirectoryServer.entryExists(newDN),
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/common/MultiDomainServerStateTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/common/MultiDomainServerStateTest.java
index 5f9d77e..c3aa734 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/common/MultiDomainServerStateTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/common/MultiDomainServerStateTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.replication.common;
 
@@ -60,8 +61,8 @@
   @Test
   public void testUpdateCSN() throws Exception
   {
-    final DN dn1 = DN.decode("o=test1");
-    final DN dn2 = DN.decode("o=test2");
+    final DN dn1 = DN.valueOf("o=test1");
+    final DN dn2 = DN.valueOf("o=test2");
 
     final MultiDomainServerState state = new MultiDomainServerState();
     assertTrue(state.update(dn1, csn1));
@@ -77,8 +78,8 @@
   @Test
   public void testUpdateServerState() throws Exception
   {
-    final DN dn1 = DN.decode("o=test1");
-    final DN dn2 = DN.decode("o=test2");
+    final DN dn1 = DN.valueOf("o=test1");
+    final DN dn2 = DN.valueOf("o=test2");
 
     final MultiDomainServerState state = new MultiDomainServerState();
     final ServerState ss1 = new ServerState();
@@ -95,8 +96,8 @@
   @Test
   public void testUpdateMultiDomainServerState() throws Exception
   {
-    final DN dn1 = DN.decode("o=test1");
-    final DN dn2 = DN.decode("o=test2");
+    final DN dn1 = DN.valueOf("o=test1");
+    final DN dn2 = DN.valueOf("o=test2");
 
     final MultiDomainServerState state1 = new MultiDomainServerState();
     state1.update(dn1, csn3);
@@ -112,8 +113,8 @@
   @Test(dependsOnMethods = { "testUpdateCSN" })
   public void testEqualsTo() throws Exception
   {
-    final DN dn1 = DN.decode("o=test1");
-    final DN dn2 = DN.decode("o=test2");
+    final DN dn1 = DN.valueOf("o=test1");
+    final DN dn2 = DN.valueOf("o=test2");
 
     final MultiDomainServerState state1 = new MultiDomainServerState();
     assertTrue(state1.update(dn1, csn3));
@@ -134,8 +135,8 @@
   @Test(dependsOnMethods = { "testUpdateCSN" })
   public void testIsEmpty() throws Exception
   {
-    final DN dn1 = DN.decode("o=test1");
-    final DN dn2 = DN.decode("o=test2");
+    final DN dn1 = DN.valueOf("o=test1");
+    final DN dn2 = DN.valueOf("o=test2");
 
     final MultiDomainServerState state = new MultiDomainServerState();
     assertTrue(state.isEmpty());
@@ -155,9 +156,9 @@
   @Test(dependsOnMethods = { "testUpdateCSN" })
   public void testRemoveCSN() throws Exception
   {
-    final DN dn1 = DN.decode("o=test1");
-    final DN dn2 = DN.decode("o=test2");
-    final DN dn3 = DN.decode("o=test3");
+    final DN dn1 = DN.valueOf("o=test1");
+    final DN dn2 = DN.valueOf("o=test2");
+    final DN dn3 = DN.valueOf("o=test3");
 
     final MultiDomainServerState state = new MultiDomainServerState();
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java
index 87b3581..434c835 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -815,7 +815,7 @@
 
         // Check monitoring values
         Thread.sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
-        DN baseDN = DN.decode(SAFE_DATA_DN);
+        DN baseDN = DN.valueOf(SAFE_DATA_DN);
         new MonitorAssertions(baseDN)
           .assertValue("assured-sd-sent-updates", 1)
           .assertValue("assured-sd-timeout-updates", 1)
@@ -830,7 +830,7 @@
         // No error should be seen in monitoring and update should have not been
         // sent in assured mode
         Thread.sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
-        DN baseDN = DN.decode(NOT_ASSURED_DN);
+        DN baseDN = DN.valueOf(NOT_ASSURED_DN);
         new MonitorAssertions(baseDN).assertRemainingValuesAreZero();
         assertNoServerErrors(baseDN);
       }
@@ -925,7 +925,7 @@
 
         // Check monitoring values
         Thread.sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
-        DN baseDN = DN.decode(SAFE_READ_DN);
+        DN baseDN = DN.valueOf(SAFE_READ_DN);
         new MonitorAssertions(baseDN)
           .assertValue("assured-sr-sent-updates", 1)
           .assertValue("assured-sr-not-acknowledged-updates", 1)
@@ -941,7 +941,7 @@
         // No error should be seen in monitoring and update should have not been
         // sent in assured mode
         Thread.sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
-        DN baseDN = DN.decode(NOT_ASSURED_DN);
+        DN baseDN = DN.valueOf(NOT_ASSURED_DN);
         new MonitorAssertions(baseDN).assertRemainingValuesAreZero();
         assertNoServerErrors(baseDN);
       }
@@ -1065,7 +1065,7 @@
 
       // Check monitoring values
       Thread.sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
-      DN baseDN = DN.decode(SAFE_DATA_DN);
+      DN baseDN = DN.valueOf(SAFE_DATA_DN);
       new MonitorAssertions(baseDN)
         .assertValue("assured-sd-sent-updates", 1)
         .assertValue("assured-sd-acknowledged-updates", 1)
@@ -1110,7 +1110,7 @@
 
       // Check monitoring values
       Thread.sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
-      DN baseDN = DN.decode(SAFE_READ_DN);
+      DN baseDN = DN.valueOf(SAFE_READ_DN);
       new MonitorAssertions(baseDN)
         .assertValue("assured-sr-sent-updates", 1)
         .assertValue("assured-sr-acknowledged-updates", 1)
@@ -1152,7 +1152,7 @@
         "objectClass: top\n" +
         "objectClass: organizationalUnit\n";
       Entry entry = TestCaseUtils.entryFromLdifString(entryStr);
-      String parentUid = getEntryUUID(DN.decode(SAFE_READ_DN));
+      String parentUid = getEntryUUID(DN.valueOf(SAFE_READ_DN));
 
       try {
         AckMsg ackMsg = replicationServer.sendAssuredAddMsg(entry, parentUid);
@@ -1170,7 +1170,7 @@
         assertEquals(ackMsg.getFailedServers().size(), 0);
 
         // Check for monitoring data
-        DN baseDN = DN.decode(SAFE_READ_DN);
+        DN baseDN = DN.valueOf(SAFE_READ_DN);
         new MonitorAssertions(baseDN)
           .assertValue("assured-sr-received-updates", 1)
           .assertValue("assured-sr-received-updates-acked", 1)
@@ -1236,7 +1236,7 @@
         "objectClass: top\n" +
         "objectClass: organizationalUnit\n";
       Entry entry = TestCaseUtils.entryFromLdifString(entryStr);
-      String parentUid = getEntryUUID(DN.decode(SAFE_DATA_DN));
+      String parentUid = getEntryUUID(DN.valueOf(SAFE_DATA_DN));
 
       AckMsg ackMsg = replicationServer.sendAssuredAddMsg(entry, parentUid);
       fail("DS should not reply an ack in safe data mode, however, it replied: " + ackMsg);
@@ -1288,7 +1288,7 @@
       // - timeout error
       // - server 10 error
       Thread.sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
-      DN baseDN = DN.decode(SAFE_DATA_DN);
+      DN baseDN = DN.valueOf(SAFE_DATA_DN);
       new MonitorAssertions(baseDN)
         .assertValue("assured-sd-sent-updates", 1)
         .assertValue("assured-sd-timeout-updates", 1)
@@ -1306,7 +1306,7 @@
       // - timeout error
       // - server 10 error, server 20 error
       Thread.sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
-      baseDN = DN.decode(SAFE_DATA_DN);
+      baseDN = DN.valueOf(SAFE_DATA_DN);
       new MonitorAssertions(baseDN)
         .assertValue("assured-sd-sent-updates", 2)
         .assertValue("assured-sd-timeout-updates", 2)
@@ -1323,7 +1323,7 @@
       // Check monitoring values
       // No ack should have comen back, so timeout incremented (flag and error for rs)
       Thread.sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
-      baseDN = DN.decode(SAFE_DATA_DN);
+      baseDN = DN.valueOf(SAFE_DATA_DN);
       new MonitorAssertions(baseDN)
         .assertValue("assured-sd-sent-updates", 3)
         .assertValue("assured-sd-timeout-updates", 3)
@@ -1396,7 +1396,7 @@
       // - replay error
       // - server 10 error, server 20 error
       Thread.sleep(1000); // Sleep a while as counters are updated just after sending thread is unblocked
-      DN baseDN = DN.decode(SAFE_READ_DN);
+      DN baseDN = DN.valueOf(SAFE_READ_DN);
       new MonitorAssertions(baseDN)
         .assertValue("assured-sr-sent-updates", 1)
         .assertValue("assured-sr-not-acknowledged-updates", 1)
@@ -1457,7 +1457,7 @@
    */
   private void deleteEntry(String dn) throws Exception
   {
-    DN realDN = DN.decode(dn);
+    DN realDN = DN.valueOf(dn);
     DeleteOperation delOp = connection.processDelete(realDN);
     waitOpResult(delOp, ResultCode.SUCCESS);
     assertNull(DirectoryServer.getEntry(realDN));
@@ -1476,7 +1476,7 @@
     // Find monitoring entry for requested base DN
     SearchFilter monitorFilter = SearchFilter.createFilterFromString(
         "(&(cn=Directory server*)(domain-name=" + baseDN + "))");
-    DN dn = DN.decode("cn=replication,cn=monitor");
+    DN dn = DN.valueOf("cn=replication,cn=monitor");
 
     InternalSearchOperation op;
     int count = 0;
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/DomainFakeCfg.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/DomainFakeCfg.java
index 29ca5a1..e18a0f4 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/DomainFakeCfg.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/DomainFakeCfg.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -163,7 +163,7 @@
   {
     this.replicationServers = new TreeSet<String>();
     this.replicationServers.add(replServer);
-    this.baseDN = DN.decode(baseDN);
+    this.baseDN = DN.valueOf(baseDN);
     this.serverId = serverId;
   }
 
@@ -266,7 +266,7 @@
   {
     try
     {
-      return DN.decode("cn=domain, cn=domains,cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config");
+      return DN.valueOf("cn=domain, cn=domains,cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config");
     } catch (DirectoryException e)
     {
       return null;
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java
index 59a7bb0..7c5293b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -239,7 +239,7 @@
 
       // check that entry has been created and that it does not contain
       // forbidden attributes
-      Entry newEntry = getEntry(DN.decode(ENTRY_DN), TIMEOUT, true);
+      Entry newEntry = getEntry(DN.valueOf(ENTRY_DN), TIMEOUT, true);
       checkEntryFilteredAfterAdd(newEntry, EXCLUDE_FRAC_MODE, fractionalConf);
 
       // perform modify operation (modify forbidden attributes +
@@ -350,7 +350,7 @@
 
       // check that entry has been created and that it does not contain
       // forbidden attributes
-      Entry newEntry = getEntry(DN.decode(ENTRY_DN), TIMEOUT, true);
+      Entry newEntry = getEntry(DN.valueOf(ENTRY_DN), TIMEOUT, true);
       checkEntryFilteredAfterAdd(newEntry, INCLUDE_FRAC_MODE, fractionalConf);
 
       // perform modify operation (modify forbidden attributes +
@@ -375,7 +375,7 @@
   {
     SortedSet<String> replicationServers = newSortedSet("localhost:" + replServerPort);
 
-    DN baseDN = DN.decode(firstBackend ? TEST_ROOT_DN_STRING : TEST2_ROOT_DN_STRING);
+    DN baseDN = DN.valueOf(firstBackend ? TEST_ROOT_DN_STRING : TEST2_ROOT_DN_STRING);
     replicationDomain = new FakeReplicationDomain(baseDN, DS2_ID, replicationServers, 1000, generationId);
 
     // Test connection
@@ -644,7 +644,7 @@
 
   private long readGenIdFromSuffixRootEntry(String rootDn) throws Exception
   {
-    DN baseDN = DN.decode(rootDn);
+    DN baseDN = DN.valueOf(rootDn);
     Entry resultEntry = getEntry(baseDN, 1000, true);
     if (resultEntry == null)
     {
@@ -749,7 +749,7 @@
       mod = new Modification(ModificationType.ADD, attr);
       mods.add(mod);
 
-      DN entryDn = DN.decode(firstBackend ? ENTRY_DN : ENTRY_DN2);
+      DN entryDn = DN.valueOf(firstBackend ? ENTRY_DN : ENTRY_DN2);
       ModifyMsg modifyMsg = new ModifyMsg(gen.newCSN(), entryDn, mods, ENTRY_UUID);
       replicationDomain.publish(modifyMsg);
   }
@@ -991,7 +991,7 @@
       // The domain should go in bad gen as backend is not initialized with
       // fractional data
       LDAPReplicationDomain fractionalReplicationDomain =
-        MultimasterReplication.findDomain(DN.decode(TEST2_ROOT_DN_STRING), null);
+        MultimasterReplication.findDomain(DN.valueOf(TEST2_ROOT_DN_STRING), null);
       waitForDomainStatus(fractionalReplicationDomain,
         ServerStatus.BAD_GEN_ID_STATUS, 5);
 
@@ -1074,7 +1074,7 @@
 
       // check that entry has been created and that it does not contain
       // forbidden attributes
-      Entry newEntry = getEntry(DN.decode(ENTRY_DN2), TIMEOUT, true);
+      Entry newEntry = getEntry(DN.valueOf(ENTRY_DN2), TIMEOUT, true);
       checkEntryFilteredAfterAdd(newEntry, EXCLUDE_FRAC_MODE, fractionalConf);
 
       // perform modify operation (modify forbidden attributes +
@@ -1096,7 +1096,7 @@
       throws Exception
   {
     AttributeType synchroAttrType = DirectoryServer.getAttributeType(SYNCHRO_OPTIONAL_ATTR.toLowerCase());
-    DN dn = DN.decode(entryDN);
+    DN dn = DN.valueOf(entryDN);
 
     Entry entry = null;
     boolean synchroAttrFound = false;
@@ -1229,7 +1229,7 @@
       // The domain should go in bad gen as backend is not initialized with
       // fractional data
       LDAPReplicationDomain fractionalReplicationDomain =
-        MultimasterReplication.findDomain(DN.decode(TEST2_ROOT_DN_STRING), null);
+        MultimasterReplication.findDomain(DN.valueOf(TEST2_ROOT_DN_STRING), null);
       waitForDomainStatus(fractionalReplicationDomain,
         ServerStatus.BAD_GEN_ID_STATUS, 5);
 
@@ -1309,7 +1309,7 @@
 
       // check that entry has been created and that it does not contain
       // forbidden attributes
-      Entry newEntry = getEntry(DN.decode(ENTRY_DN2), TIMEOUT, true);
+      Entry newEntry = getEntry(DN.valueOf(ENTRY_DN2), TIMEOUT, true);
       checkEntryFilteredAfterAdd(newEntry, INCLUDE_FRAC_MODE, fractionalConf);
 
       // perform modify operation (modify forbidden attributes +
@@ -1572,10 +1572,10 @@
        * the forbidden attributes
        */
       String newEntryName = "displayName=ValueToBeKept," + TEST_ROOT_DN_STRING ;
-      DN newEntryDn = DN.decode(newEntryName);
+      DN newEntryDn = DN.valueOf(newEntryName);
 
       // Create modify dn message to modify the entry.
-      ModifyDNMsg modDnMsg = new ModifyDNMsg(DN.decode(entryName), gen.newCSN(),
+      ModifyDNMsg modDnMsg = new ModifyDNMsg(DN.valueOf(entryName), gen.newCSN(),
         ENTRY_UUID, ENTRY_UUID3, false, TEST_ROOT_DN_STRING,
         "displayName=ValueToBeKept", null);
 
@@ -1653,10 +1653,10 @@
        * the forbidden attributes
        */
       String newEntryName = "displayName=ValueToBeKept," + TEST_ROOT_DN_STRING ;
-      DN newEntryDn = DN.decode(newEntryName);
+      DN newEntryDn = DN.valueOf(newEntryName);
 
       // Create modify dn message to modify the entry.
-      ModifyDNMsg modDnMsg = new ModifyDNMsg(DN.decode(entryName), gen.newCSN(),
+      ModifyDNMsg modDnMsg = new ModifyDNMsg(DN.valueOf(entryName), gen.newCSN(),
         ENTRY_UUID, ENTRY_UUID3, false, TEST_ROOT_DN_STRING,
         "displayName=ValueToBeKept", null);
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/GroupIdHandshakeTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/GroupIdHandshakeTest.java
index 9133db8..16ec20f 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/GroupIdHandshakeTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/GroupIdHandshakeTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -107,7 +107,7 @@
     }
 
     // Clear any reference to a domain in synchro plugin
-    MultimasterReplication.deleteDomain(DN.decode(TEST_ROOT_DN_STRING));
+    MultimasterReplication.deleteDomain(DN.valueOf(TEST_ROOT_DN_STRING));
     remove(rs1, rs2, rs3);
     rs1 = rs2 = rs3 = null;
     rs1Port = rs2Port = rs3Port = -1;
@@ -300,7 +300,7 @@
       int groupId, String testCase) throws Exception
   {
     SortedSet<String> replServers = createRSListForTestCase(testCase);
-    DN baseDn = DN.decode(TEST_ROOT_DN_STRING);
+    DN baseDn = DN.valueOf(TEST_ROOT_DN_STRING);
     DomainFakeCfg domainConf =
         new DomainFakeCfg(baseDn, serverId, replServers, groupId);
     LDAPReplicationDomain replicationDomain =
@@ -479,7 +479,7 @@
        * Change group id of DS1 and DS2 to 1 and see them reconnect to RS1
        */
       SortedSet<String> replServers = createRSListForTestCase(testCase);
-      DN baseDn = DN.decode(TEST_ROOT_DN_STRING);
+      DN baseDn = DN.valueOf(TEST_ROOT_DN_STRING);
       DomainFakeCfg domainConfWithNewGid =  new DomainFakeCfg(baseDn, DS1_ID, replServers, 1);
       rd1.applyConfigurationChange(domainConfWithNewGid);
       domainConfWithNewGid = new DomainFakeCfg(baseDn, DS2_ID, replServers, 1);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalCsnOrderingTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalCsnOrderingTest.java
index 1ab8e64..0027e40 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalCsnOrderingTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalCsnOrderingTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -113,7 +113,7 @@
   public void buildAndPublishMissingChangesOneEntryTest() throws Exception
   {
     final int serverId = 123;
-    final DN baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
     TestCaseUtils.initializeTestBackend(true);
     ReplicationServer rs = createReplicationServer();
     // Create Replication Server and Domain
@@ -122,7 +122,7 @@
     try
     {
       long startTime = TimeThread.getTime();
-      final DN dn1 = DN.decode("cn=test1," + baseDN);
+      final DN dn1 = DN.valueOf("cn=test1," + baseDN);
     final AttributeType histType =
       DirectoryServer.getAttributeType(EntryHistorical.HISTORICAL_ATTRIBUTE_NAME);
 
@@ -216,7 +216,7 @@
   @Test()
   public void buildAndPublishMissingChangesSeveralEntriesTest() throws Exception
   {
-    final DN baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
     TestCaseUtils.initializeTestBackend(true);
     ReplicationServer rs = createReplicationServer();
     // Create Replication Server and Domain
@@ -229,9 +229,9 @@
     "Starting replication test : changesCmpTest"));
 
     // Add 3 entries.
-    DN dnTest1 = DN.decode("cn=test1," + baseDN);
-    DN dnTest2 = DN.decode("cn=test2," + baseDN);
-    DN dnTest3 = DN.decode("cn=test3," + baseDN);
+    DN dnTest1 = DN.valueOf("cn=test1," + baseDN);
+    DN dnTest2 = DN.valueOf("cn=test2," + baseDN);
+    DN dnTest3 = DN.valueOf("cn=test3," + baseDN);
     TestCaseUtils.addEntry(
         "dn: " + dnTest3,
         "displayname: Test1",
@@ -325,7 +325,7 @@
   private LDAPReplicationDomain createReplicationDomain(int dsId)
           throws DirectoryException, ConfigException
   {
-    final DN baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
     final DomainFakeCfg domainConf = new DomainFakeCfg(
         baseDN, dsId, replServers, AssuredType.NOT_ASSURED, 2, 1, 0, null);
     LDAPReplicationDomain replicationDomain = MultimasterReplication.createNewDomain(domainConf);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java
index 16926d6..de71a1b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -166,7 +166,7 @@
     assertEquals(LDAPModify.mainModify(args, false, null, System.err), 0);
 
     // Read the entry back to get its history operational attribute.
-    DN dn = DN.decode("uid=user.1," + TEST_ROOT_DN_STRING);
+    DN dn = DN.valueOf("uid=user.1," + TEST_ROOT_DN_STRING);
     Entry entry = DirectoryServer.getEntry(dn);
 
     List<Attribute> attrs = EntryHistorical.getHistoricalAttr(entry);
@@ -224,9 +224,9 @@
   @Test(enabled=true, groups="slow")
   public void conflictSingleValue() throws Exception
   {
-    final DN dn1 = DN.decode("cn=test1," + TEST_ROOT_DN_STRING);
-    final DN dn2 = DN.decode("cn=test2," + TEST_ROOT_DN_STRING);
-    final DN baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    final DN dn1 = DN.valueOf("cn=test1," + TEST_ROOT_DN_STRING);
+    final DN dn2 = DN.valueOf("cn=test2," + TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
     final AttributeType attrType =
          DirectoryServer.getAttributeType("displayname");
     final AttributeType entryuuidType =
@@ -344,7 +344,7 @@
   @Test()
   public void historicalAdd() throws Exception
   {
-    final DN dn1 = DN.decode("cn=testHistoricalAdd,o=test");
+    final DN dn1 = DN.valueOf("cn=testHistoricalAdd,o=test");
 
     // Clear the backend.
     TestCaseUtils.initializeTestBackend(true);
@@ -400,7 +400,7 @@
     "deleteoldrdn: 1");
 
     // Read the modified entry.
-    final DN dn2 = DN.decode("cn=test2,o=test");
+    final DN dn2 = DN.valueOf("cn=test2,o=test");
     entry = DirectoryServer.getEntry(dn2);
 
     // use historical information to generate new list of operations
@@ -452,7 +452,7 @@
         AddMsg addmsg = addOp.generateMessage();
         assertEquals(dn1, addmsg.getDN());
         assertEquals(addmsg.getEntryUUID(), EntryHistorical.getEntryUUID(entry));
-        String parentId = LDAPReplicationDomain.findEntryUUID(dn1.getParent());
+        String parentId = LDAPReplicationDomain.findEntryUUID(dn1.parent());
         assertEquals(addmsg.getParentEntryUUID(), parentId);
 
         addmsg.createOperation(InternalClientConnection.getRootConnection());
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/IsolationTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/IsolationTest.java
index 705b3cd..b70b6e0 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/IsolationTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/IsolationTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -58,7 +58,7 @@
   public void noUpdateIsolationPolicyTest() throws Exception
   {
     LDAPReplicationDomain domain = null;
-    DN baseDn = DN.decode(TEST_ROOT_DN_STRING);
+    DN baseDn = DN.valueOf(TEST_ROOT_DN_STRING);
     int serverId = 1;
 
     try
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ModifyConflictTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ModifyConflictTest.java
index aeba2c5..f264185 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ModifyConflictTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ModifyConflictTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -1238,7 +1238,7 @@
      * resolution for the description attribute. Always use the same values
      * for all these tests.
      */
-    DN dn = DN.decode(TEST_ROOT_DN_STRING);
+    DN dn = DN.valueOf(TEST_ROOT_DN_STRING);
     Map<ObjectClass, String> objectClasses = new HashMap<ObjectClass, String>();
     ObjectClass org = DirectoryServer.getObjectClass(ORGANIZATION);
     objectClasses.put(org, ORGANIZATION);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/NamingConflictTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/NamingConflictTest.java
index 8122a1a..2c20e6c 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/NamingConflictTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/NamingConflictTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -73,7 +73,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    final DN baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
 
     TestSynchronousReplayQueue queue = new TestSynchronousReplayQueue();
     DomainFakeCfg conf = new DomainFakeCfg(baseDN, 1, new TreeSet<String>());
@@ -91,7 +91,7 @@
        */
       CSNGenerator gen = new CSNGenerator(201, 0);
 
-      String parentUUID = getEntryUUID(DN.decode(TEST_ROOT_DN_STRING));
+      String parentUUID = getEntryUUID(DN.valueOf(TEST_ROOT_DN_STRING));
 
       Entry entry = TestCaseUtils.entryFromLdifString(
           "dn: cn=simultaneousModrdnConflict, "+ TEST_ROOT_DN_STRING + "\n"
@@ -162,7 +162,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    final DN baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
 
     TestSynchronousReplayQueue queue = new TestSynchronousReplayQueue();
     DomainFakeCfg conf = new DomainFakeCfg(baseDN, 1, new TreeSet<String>());
@@ -197,7 +197,7 @@
 
       // Add the first entry
       TestCaseUtils.addEntry(entry);
-      String parentUUID = getEntryUUID(DN.decode(TEST_ROOT_DN_STRING));
+      String parentUUID = getEntryUUID(DN.valueOf(TEST_ROOT_DN_STRING));
 
       CSN csn1 = gen.newCSN();
 
@@ -246,7 +246,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    final DN baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
 
     TestSynchronousReplayQueue queue = new TestSynchronousReplayQueue();
     DomainFakeCfg conf = new DomainFakeCfg(baseDN, 1, new TreeSet<String>());
@@ -281,7 +281,7 @@
 
       // Add the first entry
       TestCaseUtils.addEntry(entry);
-      String parentUUID = getEntryUUID(DN.decode(TEST_ROOT_DN_STRING));
+      String parentUUID = getEntryUUID(DN.valueOf(TEST_ROOT_DN_STRING));
 
       CSN csn1 = gen.newCSN();
 
@@ -351,7 +351,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    final DN baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
 
     TestSynchronousReplayQueue queue = new TestSynchronousReplayQueue();
     DomainFakeCfg conf = new DomainFakeCfg(baseDN, 1, new TreeSet<String>());
@@ -420,7 +420,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    final DN baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
 
     TestSynchronousReplayQueue queue = new TestSynchronousReplayQueue();
     DomainFakeCfg conf = new DomainFakeCfg(baseDN, 1, new TreeSet<String>());
@@ -484,7 +484,7 @@
 
       // Expect the child entry to be moved as conflict entry under the root
       // entry of the suffix
-      DN childDN = DN.decode("entryuuid="+childUUID+
+      DN childDN = DN.valueOf("entryuuid="+childUUID+
           "+cn=child,o=test");
       assertTrue(DirectoryServer.entryExists(childDN),
           "Child entry conflict exist with DN="+childDN);
@@ -500,7 +500,7 @@
   {
     TestCaseUtils.initializeTestBackend(true);
 
-    final DN baseDN = DN.decode(TEST_ROOT_DN_STRING);
+    final DN baseDN = DN.valueOf(TEST_ROOT_DN_STRING);
 
     TestSynchronousReplayQueue queue = new TestSynchronousReplayQueue();
     DomainFakeCfg conf = new DomainFakeCfg(baseDN, 1, new TreeSet<String>());
@@ -567,7 +567,7 @@
 
       // Expect the child entry to be moved as conflict entry under the root
       // entry of the suffix
-      DN childDN = DN.decode("entryuuid="+childUUID+
+      DN childDN = DN.valueOf("entryuuid="+childUUID+
           "+cn=child,o=test");
       assertTrue(DirectoryServer.entryExists(childDN),
           "Child entry conflict exist with DN="+childDN);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/PersistentServerStateTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/PersistentServerStateTest.java
index d22bf02..39efba2 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/PersistentServerStateTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/PersistentServerStateTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.replication.plugin;
 
@@ -69,7 +69,7 @@
      * Then creates a new PersistentServerState and check that the
      * 2 csns have been saved in this new PersistentServerState.
      */
-    DN baseDn = DN.decode(dn);
+    DN baseDn = DN.valueOf(dn);
     ServerState origState = new ServerState();
     PersistentServerState state =
       new PersistentServerState(baseDn,  1, origState);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java
index e2298a5..4e49969 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -101,7 +101,7 @@
     }
 
     // Clear any reference to a domain in synchro plugin
-    MultimasterReplication.deleteDomain(DN.decode(TEST_ROOT_DN_STRING));
+    MultimasterReplication.deleteDomain(DN.valueOf(TEST_ROOT_DN_STRING));
     remove(rs1, rs2);
     rs1 = rs2 = null;
     rs1Port = rs2Port = -1;
@@ -134,7 +134,7 @@
       rs2 = createReplicationServer(RS2_ID, testCase);
 
       // Start DS1
-      DN baseDn = DN.decode(TEST_ROOT_DN_STRING);
+      DN baseDn = DN.valueOf(TEST_ROOT_DN_STRING);
       rd1 = createReplicationDomain(baseDn, DS1_ID);
 
       // Wait a bit so that connections are performed
@@ -203,7 +203,7 @@
       rs2 = createReplicationServer(RS2_ID, testCase);
 
       // Start DS1
-      DN baseDn = DN.decode(TEST_ROOT_DN_STRING);
+      DN baseDn = DN.valueOf(TEST_ROOT_DN_STRING);
       rd1 = createReplicationDomain(baseDn, DS1_ID);
       // Start DS2
       rd2 = createReplicationDomain(baseDn, DS2_ID);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java
index dbc3204..a8ca9ce 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -99,7 +99,7 @@
     }
 
     // Clear any reference to a domain in synchro plugin
-    MultimasterReplication.deleteDomain(DN.decode(TEST_ROOT_DN_STRING));
+    MultimasterReplication.deleteDomain(DN.valueOf(TEST_ROOT_DN_STRING));
     remove(rs);
     Arrays.fill(rs, null);
     Arrays.fill(rsPort, -1);
@@ -201,7 +201,7 @@
       String testCase) throws Exception
   {
     final SortedSet<String> replServers = createRSListForTestCase(testCase);
-    final DN baseDn = DN.decode(TEST_ROOT_DN_STRING);
+    final DN baseDn = DN.valueOf(TEST_ROOT_DN_STRING);
     final DomainFakeCfg domainConf =
         new DomainFakeCfg(baseDn, serverId + 1, replServers, 1);
     final LDAPReplicationDomain rd =
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java
index 13ae2f5..7ccc657 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -697,7 +697,7 @@
   public void setUp() throws Exception
   {
     super.setUp();
-    EXAMPLE_DN_ = DN.decode(EXAMPLE_DN);
+    EXAMPLE_DN_ = DN.valueOf(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
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/TopologyViewTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/TopologyViewTest.java
index 43784b3..90ba002 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/TopologyViewTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/TopologyViewTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
@@ -208,7 +208,7 @@
     }
 
     // Clear any reference to a domain in synchro plugin
-    MultimasterReplication.deleteDomain(DN.decode(TEST_ROOT_DN_STRING));
+    MultimasterReplication.deleteDomain(DN.valueOf(TEST_ROOT_DN_STRING));
     remove(rs1, rs2, rs3);
     rs1 = rs2 = rs3 = null;
     rs1Port = rs2Port = rs3Port = -1;
@@ -449,7 +449,7 @@
       fail("Unknown replication domain server id.");
     }
 
-    DN baseDn = DN.decode(TEST_ROOT_DN_STRING);
+    DN baseDn = DN.valueOf(TEST_ROOT_DN_STRING);
     DomainFakeCfg domainConf =
         new DomainFakeCfg(baseDn, dsId, replServers, assuredType,
             assuredSdLevel, groupId, 0, refUrls);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/ProtocolCompatibilityTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/ProtocolCompatibilityTest.java
index 6720b2f..a6708fb 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/ProtocolCompatibilityTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/ProtocolCompatibilityTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.protocol;
 
@@ -90,12 +90,12 @@
   @DataProvider(name="createReplServerStartData")
   public Object [][] createReplServerStartData() throws Exception
   {
-    DN baseDN = DN.decode("o=test");
+    DN baseDN = DN.valueOf("o=test");
     ServerState state = new ServerState();
     state.update(new CSN(0, 0,0));
     Object[] set1 = new Object[] {1, baseDN, 0, "localhost:8989", state, 0L, (byte)0, 0};
 
-    baseDN = DN.decode("dc=example,dc=com");
+    baseDN = DN.valueOf("dc=example,dc=com");
     state = new ServerState();
     state.update(new CSN(75, 5,263));
     Object[] set2 = new Object[] {16, baseDN, 100, "anotherHost:1025", state, 1245L, (byte)25, 3456};
@@ -195,7 +195,7 @@
     byte safeDataLevel, List<Attribute> entryAttrList)
   throws Exception
   {
-    final DN dn = DN.decode(rawDN);
+    final DN dn = DN.valueOf(rawDN);
 
     // Create VLAST message
     Attribute objectClass = Attributes.create(DirectoryServer
@@ -372,7 +372,7 @@
     byte safeDataLevel, List<Attribute> entryAttrList)
   throws Exception
   {
-    final DN dn = DN.decode(rawDN);
+    final DN dn = DN.valueOf(rawDN);
 
     CSN csn = new CSN(TimeThread.getTime(), 123, 45);
     DeleteMsg msg = new DeleteMsg(dn, csn, "thisIsaUniqueID");
@@ -546,7 +546,7 @@
          throws Exception
   {
     // Create VLAST message
-    DN dn = DN.decode(rawdn);
+    DN dn = DN.valueOf(rawdn);
     ModifyMsg origVlastMsg = new ModifyMsg(csn, dn, mods, "fakeuniqueid");
 
     origVlastMsg.setAssured(isAssured);
@@ -734,7 +734,7 @@
                                    List<Attribute> entryAttrList)
          throws Exception
   {
-    final DN dn = DN.decode(rawDN);
+    final DN dn = DN.valueOf(rawDN);
 
     // Create VLAST message
     CSN csn = new CSN(TimeThread.getTime(), 596, 13);
@@ -918,7 +918,7 @@
   {
     LDAPUpdateMsg msg = (LDAPUpdateMsg) ReplicationMsg.generateMsg(
         hexStringToByteArray(encodedString), ProtocolVersion.REPLICATION_PROTOCOL_V3);
-    assertEquals(msg.getDN(), DN.decode(dn));
+    assertEquals(msg.getDN(), DN.valueOf(dn));
     assertEquals(msg.getCSN(), csn);
     assertEquals(msg.getClass(), msgType);
     BigInteger bi = new BigInteger(msg.getBytes(ProtocolVersion.REPLICATION_PROTOCOL_V3));
@@ -945,7 +945,7 @@
     // parameters
     ServerStartMsg msg = new ServerStartMsg(hexStringToByteArray(oldPdu));
     assertEquals(msg.getServerId(), serverId);
-    assertEquals(msg.getBaseDN(), DN.decode(dn));
+    assertEquals(msg.getBaseDN(), DN.valueOf(dn));
     assertEquals(msg.getGroupId(), groupId);
     BigInteger bi = new BigInteger(msg.getBytes(getCurrentVersion()));
     assertEquals(bi.toString(16), oldPdu);
@@ -971,7 +971,7 @@
     // parameters.
     ReplServerStartMsg msg = new ReplServerStartMsg(hexStringToByteArray(oldPdu));
     assertEquals(msg.getServerId(), serverId);
-    assertEquals(msg.getBaseDN(), DN.decode(dn));
+    assertEquals(msg.getBaseDN(), DN.valueOf(dn));
     assertEquals(msg.getGroupId(), groupId);
     BigInteger bi = new BigInteger(msg.getBytes(ProtocolVersion.REPLICATION_PROTOCOL_V3));
     assertEquals(bi.toString(16), oldPdu);
@@ -1231,7 +1231,7 @@
   {
     int sender = 1;
     int dest = 2;
-    DN baseDN = DN.decode("dc=whatever");
+    DN baseDN = DN.valueOf("dc=whatever");
     int initWindow = 22;
     Object[] set1 = new Object[] { sender, dest, baseDN, initWindow };
     return new Object [][] { set1};
@@ -1282,7 +1282,7 @@
     int sender = 1;
     int dest = 2;
     int initiator = 3;
-    DN baseDN = DN.decode("dc=whatever");
+    DN baseDN = DN.valueOf("dc=whatever");
     int entryCount = 56;
     int initWindow = 22;
     Object[] set1 = new Object[] {sender, dest, initiator, baseDN, entryCount, initWindow };
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java
index 135ef39..c281ed8 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.protocol;
 
@@ -74,7 +74,7 @@
   public void setUp() throws Exception
   {
     super.setUp();
-    TEST_ROOT_DN = DN.decode(TEST_ROOT_DN_STRING);
+    TEST_ROOT_DN = DN.valueOf(TEST_ROOT_DN_STRING);
   }
 
   /**
@@ -147,7 +147,7 @@
                                List<Attribute> entryAttrList)
          throws Exception
   {
-    DN dn = DN.decode(rawdn);
+    DN dn = DN.valueOf(rawdn);
     InternalClientConnection connection =
         InternalClientConnection.getRootConnection();
     ModifyMsg msg = new ModifyMsg(csn, dn, mods, "fakeuniqueid");
@@ -198,7 +198,7 @@
                                List<Attribute> entryAttrList)
          throws Exception
   {
-    DN dn = DN.decode(rawdn);
+    DN dn = DN.valueOf(rawdn);
     ModifyMsg msg = new ModifyMsg(csn, dn, mods, "fakeuniqueid");
 
     // Check isAssured
@@ -234,7 +234,7 @@
     // Check Get / Set DN
     assertEquals(msg.getDN(), generatedMsg.getDN());
 
-    DN fakeDN = DN.decode("cn=fake cn");
+    DN fakeDN = DN.valueOf("cn=fake cn");
     msg.setDN(fakeDN) ;
     assertEquals(msg.getDN(), fakeDN) ;
 
@@ -285,7 +285,7 @@
     InternalClientConnection connection =
         InternalClientConnection.getRootConnection();
     DeleteOperation deleteOp =
-      new DeleteOperationBasis(connection, 1, 1,null, DN.decode(rawDN));
+      new DeleteOperationBasis(connection, 1, 1,null, DN.valueOf(rawDN));
     if (subtree)
     {
       deleteOp.addRequestControl(new SubtreeDeleteControl(false));
@@ -375,8 +375,8 @@
       InternalClientConnection.getRootConnection();
     ModifyDNOperation op =
       new ModifyDNOperationBasis(connection, 1, 1, null,
-                  DN.decode(rawDN), RDN.decode(newRdn), deleteOldRdn,
-                  (newSuperior.length() != 0 ? DN.decode(newSuperior) : null));
+                  DN.valueOf(rawDN), RDN.decode(newRdn), deleteOldRdn,
+                  (newSuperior.length() != 0 ? DN.valueOf(newSuperior) : null));
 
     CSN csn = new CSN(TimeThread.getTime(), 123,  45);
     op.setAttachment(SYNCHROCONTEXT,
@@ -438,7 +438,7 @@
     byte safeDataLevel, List<Attribute> entryAttrList)
          throws Exception
   {
-    final DN dn = DN.decode(rawDN);
+    final DN dn = DN.valueOf(rawDN);
 
     Attribute objectClass = Attributes.create(DirectoryServer
         .getObjectClassAttributeType(), "organization");
@@ -643,14 +643,14 @@
     InternalClientConnection connection =
       InternalClientConnection.getRootConnection();
     DeleteOperation deleteOp =
-      new DeleteOperationBasis(connection, 1, 1,null, DN.decode("cn=t1"));
+      new DeleteOperationBasis(connection, 1, 1,null, DN.valueOf("cn=t1"));
     LocalBackendDeleteOperation op = new LocalBackendDeleteOperation(deleteOp);
     CSN csn = new CSN(TimeThread.getTime(), 123, 45);
     op.setAttachment(SYNCHROCONTEXT, new DeleteContext(csn, "uniqueid"));
     DeleteMsg delmsg = new DeleteMsg(op);
     long changeNumber = 21;
 
-    DN baseDN = DN.decode("dc=example,dc=com");
+    DN baseDN = DN.valueOf("dc=example,dc=com");
 
     // create a cookie
     MultiDomainServerState cookie =
@@ -1340,7 +1340,7 @@
     opList.put(attr.getAttributeType(), newList(attr));
 
     CSN csn = new CSN(TimeThread.getTime(), 123, 45);
-    DN dn = DN.decode(rawDN);
+    DN dn = DN.valueOf(rawDN);
 
     long createop = 0;
     long createmsgfromop = 0;
@@ -1415,7 +1415,7 @@
       List<Attribute> entryAttrList) throws Exception
   {
     CSN csn2 = new CSN(TimeThread.getTime(), 123, 45);
-    DN dn = DN.decode(rawdn);
+    DN dn = DN.valueOf(rawdn);
 
     long createop = 0;
     long createmsgfromop = 0;
@@ -1505,7 +1505,7 @@
 
       // create op
       DeleteOperation deleteOp =
-        new DeleteOperationBasis(connection, 1, 1,null, DN.decode(rawDN));
+        new DeleteOperationBasis(connection, 1, 1,null, DN.valueOf(rawDN));
       LocalBackendDeleteOperation op =
           new LocalBackendDeleteOperation(deleteOp);
       CSN csn = new CSN(TimeThread.getTime(), 123, 45);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java
index 282c423..5c140f6 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.server;
 
@@ -312,7 +312,7 @@
   private DomainFakeCfg newFakeCfg(int serverId, int rsPort, int groupId) throws Exception
   {
     DomainFakeCfg fakeCfg = new DomainFakeCfg(
-        DN.decode(TEST_ROOT_DN_STRING), serverId, newSortedSet("localhost:" + rsPort), groupId);
+        DN.valueOf(TEST_ROOT_DN_STRING), serverId, newSortedSet("localhost:" + rsPort), groupId);
     fakeCfg.setHeartbeatInterval(1000);
     fakeCfg.setChangetimeHeartbeatInterval(500);
     return fakeCfg;
@@ -331,7 +331,7 @@
 
       FakeReplicationServer fakeReplicationServer = new FakeReplicationServer(
         rsPort, serverId, assured, assuredMode, (byte)safeDataLevel, (byte)groupId,
-        DN.decode(TEST_ROOT_DN_STRING), generationId);
+        DN.valueOf(TEST_ROOT_DN_STRING), generationId);
 
       // Connect fake RS to the real RS
       fakeReplicationServer.connect(serverState);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
index 855d1b0..0c2358e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2014 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.server;
 
@@ -131,8 +131,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);
+    TEST_ROOT_DN = DN.valueOf(TEST_ROOT_DN_STRING);
+    TEST_ROOT_DN2 = DN.valueOf(TEST_ROOT_DN_STRING2);
 
     // This test suite depends on having the schema available.
     configure();
@@ -413,7 +413,7 @@
     try
     {
       // Create 3 ECL broker
-      final DN changelogDN = DN.decode("cn=changelog");
+      final DN changelogDN = DN.valueOf("cn=changelog");
       brokers[0] = openReplicationSession(
           changelogDN, 1111, 100, replicationServerPort, brokerSessionTimeout);
       assertTrue(brokers[0].isConnected());
@@ -493,7 +493,7 @@
 
       // open ECL broker
       serverECL = openReplicationSession(
-          DN.decode("cn=changelog"), 10, 100, replicationServerPort, brokerSessionTimeout);
+          DN.valueOf("cn=changelog"), 10, 100, replicationServerPort, brokerSessionTimeout);
       assertTrue(serverECL.isConnected());
 
       // receive change 1 from suffix 1
@@ -587,7 +587,7 @@
 
     // Use different values than other tests to avoid test interactions in concurrent test runs
     final String backendId2 = tn + 2;
-    final DN baseDN2 = DN.decode("o=" + backendId2);
+    final DN baseDN2 = DN.valueOf("o=" + backendId2);
     try
     {
       server01 = openReplicationSession(TEST_ROOT_DN, SERVER_ID_1,
@@ -853,7 +853,7 @@
 
   private DeleteMsg newDeleteMsg(String dn, CSN csn, String entryUUID) throws DirectoryException
   {
-    return new DeleteMsg(DN.decode(dn), csn, entryUUID);
+    return new DeleteMsg(DN.valueOf(dn), csn, entryUUID);
   }
 
   private InternalSearchOperation searchOnCookieChangelog(String filterString,
@@ -1045,7 +1045,7 @@
       Entry entry = TestCaseUtils.entryFromLdifString(lentry);
       AddMsg addMsg = new AddMsg(
           csns[csnCounter],
-          DN.decode("uid="+tn+"2," + TEST_ROOT_DN_STRING),
+          DN.valueOf("uid="+tn+"2," + TEST_ROOT_DN_STRING),
           user1entryUUID,
           baseUUID,
           entry.getObjectClassAttribute(),
@@ -1056,7 +1056,7 @@
 
       // Publish MOD
       csnCounter++;
-      DN baseDN = DN.decode("uid=" + tn + "3," + TEST_ROOT_DN_STRING);
+      DN baseDN = DN.valueOf("uid=" + tn + "3," + TEST_ROOT_DN_STRING);
       List<Modification> mods = createMods("description", "new value");
       ModifyMsg modMsg = new ModifyMsg(csns[csnCounter], baseDN, mods, tn + "uuid3");
       server01.publish(modMsg);
@@ -1066,7 +1066,7 @@
       csnCounter++;
       final DN newSuperior = TEST_ROOT_DN2;
       ModifyDNOperation op = new ModifyDNOperationBasis(connection, 1, 1, null,
-          DN.decode("uid="+tn+"4," + TEST_ROOT_DN_STRING), // entryDN
+          DN.valueOf("uid="+tn+"4," + TEST_ROOT_DN_STRING), // entryDN
           RDN.decode("uid="+tn+"new4"), // new rdn
           true,  // deleteoldrdn
           newSuperior);
@@ -1988,7 +1988,7 @@
   private static Backend initializeTestBackend(boolean createBaseEntry,
       String backendId) throws Exception
   {
-    DN baseDN = DN.decode("o=" + backendId);
+    DN baseDN = DN.valueOf("o=" + backendId);
 
     //  Retrieve backend. Warning: it is important to perform this each time,
     //  because a test may have disabled then enabled the backend (i.e a test
@@ -2174,7 +2174,7 @@
       debugInfo(tn, " publishes " + addMsg.getCSN());
 
       // Publish MOD
-      DN baseDN = DN.decode("uid="+tn+"3," + TEST_ROOT_DN_STRING);
+      DN baseDN = DN.valueOf("uid="+tn+"3," + TEST_ROOT_DN_STRING);
       List<Modification> mods = createMods("description", "new value");
       ModifyMsg modMsg = new ModifyMsg(csns[2], baseDN, mods, user1entryUUID);
       server01.publish(modMsg);
@@ -2182,7 +2182,7 @@
 
       // Publish modDN
       ModifyDNOperation op = new ModifyDNOperationBasis(connection, 1, 1, null,
-          DN.decode("uid="+tn+"4," + TEST_ROOT_DN_STRING), // entryDN
+          DN.valueOf("uid="+tn+"4," + TEST_ROOT_DN_STRING), // entryDN
           RDN.decode("uid="+tn+"new4"), // new rdn
           true,  // deleteoldrdn
           TEST_ROOT_DN2); // new superior
@@ -2398,7 +2398,7 @@
     debugInfo(tn, "Starting test\n\n");
 
     {
-      DN baseDN = DN.decode("cn=changelog");
+      DN baseDN = DN.valueOf("cn=changelog");
 
       evaluateSearchParameters(baseDN, -1, -1, "(objectclass=*)");
       evaluateSearchParameters(baseDN, 2, -1, "(changenumber>=2)");
@@ -2430,7 +2430,7 @@
       assertEquals(startCLmsg.getCSN(), csn);
 
       // Use change number as base object.
-      baseDN = DN.decode("changeNumber=8,cn=changelog");
+      baseDN = DN.valueOf("changeNumber=8,cn=changelog");
 
       //
       evaluateSearchParameters(baseDN, 8, 8, "(objectclass=*)");
@@ -2636,7 +2636,7 @@
     debugInfo(tn, "Starting test\n\n");
 
     final String backendId3 = "test3";
-    final DN baseDN3 = DN.decode("o=" + backendId3);
+    final DN baseDN3 = DN.valueOf("o=" + backendId3);
     Backend backend2 = null;
     Backend backend3 = null;
     LDAPReplicationDomain domain2 = null;
@@ -2713,13 +2713,13 @@
 
       // moddn robert (o=test3) to robert2 (o=test3)
       ModifyDNOperation modDNOp = connection.processModifyDN(
-          DN.decode("cn=Robert Hue," + baseDN3),
+          DN.valueOf("cn=Robert Hue," + baseDN3),
           RDN.decode("cn=Robert Hue2"), true,
           baseDN3);
       waitOpResult(modDNOp, ResultCode.SUCCESS);
 
       // del robert (o=test3)
-      final DeleteOperation delOp = connection.processDelete(DN.decode("cn=Robert Hue2," + baseDN3));
+      final DeleteOperation delOp = connection.processDelete(DN.valueOf("cn=Robert Hue2," + baseDN3));
       waitOpResult(delOp, ResultCode.SUCCESS);
 
       // Search on ECL from start on all suffixes
@@ -2767,7 +2767,7 @@
     }
     finally
     {
-      final DN fionaDN = DN.decode("cn=Fiona Jensen," + TEST_ROOT_DN_STRING2);
+      final DN fionaDN = DN.valueOf("cn=Fiona Jensen," + TEST_ROOT_DN_STRING2);
       waitOpResult(connection.processDelete(fionaDN), ResultCode.SUCCESS);
       waitOpResult(connection.processDelete(TEST_ROOT_DN2), ResultCode.SUCCESS);
       waitOpResult(connection.processDelete(baseDN3), ResultCode.SUCCESS);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/MonitorTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/MonitorTest.java
index 74297f7..4c2de1e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/MonitorTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/MonitorTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.server;
 
@@ -107,7 +107,7 @@
   {
     super.setUp();
 
-    baseDN = DN.decode(baseDnStr);
+    baseDN = DN.valueOf(baseDnStr);
   }
 
   /**
@@ -223,7 +223,7 @@
       SYNCHRO_PLUGIN_DN;
       // Must have called connectServer1ToChangelog previously
       assertTrue(synchroServerEntry != null);
-      DN synchroServerDN = DN.decode(synchroServerStringDN);
+      DN synchroServerDN = DN.valueOf(synchroServerStringDN);
       deleteEntry(synchroServerDN);
       synchroServerEntry = null;
     configEntriesToCleanup.remove(synchroServerDN);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerDynamicConfTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerDynamicConfTest.java
index 267d8d9..201d94b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerDynamicConfTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerDynamicConfTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.replication.server;
 
@@ -72,7 +72,7 @@
       replicationServer.applyConfigurationChange(newconf);
 
       ReplicationBroker broker = openReplicationSession(
-          DN.decode(TEST_ROOT_DN_STRING), 1, 10, ports[1], 1000);
+          DN.valueOf(TEST_ROOT_DN_STRING), 1, 10, ports[1], 1000);
 
       // check that the sendWindow is not null to make sure that the
       // broker did connect successfully.
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
index d3e7f11..d349a85 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.server;
 
@@ -112,8 +112,8 @@
   public void setUp() throws Exception
   {
     super.setUp();
-    TEST_ROOT_DN = DN.decode(TEST_ROOT_DN_STRING);
-    EXAMPLE_DN = DN.decode("ou=example," + TEST_ROOT_DN_STRING);
+    TEST_ROOT_DN = DN.valueOf(TEST_ROOT_DN_STRING);
+    EXAMPLE_DN = DN.valueOf("ou=example," + TEST_ROOT_DN_STRING);
 
     // This test suite depends on having the schema available.
     configure();
@@ -678,7 +678,7 @@
 
         // - Delete
         CSNGenerator csnGen = new CSNGenerator(brokerIds[0], TimeThread.getTime());
-        DN dn = DN.decode("o=example" + 0 + "," + TEST_ROOT_DN_STRING);
+        DN dn = DN.valueOf("o=example" + 0 + "," + TEST_ROOT_DN_STRING);
         DeleteMsg delMsg = new DeleteMsg(dn, csnGen.newCSN(), "uid");
         broker1.publish(delMsg);
 
@@ -772,7 +772,7 @@
         // - Delete
         CSNGenerator csnGen = new CSNGenerator(brokerIds[0], TimeThread.getTime());
 
-        DN dn = DN.decode("o=example" + 1 + "," + TEST_ROOT_DN_STRING);
+        DN dn = DN.valueOf("o=example" + 1 + "," + TEST_ROOT_DN_STRING);
         DeleteMsg delMsg = new DeleteMsg(dn, csnGen.newCSN(), "uid");
         broker1.publish(delMsg);
 
@@ -1111,7 +1111,7 @@
 
     try
     {
-      final DN baseDN2 = DN.decode("dc=domain2,dc=com");
+      final DN baseDN2 = DN.valueOf("dc=domain2,dc=com");
       server1 = openReplicationSession(TEST_ROOT_DN, 1, 100, replicationServerPort, 1000);
       server2 = openReplicationSession(baseDN2, 2, 100, replicationServerPort, 1000);
 
@@ -1208,7 +1208,7 @@
            + "objectClass: domain\n"
            + "entryUUID: 11111111-1111-1111-1111-111111111111\n");
        CSNGenerator csnGen = new CSNGenerator(serverId, TimeThread.getTime());
-       DN exampleSuffixDN = DN.decode("o=example," + suffix);
+       DN exampleSuffixDN = DN.valueOf("o=example," + suffix);
        AddMsg addMsg = new AddMsg(csnGen.newCSN(), exampleSuffixDN,
            user1entryUUID, baseUUID, entry.getObjectClassAttribute(),
            entry.getAttributes(), new ArrayList<Attribute>());
@@ -1227,7 +1227,7 @@
            + "telephonenumber: +1 408 555 1212\n"
            + "entryUUID: " + user1entryUUID +"\n"
            + "userpassword: fjen$$en" + "\n");
-       DN newPersonDN = DN.decode("uid=new person,ou=People,"+suffix);
+       DN newPersonDN = DN.valueOf("uid=new person,ou=People,"+suffix);
        AddMsg addMsg2 = new AddMsg(
            csnGen.newCSN(),
            newPersonDN,
@@ -1302,13 +1302,13 @@
          (ReplicationBackend)DirectoryServer.getBackend("replicationChanges");
        b.setServer(replicationServer);
        assertEquals(b.getEntryCount(), msgs.size());
-       assertTrue(b.entryExists(DN.decode("dc=replicationChanges")));
+       assertTrue(b.entryExists(DN.valueOf("dc=replicationChanges")));
        SearchFilter filter=SearchFilter.createFilterFromString("(objectclass=*)");
        assertTrue(b.isIndexed(filter));
 
        List<Control> requestControls = new LinkedList<Control>();
        requestControls.add(new LDAPControl(OID_INTERNAL_GROUP_MEMBERSHIP_UPDATE, false));
-       DN baseDN=DN.decode("dc=replicationChanges");
+       DN baseDN=DN.valueOf("dc=replicationChanges");
        //Test the group membership control causes search to be skipped.
        InternalSearchOperation internalSearch =
           connection.processSearch(baseDN, WHOLE_SUBTREE,
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexerTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexerTest.java
index 83c1180..28f8514 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexerTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexerTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2013-2014 ForgeRock AS
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.replication.server.changelog.je;
 
@@ -111,8 +112,8 @@
   public static void classSetup() throws Exception
   {
     TestCaseUtils.startFakeServer();
-    BASE_DN = DN.decode("dc=example,dc=com");
-    ADMIN_DATA_DN = DN.decode("cn=admin data");
+    BASE_DN = DN.valueOf("dc=example,dc=com");
+    ADMIN_DATA_DN = DN.valueOf("cn=admin data");
   }
 
   @AfterClass
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java
index 8f7717c..fb1b2e4 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEChangeNumberIndexDBTest.java
@@ -75,9 +75,9 @@
       cnIndexDB.setPurgeDelay(0);
 
       // Prepare data to be stored in the db
-      DN baseDN1 = DN.decode("o=baseDN1");
-      DN baseDN2 = DN.decode("o=baseDN2");
-      DN baseDN3 = DN.decode("o=baseDN3");
+      DN baseDN1 = DN.valueOf("o=baseDN1");
+      DN baseDN2 = DN.valueOf("o=baseDN2");
+      DN baseDN3 = DN.valueOf("o=baseDN3");
 
       CSN[] csns = newCSNs(1, 0, 3);
 
@@ -169,9 +169,9 @@
 
       // Prepare data to be stored in the db
 
-      DN baseDN1 = DN.decode("o=baseDN1");
-      DN baseDN2 = DN.decode("o=baseDN2");
-      DN baseDN3 = DN.decode("o=baseDN3");
+      DN baseDN1 = DN.valueOf("o=baseDN1");
+      DN baseDN2 = DN.valueOf("o=baseDN2");
+      DN baseDN3 = DN.valueOf("o=baseDN3");
 
       CSN[] csns = newCSNs(1, 0, 3);
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBTest.java
index 38704df..71d6791 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.server.changelog.je;
 
@@ -75,7 +75,7 @@
   @BeforeClass
   public void setup() throws Exception
   {
-    TEST_ROOT_DN = DN.decode(TEST_ROOT_DN_STRING);
+    TEST_ROOT_DN = DN.valueOf(TEST_ROOT_DN_STRING);
   }
 
   @Test(enabled=true)
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ReplicationDomainTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ReplicationDomainTest.java
index a9c222c..870088e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ReplicationDomainTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ReplicationDomainTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.service;
 
@@ -75,7 +75,7 @@
       int domain1ServerId, int domain2ServerId)
       throws Exception
   {
-    DN testService = DN.decode("o=test");
+    DN testService = DN.valueOf("o=test");
     ReplicationServer replServer1 = null;
     ReplicationServer replServer2 = null;
     FakeReplicationDomain domain1 = null;
@@ -201,7 +201,7 @@
   @Test(enabled=false)
   public void publishPerf() throws Exception
   {
-    DN testService = DN.decode("o=test");
+    DN testService = DN.valueOf("o=test");
     ReplicationServer replServer1 = null;
     int replServerID1 = 10;
     FakeReplicationDomain domain1 = null;
@@ -303,7 +303,7 @@
   public void exportAndImport(int serverId1, int serverId2) throws Exception
   {
     final int ENTRYCOUNT=5000;
-    DN testService = DN.decode("o=test");
+    DN testService = DN.valueOf("o=test");
     ReplicationServer replServer = null;
     int replServerID = 11;
     FakeReplicationDomain domain1 = null;
@@ -371,7 +371,7 @@
   public void exportAndImportAcross2ReplServers() throws Exception
   {
     final int ENTRYCOUNT=5000;
-    DN testService = DN.decode("o=test");
+    DN testService = DN.valueOf("o=test");
     ReplicationServer replServer2 = null;
     ReplicationServer replServer1 = null;
     int replServerID = 11;
@@ -454,7 +454,7 @@
   @Test(enabled=false)
   public void senderInitialize() throws Exception
   {
-    DN testService = DN.decode("o=test");
+    DN testService = DN.valueOf("o=test");
     ReplicationServer replServer = null;
     int replServerID = 12;
     FakeStressReplicationDomain domain1 = null;
@@ -487,7 +487,7 @@
   @Test(enabled=false)
   public void receiverInitialize() throws Exception
   {
-    DN testService = DN.decode("o=test");
+    DN testService = DN.valueOf("o=test");
     ReplicationServer replServer = null;
     int replServerID = 11;
     FakeStressReplicationDomain domain1 = null;
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AuthPasswordEqualityMatchingRuleTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AuthPasswordEqualityMatchingRuleTest.java
index 2f9521c..f22addd 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AuthPasswordEqualityMatchingRuleTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AuthPasswordEqualityMatchingRuleTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.schema;
 
@@ -75,7 +76,7 @@
 
     ConfigEntry configEntry =
        DirectoryServer.getConfigEntry(
-           DN.decode("cn=Salted MD5,cn=Password Storage Schemes,cn=config"));
+           DN.valueOf("cn=Salted MD5,cn=Password Storage Schemes,cn=config"));
 
     SaltedMD5PasswordStorageSchemeCfg configuration =
       AdminTestCaseUtils.getConfiguration(
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/CollationMatchingRuleTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/CollationMatchingRuleTest.java
index 62137db..325eb22 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/CollationMatchingRuleTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/CollationMatchingRuleTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 
@@ -71,10 +72,10 @@
   {
     TestCaseUtils.startServer();
     TestCaseUtils.initializeTestBackend(true);
-    user1 = DN.decode("cn=user1,dc=example,dc=com");
-    user2 = DN.decode("cn=user2,dc=example,dc=com");
-    user3 = DN.decode("cn=user3,dc=example,dc=com");
-    user4 = DN.decode("cn=user4,dc=example,dc=com");
+    user1 = DN.valueOf("cn=user1,dc=example,dc=com");
+    user2 = DN.valueOf("cn=user2,dc=example,dc=com");
+    user3 = DN.valueOf("cn=user3,dc=example,dc=com");
+    user4 = DN.valueOf("cn=user4,dc=example,dc=com");
   }
 
 
@@ -476,7 +477,7 @@
       InternalSearchOperation internalSearch =
          new InternalSearchOperation(conn, InternalClientConnection.nextOperationID(),
                   InternalClientConnection.nextMessageID(), requestControls,
-                  DN.decode("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
+                  DN.valueOf("dc=example,dc=com"), SearchScope.WHOLE_SUBTREE,
                   DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                   SearchFilter.createFilterFromString(searchFilter),
                   null, null);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/LDAPSyntaxTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/LDAPSyntaxTest.java
index 0c408f5..6ee4f8d 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/LDAPSyntaxTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/LDAPSyntaxTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.schema;
 
@@ -588,7 +588,7 @@
       SearchResultEntry e = entries.get(0);
       //An entry must be returned.
       assertNotNull(e);
-      assertTrue(e.getDN().equals(DN.decode("cn=test1,o=test")));
+      assertTrue(e.getDN().equals(DN.valueOf("cn=test1,o=test")));
     }
     finally
     {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/TimeBasedMatchingRuleTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/TimeBasedMatchingRuleTest.java
index a76551f..37ce7f5 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/TimeBasedMatchingRuleTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/TimeBasedMatchingRuleTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2010 ForgeRock AS.
+ *      Portions Copyright 2010-2014 ForgeRock AS.
  */
 
 
@@ -95,14 +95,14 @@
 
     TestCaseUtils.initializeTestBackend(true);
 
-    user1 = DN.decode("cn=user1,dc=example,dc=com");
-    user2 = DN.decode("cn=user2,dc=example,dc=com");
-    user3 = DN.decode("cn=user3,dc=example,dc=com");
-    user4 = DN.decode("cn=user4,dc=example,dc=com");
-    user5 = DN.decode("cn=user5,dc=example,dc=com");
-    user6 = DN.decode("cn=user6,dc=example,dc=com");
-    user7 = DN.decode("cn=user7,dc=example,dc=com");
-    user8 = DN.decode("cn=user!,dc=example,dc=com");
+    user1 = DN.valueOf("cn=user1,dc=example,dc=com");
+    user2 = DN.valueOf("cn=user2,dc=example,dc=com");
+    user3 = DN.valueOf("cn=user3,dc=example,dc=com");
+    user4 = DN.valueOf("cn=user4,dc=example,dc=com");
+    user5 = DN.valueOf("cn=user5,dc=example,dc=com");
+    user6 = DN.valueOf("cn=user6,dc=example,dc=com");
+    user7 = DN.valueOf("cn=user7,dc=example,dc=com");
+    user8 = DN.valueOf("cn=user!,dc=example,dc=com");
 
     /**
     Extend the schema and add an attribute which is baseed on
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/UserPasswordEqualityMatchingRuleTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/UserPasswordEqualityMatchingRuleTest.java
index c5efc11..7ba8479 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/UserPasswordEqualityMatchingRuleTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/UserPasswordEqualityMatchingRuleTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.schema;
 
@@ -74,7 +75,7 @@
 
     ConfigEntry configEntry =
        DirectoryServer.getConfigEntry(
-           DN.decode("cn=Salted MD5,cn=Password Storage Schemes,cn=config"));
+           DN.valueOf("cn=Salted MD5,cn=Password Storage Schemes,cn=config"));
 
     SaltedMD5PasswordStorageSchemeCfg configuration =
       AdminTestCaseUtils.getConfiguration(
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/AddSchemaFileTaskTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/AddSchemaFileTaskTestCase.java
index 5d82d26..8fcb0a1 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/AddSchemaFileTaskTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/AddSchemaFileTaskTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.tasks;
 
@@ -139,7 +139,7 @@
          "ds-task-schema-file-name: 05-single-valid.ldif");
     assertEquals(resultCode, 0);
 
-    Task task = getCompletedTask(DN.decode(taskDNStr));
+    Task task = getCompletedTask(DN.valueOf(taskDNStr));
     assertEquals(task.getTaskState(), TaskState.COMPLETED_SUCCESSFULLY);
     assertFalse(DirectoryServer.getSchema().getYoungestModificationTime() ==
                      beforeModifyTimestamp);
@@ -263,7 +263,7 @@
          "ds-task-schema-file-name: 05-multiple-valid-2.ldif");
     assertEquals(resultCode, 0);
 
-    Task task = getCompletedTask(DN.decode(taskDNStr));
+    Task task = getCompletedTask(DN.valueOf(taskDNStr));
     assertEquals(task.getTaskState(), TaskState.COMPLETED_SUCCESSFULLY);
     assertFalse(DirectoryServer.getSchema().getYoungestModificationTime() ==
                      beforeModifyTimestamp);
@@ -357,7 +357,7 @@
          "ds-task-schema-file-name: 05-empty.ldif");
     assertEquals(resultCode, 0);
 
-    Task task = getCompletedTask(DN.decode(taskDNStr));
+    Task task = getCompletedTask(DN.valueOf(taskDNStr));
     assertEquals(task.getTaskState(), TaskState.COMPLETED_SUCCESSFULLY);
     assertFalse(DirectoryServer.getSchema().getYoungestModificationTime() ==
                      beforeModifyTimestamp);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/AllowedTaskTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/AllowedTaskTestCase.java
index c64af9b..606d97b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/AllowedTaskTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/AllowedTaskTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 
@@ -123,7 +124,7 @@
     assertEquals(LDAPModify.mainModify(args, false, System.out, System.err),
                  LDAPResultCode.SUCCESS);
 
-    Task task = getCompletedTask(DN.decode(
+    Task task = getCompletedTask(DN.valueOf(
          "ds-task-id=testAllowedTask 2,cn=Scheduled Tasks,cn=Tasks"));
     assertNotNull(task);
     assertEquals(task.getTaskState(), TaskState.COMPLETED_SUCCESSFULLY);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java
index b907fb8..77a6f5f 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 
@@ -112,7 +113,7 @@
     // Invoke the disconnect client task.
     String taskID = "Disconnect Client " + connectionID;
     Message disconnectMessage = Message.raw("testDisconnectWithNotification");
-    DN taskDN = DN.decode("ds-task-id=" + taskID +
+    DN taskDN = DN.valueOf("ds-task-id=" + taskID +
                           ",cn=Scheduled Tasks,cn=Tasks");
     TestCaseUtils.addEntry(
       "dn: " + taskDN.toString(),
@@ -190,7 +191,7 @@
 
     // Invoke the disconnect client task.
     String taskID = "Disconnect Client " + connectionID;
-    DN taskDN = DN.decode("ds-task-id=" + taskID +
+    DN taskDN = DN.valueOf("ds-task-id=" + taskID +
                           ",cn=Scheduled Tasks,cn=Tasks");
     TestCaseUtils.addEntry(
       "dn: " + taskDN.toString(),
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/LockdownModeTaskTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/LockdownModeTaskTestCase.java
index df7ed4c..911edf0 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/LockdownModeTaskTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/LockdownModeTaskTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 
@@ -129,7 +130,7 @@
       "ds-task-id: Enter Lockdown Mode",
       "ds-task-class-name: org.opends.server.tasks.EnterLockdownModeTask");
 
-    DN taskDN = DN.decode(
+    DN taskDN = DN.valueOf(
          "ds-task-id=Enter Lockdown Mode,cn=Scheduled Tasks,cn=tasks");
 
 
@@ -261,7 +262,7 @@
       "ds-task-id: Leave Lockdown Mode",
       "ds-task-class-name: org.opends.server.tasks.LeaveLockdownModeTask");
 
-    taskDN = DN.decode(
+    taskDN = DN.valueOf(
          "ds-task-id=Leave Lockdown Mode,cn=Scheduled Tasks,cn=tasks");
 
     args = new String[]
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/TasksTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/TasksTestCase.java
index f0a751b..43a2880 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/TasksTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/TasksTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 
@@ -170,7 +171,7 @@
          throws Exception
   {
     TaskBackend taskBackend =
-         (TaskBackend) DirectoryServer.getBackend(DN.decode("cn=tasks"));
+         (TaskBackend) DirectoryServer.getBackend(DN.valueOf("cn=tasks"));
     Task task = taskBackend.getScheduledTask(taskEntryDN);
     if (task == null)
     {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/ImportLDIFTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/ImportLDIFTestCase.java
index 96d80dc..7a50342 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/ImportLDIFTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/ImportLDIFTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013-2014 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.tools;
 
@@ -512,7 +512,7 @@
     {
       TaskUtils.enableBackend(beID);
       Entry entry = DirectoryServer.getEntry(
-          DN.decode(" uid=user.0,dc=example,dc=com"));
+          DN.valueOf(" uid=user.0,dc=example,dc=com"));
       TaskUtils.disableBackend(beID);
       assertNotNull(entry);
       for (Attribute a : attrs)
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPCompareTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPCompareTestCase.java
index b4f37ce..cde5aa6 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPCompareTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPCompareTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock, AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.tools;
 
@@ -538,8 +538,8 @@
         DirectoryServer.getBackend(TestCaseUtils.TEST_BACKEND_ID);
     String dn1 = "arg=success,o=test1,o=test";
     String dn2 = "arg=success,o=test2,o=test";
-    addEntriesUpToParentDN(memoryBackend, DN.decode(dn1));
-    addEntriesUpToParentDN(memoryBackend, DN.decode(dn2));
+    addEntriesUpToParentDN(memoryBackend, DN.valueOf(dn1));
+    addEntriesUpToParentDN(memoryBackend, DN.valueOf(dn2));
 
     String[] args =
     {
@@ -591,8 +591,8 @@
         DirectoryServer.getBackend(TestCaseUtils.TEST_BACKEND_ID);
     String dn1 = "arg=success,o=test1,o=test";
     String dn2 = "arg=fail,o=test2,o=test";
-    addEntriesUpToParentDN(memoryBackend, DN.decode(dn1));
-    addEntriesUpToParentDN(memoryBackend, DN.decode(dn2));
+    addEntriesUpToParentDN(memoryBackend, DN.valueOf(dn1));
+    addEntriesUpToParentDN(memoryBackend, DN.valueOf(dn2));
 
     String[] args =
     {
@@ -643,7 +643,7 @@
     Backend memoryBackend =
         DirectoryServer.getBackend(TestCaseUtils.TEST_BACKEND_ID);
     String dn1 = "arg=success,o=test1,o=test";
-    addEntriesUpToParentDN(memoryBackend, DN.decode(dn1));
+    addEntriesUpToParentDN(memoryBackend, DN.valueOf(dn1));
 
     String[] args =
     {
@@ -684,9 +684,9 @@
   private void addEntriesUpToParentDN(Backend backend, DN entryDN)
       throws Exception
   {
-    if (!backend.entryExists(entryDN.getParent()))
+    if (!backend.entryExists(entryDN.parent()))
     {
-      addEntriesUpToParentDN(backend, entryDN.getParent());
+      addEntriesUpToParentDN(backend, entryDN.parent());
     }
     backend.addEntry(StaticUtils.createEntry(entryDN), null);
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/RebuildIndexTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/RebuildIndexTestCase.java
index 43223d7..508afa2 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/RebuildIndexTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/RebuildIndexTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tools;
 
@@ -82,7 +82,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create("ds-cfg-enabled", "false")));
     final ModifyOperation modifyOperation =
-         rootConnection.processModify(DN.decode(userRootDN), mods);
+         rootConnection.processModify(DN.valueOf(userRootDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -105,7 +105,7 @@
     mods.add(new Modification(ModificationType.REPLACE,
         Attributes.create("ds-cfg-enabled", "true")));
     final ModifyOperation modifyOperation =
-         rootConnection.processModify(DN.decode(userRootDN), mods);
+         rootConnection.processModify(DN.valueOf(userRootDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/VerifyIndexTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/VerifyIndexTestCase.java
index d242be1..866b692 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/VerifyIndexTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/VerifyIndexTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools;
 
@@ -76,7 +77,7 @@
         Attributes.create("ds-cfg-base-dn", "o=airius.com")));
     String userRootDN  = "ds-cfg-backend-id=userRoot,cn=Backends,cn=config";
     ModifyOperation modifyOperation =
-         rootConnection.processModify(DN.decode(userRootDN), mods);
+         rootConnection.processModify(DN.valueOf(userRootDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -98,7 +99,7 @@
         Attributes.create("ds-cfg-base-dn", "o=airius.com")));
     String userRootDN  = "ds-cfg-backend-id=userRoot,cn=Backends,cn=config";
     ModifyOperation modifyOperation =
-         rootConnection.processModify(DN.decode(userRootDN), mods);
+         rootConnection.processModify(DN.valueOf(userRootDN), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java
index 7d92b2a..98e12d0 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -114,7 +115,7 @@
          throws Exception
   {
     Message   msg = Message.raw("Test Constructor 3");
-    DN        dn  = DN.decode("cn=Test Constructor 3,dc=example,dc=com");
+    DN        dn  = DN.valueOf("cn=Test Constructor 3,dc=example,dc=com");
     Exception e   = new Exception("Test Constructor 3 Exception");
 
     validateException(new DirectoryException(resultCode, msg, dn, e));
@@ -145,7 +146,7 @@
          throws Exception
   {
     Message   msg     = Message.raw("Test Constructor 4");
-    DN        dn      = DN.decode("cn=Test Constructor 4,dc=example,dc=com");
+    DN        dn      = DN.valueOf("cn=Test Constructor 4,dc=example,dc=com");
     Exception e       = new Exception("Test Constructor 4 Exception");
     List<String> refs = new ArrayList<String>();
     refs.add("ldap://ldap.example.com/cn=Test Constructor 4,dc=example,dc=com");
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/PrivilegeTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/PrivilegeTestCase.java
index 1bd2aff..f0d6893 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/PrivilegeTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/PrivilegeTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -258,7 +258,7 @@
       boolean isRoot)
       throws DirectoryException
   {
-    Entry userEntry = DirectoryServer.getEntry(DN.decode(userDN));
+    Entry userEntry = DirectoryServer.getEntry(DN.valueOf(userDN));
     AuthenticationInfo authInfo = new AuthenticationInfo(userEntry, isRoot);
     return new InternalClientConnection(authInfo);
   }
@@ -293,7 +293,7 @@
 
   private void assertDeleteSuccessfully(String dn) throws DirectoryException
   {
-    DeleteOperation deleteOperation = getRootConnection().processDelete(DN.decode(dn));
+    DeleteOperation deleteOperation = getRootConnection().processDelete(DN.valueOf(dn));
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
@@ -418,7 +418,7 @@
     assertEquals(conn.hasPrivilege(Privilege.CONFIG_READ, null), hasPrivilege);
 
     CompareOperation compareOperation =
-         conn.processCompare(DN.decode("cn=config"),
+         conn.processCompare(DN.valueOf("cn=config"),
                              DirectoryServer.getAttributeType("cn"),
              ByteString.valueOf("config"));
     if (hasPrivilege)
@@ -474,7 +474,7 @@
     DN dnToRemove = entry.getDN();
     if (!hasPrivilege)
     {
-      dnToRemove = DN.decode("cn=Telex Number,cn=Syntaxes,cn=config");
+      dnToRemove = DN.valueOf("cn=Telex Number,cn=Syntaxes,cn=config");
     }
     DeleteOperation deleteOperation = conn.processDelete(dnToRemove);
     assertPrivilege(deleteOperation.getResultCode(), hasPrivilege);
@@ -506,7 +506,7 @@
                               Attributes.create("ds-cfg-size-limit", "2000")));
 
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode("cn=config"), mods);
+         conn.processModify(DN.valueOf("cn=config"), mods);
     assertPrivilege(modifyOperation.getResultCode(), hasPrivilege);
 
     if (hasPrivilege)
@@ -515,7 +515,7 @@
       mods.add(new Modification(ModificationType.REPLACE,
           Attributes.create("ds-cfg-size-limit", "1000")));
 
-      modifyOperation = conn.processModify(DN.decode("cn=config"), mods);
+      modifyOperation = conn.processModify(DN.valueOf("cn=config"), mods);
       assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -544,7 +544,7 @@
     assertEquals(conn.hasPrivilege(Privilege.CONFIG_WRITE, null), hasPrivilege);
 
     ModifyDNOperation modifyDNOperation =
-         conn.processModifyDN(DN.decode("cn=Work Queue,cn=config"),
+         conn.processModifyDN(DN.valueOf("cn=Work Queue,cn=config"),
                               RDN.decode("cn=New RDN for Work Queue"), true,
                               null);
     if (hasPrivilege)
@@ -602,7 +602,7 @@
     DN dnToRemove = entry.getDN();
     if (!hasPrivilege)
     {
-      dnToRemove = DN.decode("cn=Subentry Target,o=test");
+      dnToRemove = DN.valueOf("cn=Subentry Target,o=test");
     }
     DeleteOperation deleteOperation = conn.processDelete(dnToRemove);
     assertPrivilege(deleteOperation.getResultCode(), hasPrivilege);
@@ -636,7 +636,7 @@
                               "{base \"ou=doesnotexist\"}")));
 
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode("cn=Subentry Target,o=test"), mods);
+         conn.processModify(DN.valueOf("cn=Subentry Target,o=test"), mods);
     assertPrivilege(modifyOperation.getResultCode(), hasPrivilege);
 
     if (hasPrivilege)
@@ -646,7 +646,7 @@
           Attributes.create("subtreeSpecification", "{}")));
 
       modifyOperation = conn.processModify(
-              DN.decode("cn=Subentry Target,o=test"), mods);
+              DN.valueOf("cn=Subentry Target,o=test"), mods);
       assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -674,14 +674,14 @@
             hasPrivilege);
 
     ModifyDNOperation modifyDNOperation =
-         conn.processModifyDN(DN.decode("cn=Subentry Target,o=test"),
+         conn.processModifyDN(DN.valueOf("cn=Subentry Target,o=test"),
                               RDN.decode("cn=New Subentry Target"),
                               true, null);
     assertPrivilege(modifyDNOperation.getResultCode(), hasPrivilege);
     if (hasPrivilege)
     {
       modifyDNOperation =
-         conn.processModifyDN(DN.decode("cn=New Subentry Target,o=test"),
+         conn.processModifyDN(DN.valueOf("cn=New Subentry Target,o=test"),
                               RDN.decode("cn=Subentry Target"),
                               true, null);
       assertEquals(modifyDNOperation.getResultCode(), ResultCode.SUCCESS);
@@ -874,7 +874,7 @@
         Attributes.create("attributetypes", attrDefinition)));
 
     ModifyOperation modifyOperation =
-         conn.processModify(DN.decode("cn=schema"), mods);
+         conn.processModify(DN.valueOf("cn=schema"), mods);
     assertPrivilege(modifyOperation.getResultCode(), hasPrivilege);
 
     if (hasPrivilege)
@@ -883,7 +883,7 @@
       mods.add(new Modification(ModificationType.DELETE,
           Attributes.create("attributetypes", attrDefinition)));
 
-      modifyOperation = conn.processModify(DN.decode("cn=schema"), mods);
+      modifyOperation = conn.processModify(DN.valueOf("cn=schema"), mods);
       assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     }
   }
@@ -1234,7 +1234,7 @@
       "sn: Test");
 
     List<Control> controls = new ArrayList<Control>(1);
-    controls.add(new ProxiedAuthV1Control(DN.decode("cn=PWReset Target,o=test")));
+    controls.add(new ProxiedAuthV1Control(DN.valueOf("cn=PWReset Target,o=test")));
 
 
     // Try to add the entry.  If this fails with the proxy control, then add it
@@ -1315,7 +1315,7 @@
     // privileges the user actually has.
     boolean hasProxyPrivilege = conn.hasPrivilege(Privilege.PROXIED_AUTH, null);
 
-    DN targetDN = DN.decode("cn=PWReset Target,o=test");
+    DN targetDN = DN.valueOf("cn=PWReset Target,o=test");
     List<Control> controls = new ArrayList<Control>(1);
     controls.add(new ProxiedAuthV1Control(targetDN));
 
@@ -1468,7 +1468,7 @@
     // privileges the user actually has.
     boolean hasProxyPrivilege = conn.hasPrivilege(Privilege.PROXIED_AUTH, null);
 
-    DN targetDN = DN.decode("cn=PWReset Target,o=test");
+    DN targetDN = DN.valueOf("cn=PWReset Target,o=test");
     List<Control> controls = new ArrayList<Control>(1);
     controls.add(new ProxiedAuthV2Control(ByteString.valueOf("dn:" + targetDN)));
 
@@ -2339,7 +2339,7 @@
       assertEquals(bindResponse.getResultCode(), 0);
 
       CopyOnWriteArraySet<ClientConnection> connections = DirectoryServer
-          .getAuthenticatedUsers().get(DN.decode("cn=Test User,o=test"));
+          .getAuthenticatedUsers().get(DN.valueOf("cn=Test User,o=test"));
 
       assertNotNull(connections);
       assertEquals(connections.size(), 1);
@@ -2357,7 +2357,7 @@
       mods.add(new Modification(ModificationType.ADD, Attributes.create(
           "ds-privilege-name", "config-read")));
       ModifyOperation modifyOperation = rootConnection.processModify(
-          DN.decode("cn=Test User,o=test"), mods);
+          DN.valueOf("cn=Test User,o=test"), mods);
       assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
       assertTrue(testConnection.hasPrivilege(Privilege.CONFIG_READ, null));
 
@@ -2367,7 +2367,7 @@
       mods.add(new Modification(ModificationType.DELETE, Attributes.create(
           "ds-privilege-name", "config-read")));
       modifyOperation = rootConnection.processModify(
-          DN.decode("cn=Test User,o=test"), mods);
+          DN.valueOf("cn=Test User,o=test"), mods);
       assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
       assertFalse(testConnection.hasPrivilege(Privilege.CONFIG_READ, null));
 
@@ -2393,7 +2393,7 @@
   {
     // Make sure that a root connection doesn't  have the proxied auth
     // privilege.
-    DN unprivRootDN = DN.decode("cn=Unprivileged Root,cn=Root DNs,cn=config");
+    DN unprivRootDN = DN.valueOf("cn=Unprivileged Root,cn=Root DNs,cn=config");
     Entry unprivRootEntry = DirectoryServer.getEntry(unprivRootDN);
     AuthenticationInfo authInfo = new AuthenticationInfo(unprivRootEntry, true);
     InternalClientConnection unprivRootConn =
@@ -2408,7 +2408,7 @@
     mods.add(new Modification(ModificationType.ADD,
         Attributes.create("ds-cfg-default-root-privilege-name",
                                     "proxied-auth")));
-    ModifyOperation modifyOperation = internalRootConn.processModify(DN.decode("cn=Root DNs,cn=config"), mods);
+    ModifyOperation modifyOperation = internalRootConn.processModify(DN.valueOf("cn=Root DNs,cn=config"), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2424,7 +2424,7 @@
     mods.add(new Modification(ModificationType.DELETE,
         Attributes.create("ds-cfg-default-root-privilege-name",
                                     "proxied-auth")));
-    modifyOperation = internalRootConn.processModify(DN.decode("cn=Root DNs,cn=config"), mods);
+    modifyOperation = internalRootConn.processModify(DN.valueOf("cn=Root DNs,cn=config"), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
 
 
@@ -2497,7 +2497,7 @@
   private Task getCompletedTask(DN taskEntryDN) throws Exception
   {
     TaskBackend taskBackend =
-         (TaskBackend) DirectoryServer.getBackend(DN.decode("cn=tasks"));
+         (TaskBackend) DirectoryServer.getBackend(DN.valueOf("cn=tasks"));
     Task task = taskBackend.getScheduledTask(taskEntryDN);
     if (task == null)
     {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestDN.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestDN.java
index c6f2edc..f396e9b 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestDN.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestDN.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -186,7 +186,7 @@
   public void testCreateNullDN1() throws Exception {
     DN dn = new DN(new RDN[0]);
 
-    assertEquals(dn, DN.nullDN());
+    assertEquals(dn, DN.rootDN());
   }
 
 
@@ -201,7 +201,7 @@
   public void testCreateNullDN2() throws Exception {
     DN dn = new DN();
 
-    assertEquals(dn, DN.nullDN());
+    assertEquals(dn, DN.rootDN());
   }
 
 
@@ -216,7 +216,7 @@
   public void testCreateNullDN3() throws Exception {
     DN dn = new DN((RDN[]) null);
 
-    assertEquals(dn, DN.nullDN());
+    assertEquals(dn, DN.rootDN());
   }
 
 
@@ -231,7 +231,7 @@
   public void testCreateNullDN4() throws Exception {
     DN dn = new DN((ArrayList<RDN>) null);
 
-    assertEquals(dn, DN.nullDN());
+    assertEquals(dn, DN.rootDN());
   }
 
 
@@ -246,7 +246,7 @@
   public void testCreateWithSingleRDN1() throws Exception {
     DN dn = new DN(new RDN[] { RDN.decode("dc=com") });
 
-    assertEquals(dn, DN.decode("dc=com"));
+    assertEquals(dn, DN.valueOf("dc=com"));
   }
 
 
@@ -262,7 +262,7 @@
     DN dn = new DN(new RDN[] { RDN.decode("dc=foo"),
         RDN.decode("dc=opends"), RDN.decode("dc=org") });
 
-    assertEquals(dn, DN.decode("dc=foo,dc=opends,dc=org"));
+    assertEquals(dn, DN.valueOf("dc=foo,dc=opends,dc=org"));
   }
 
 
@@ -281,7 +281,7 @@
     rdnList.add(RDN.decode("dc=org"));
     DN dn = new DN(rdnList);
 
-    assertEquals(dn, DN.decode("dc=foo,dc=opends,dc=org"));
+    assertEquals(dn, DN.valueOf("dc=foo,dc=opends,dc=org"));
   }
 
 
@@ -302,7 +302,7 @@
   @Test(dataProvider = "testDNs")
   public void testDecodeString(String rawDN, String normDN,
       String stringDN) throws Exception {
-    DN dn = DN.decode(rawDN);
+    DN dn = DN.valueOf(rawDN);
     StringBuilder buffer = new StringBuilder();
     buffer.append(normDN);
     Platform.normalize(buffer);
@@ -346,7 +346,7 @@
    */
   @Test
   public void testToNormalizedString() throws Exception {
-    DN dn = DN.decode("dc=example,dc=com");
+    DN dn = DN.valueOf("dc=example,dc=com");
 
     StringBuilder buffer = new StringBuilder();
     dn.toNormalizedString(buffer);
@@ -365,8 +365,8 @@
    */
   @Test
   public void testDecodeNull() throws Exception {
-    assertEquals(DN.decode((ByteString) null), DN.nullDN());
-    assertEquals(DN.decode((String) null), DN.nullDN());
+    assertEquals(DN.decode((ByteString) null), DN.rootDN());
+    assertEquals(DN.valueOf((String) null), DN.rootDN());
   }
 
 
@@ -382,7 +382,7 @@
   @Test(dataProvider = "illegalDNs", expectedExceptions = DirectoryException.class)
   public void testIllegalStringDNs(String dn) throws Exception {
     try {
-      DN.decode(dn);
+      DN.valueOf(dn);
     } catch (DirectoryException e) {
       throw e;
     } catch (Exception e) {
@@ -434,9 +434,9 @@
    */
   @Test
   public void testNullDN() throws Exception {
-    DN nullDN = DN.nullDN();
+    DN nullDN = DN.rootDN();
 
-    assertTrue(nullDN.getNumComponents() == 0);
+    assertTrue(nullDN.size() == 0);
     assertEquals(nullDN.toNormalizedString(), "");
   }
 
@@ -450,8 +450,8 @@
    */
   @Test
   public void testIsNullDNWithNullDN() throws Exception {
-    DN nullDN = DN.nullDN();
-    assertTrue(nullDN.isNullDN());
+    DN nullDN = DN.rootDN();
+    assertTrue(nullDN.isRootDN());
   }
 
 
@@ -464,8 +464,8 @@
    */
   @Test
   public void testIsNullDNWithNonNullDN() throws Exception {
-    DN dn = DN.decode("dc=com");
-    assertFalse(dn.isNullDN());
+    DN dn = DN.valueOf("dc=com");
+    assertFalse(dn.isRootDN());
   }
 
 
@@ -497,8 +497,8 @@
    */
   @Test(dataProvider = "createNumComponentsTestData")
   public void testNumComponents(String s, int sz) throws Exception {
-    DN dn = DN.decode(s);
-    assertEquals(dn.getNumComponents(), sz);
+    DN dn = DN.valueOf(s);
+    assertEquals(dn.size(), sz);
   }
 
 
@@ -536,10 +536,10 @@
   @Test(dataProvider = "createParentAndRDNTestData")
   public void testGetParent(String s, String p, String r)
       throws Exception {
-    DN dn = DN.decode(s);
-    DN parent = (p != null ? DN.decode(p) : null);
+    DN dn = DN.valueOf(s);
+    DN parent = (p != null ? DN.valueOf(p) : null);
 
-    assertEquals(dn.getParent(), parent, "For DN " + s);
+    assertEquals(dn.parent(), parent, "For DN " + s);
   }
 
 
@@ -581,7 +581,7 @@
   public void testGetParentDNInSuffix(DN namingContext) throws Exception {
     assertNull(namingContext.getParentDNInSuffix());
 
-    DN childDN = namingContext.concat(RDN.decode("ou=People"));
+    DN childDN = namingContext.child(RDN.decode("ou=People"));
     assertNotNull(childDN.getParentDNInSuffix());
     assertEquals(childDN.getParentDNInSuffix(), namingContext);
   }
@@ -596,13 +596,13 @@
    */
   @Test
   public void testGetParentInteraction() throws Exception {
-    DN c = DN.decode("dc=foo,dc=bar,dc=opends,dc=org");
-    DN e = DN.decode("dc=bar,dc=opends,dc=org");
-    DN p = c.getParent();
+    DN c = DN.valueOf("dc=foo,dc=bar,dc=opends,dc=org");
+    DN e = DN.valueOf("dc=bar,dc=opends,dc=org");
+    DN p = c.parent();
 
-    assertFalse(p.isNullDN());
+    assertFalse(p.isRootDN());
 
-    assertEquals(p.getNumComponents(), 3);
+    assertEquals(p.size(), 3);
 
     assertEquals(p.compareTo(c), -1);
     assertEquals(c.compareTo(p), 1);
@@ -619,20 +619,20 @@
     assertEquals(p.toNormalizedString(), e.toNormalizedString());
     assertEquals(p.toString(), e.toString());
 
-    assertEquals(p.getRDN(), RDN.decode("dc=bar"));
+    assertEquals(p.rdn(), RDN.decode("dc=bar"));
 
     assertEquals(p.getRDN(0), RDN.decode("dc=bar"));
     assertEquals(p.getRDN(1), RDN.decode("dc=opends"));
     assertEquals(p.getRDN(2), RDN.decode("dc=org"));
 
-    assertEquals(p.getParent(), DN.decode("dc=opends,dc=org"));
-    assertEquals(p.getParent(), e.getParent());
+    assertEquals(p.parent(), DN.valueOf("dc=opends,dc=org"));
+    assertEquals(p.parent(), e.parent());
 
-    assertEquals(p.concat(RDN.decode("dc=foo")), DN
-        .decode("dc=foo,dc=bar,dc=opends,dc=org"));
-    assertEquals(p.concat(RDN.decode("dc=foo")), c);
-    assertEquals(p.concat(DN.decode("dc=xxx,dc=foo")), DN
-        .decode("dc=xxx,dc=foo,dc=bar,dc=opends,dc=org"));
+    assertEquals(p.child(RDN.decode("dc=foo")), DN
+        .valueOf("dc=foo,dc=bar,dc=opends,dc=org"));
+    assertEquals(p.child(RDN.decode("dc=foo")), c);
+    assertEquals(p.child(DN.valueOf("dc=xxx,dc=foo")), DN
+        .valueOf("dc=xxx,dc=foo,dc=bar,dc=opends,dc=org"));
   }
 
 
@@ -652,10 +652,10 @@
   @Test(dataProvider = "createParentAndRDNTestData")
   public void testGetRDN(String s, String p, String r)
       throws Exception {
-    DN dn = DN.decode(s);
+    DN dn = DN.valueOf(s);
     RDN rdn = (r != null ? RDN.decode(r) : null);
 
-    assertEquals(dn.getRDN(), rdn, "For DN " + s);
+    assertEquals(dn.rdn(), rdn, "For DN " + s);
   }
 
 
@@ -693,7 +693,7 @@
   @Test(dataProvider = "createRDNTestData")
   public void testGetRDNIndexed(String s, int i, String r)
       throws Exception {
-    DN dn = DN.decode(s);
+    DN dn = DN.valueOf(s);
     RDN rdn = RDN.decode(r);
 
     assertEquals(dn.getRDN(i), rdn, "For DN " + s);
@@ -730,7 +730,7 @@
   @Test(dataProvider = "createRDNIllegalTestData", expectedExceptions = IndexOutOfBoundsException.class)
   public void testGetRDNIndexedException(String s, int i)
       throws Exception {
-    DN dn = DN.decode(s);
+    DN dn = DN.valueOf(s);
 
     // Shoudld throw.
     dn.getRDN(i);
@@ -777,11 +777,11 @@
   @Test(dataProvider = "createConcatDNTestData")
   public void testConcatDN(String s, String l, String e)
       throws Exception {
-    DN dn = DN.decode(s);
-    DN localName = DN.decode(l);
-    DN expected = DN.decode(e);
+    DN dn = DN.valueOf(s);
+    DN localName = DN.valueOf(l);
+    DN expected = DN.valueOf(e);
 
-    assertEquals(dn.concat(localName), expected);
+    assertEquals(dn.child(localName), expected);
   }
 
 
@@ -795,8 +795,8 @@
   @Test(expectedExceptions = { NullPointerException.class,
       AssertionError.class })
   public void testConcatDNException() throws Exception {
-    DN dn = DN.decode("dc=org");
-    dn.concat((DN) null);
+    DN dn = DN.valueOf("dc=org");
+    dn.child((DN) null);
   }
 
 
@@ -809,14 +809,14 @@
    */
   @Test
   public void testConcatDNInteraction() throws Exception {
-    DN p = DN.decode("dc=opends,dc=org");
-    DN l = DN.decode("dc=foo,dc=bar");
-    DN e = DN.decode("dc=foo,dc=bar,dc=opends,dc=org");
-    DN c = p.concat(l);
+    DN p = DN.valueOf("dc=opends,dc=org");
+    DN l = DN.valueOf("dc=foo,dc=bar");
+    DN e = DN.valueOf("dc=foo,dc=bar,dc=opends,dc=org");
+    DN c = p.child(l);
 
-    assertFalse(c.isNullDN());
+    assertFalse(c.isRootDN());
 
-    assertEquals(c.getNumComponents(), 4);
+    assertEquals(c.size(), 4);
 
     assertEquals(c.compareTo(p), 1);
     assertEquals(p.compareTo(c), -1);
@@ -833,20 +833,20 @@
     assertEquals(c.toNormalizedString(), e.toNormalizedString());
     assertEquals(c.toString(), e.toString());
 
-    assertEquals(c.getRDN(), RDN.decode("dc=foo"));
+    assertEquals(c.rdn(), RDN.decode("dc=foo"));
 
     assertEquals(c.getRDN(0), RDN.decode("dc=foo"));
     assertEquals(c.getRDN(1), RDN.decode("dc=bar"));
     assertEquals(c.getRDN(2), RDN.decode("dc=opends"));
     assertEquals(c.getRDN(3), RDN.decode("dc=org"));
 
-    assertEquals(c.getParent(), DN.decode("dc=bar,dc=opends,dc=org"));
-    assertEquals(c.getParent(), e.getParent());
+    assertEquals(c.parent(), DN.valueOf("dc=bar,dc=opends,dc=org"));
+    assertEquals(c.parent(), e.parent());
 
-    assertEquals(c.concat(RDN.decode("dc=xxx")), DN
-        .decode("dc=xxx,dc=foo,dc=bar,dc=opends,dc=org"));
-    assertEquals(c.concat(DN.decode("dc=xxx,dc=yyy")), DN
-        .decode("dc=xxx,dc=yyy,dc=foo,dc=bar,dc=opends,dc=org"));
+    assertEquals(c.child(RDN.decode("dc=xxx")), DN
+        .valueOf("dc=xxx,dc=foo,dc=bar,dc=opends,dc=org"));
+    assertEquals(c.child(DN.valueOf("dc=xxx,dc=yyy")), DN
+        .valueOf("dc=xxx,dc=yyy,dc=foo,dc=bar,dc=opends,dc=org"));
   }
 
 
@@ -880,11 +880,11 @@
   @Test(dataProvider = "createConcatRDNTestData")
   public void testConcatSingleRDN(String s, String r, String e)
       throws Exception {
-    DN dn = DN.decode(s);
+    DN dn = DN.valueOf(s);
     RDN rdn = RDN.decode(r);
-    DN expected = DN.decode(e);
+    DN expected = DN.valueOf(e);
 
-    assertEquals(dn.concat(rdn), expected);
+    assertEquals(dn.child(rdn), expected);
   }
 
 
@@ -898,7 +898,7 @@
   @Test(expectedExceptions = { NullPointerException.class,
       AssertionError.class })
   public void testConcatRDNException() throws Exception {
-    DN dn = DN.decode("dc=org");
+    DN dn = DN.valueOf("dc=org");
     dn.concat((RDN[]) null);
   }
 
@@ -919,13 +919,13 @@
   @Test(dataProvider = "createConcatDNTestData")
   public void testConcatRDNSequence1(String s, String l, String e)
       throws Exception {
-    DN dn = DN.decode(s);
-    DN localName = DN.decode(l);
-    DN expected = DN.decode(e);
+    DN dn = DN.valueOf(s);
+    DN localName = DN.valueOf(l);
+    DN expected = DN.valueOf(e);
 
     // Construct sequence.
-    RDN[] rdns = new RDN[localName.getNumComponents()];
-    for (int i = 0; i < localName.getNumComponents(); i++) {
+    RDN[] rdns = new RDN[localName.size()];
+    for (int i = 0; i < localName.size(); i++) {
       rdns[i] = localName.getRDN(i);
     }
 
@@ -1022,8 +1022,8 @@
   @Test(dataProvider = "createIsAncestorOfTestData")
   public void testIsAncestorOf(String s, String d, boolean e)
       throws Exception {
-    DN dn = DN.decode(s);
-    DN other = DN.decode(d);
+    DN dn = DN.valueOf(s);
+    DN other = DN.valueOf(d);
 
     assertEquals(dn.isAncestorOf(other), e, s + " isAncestoryOf " + d);
   }
@@ -1039,7 +1039,7 @@
   @Test(expectedExceptions = { NullPointerException.class,
       AssertionError.class })
   public void testIsAncestorOfException() throws Exception {
-    DN dn = DN.decode("dc=com");
+    DN dn = DN.valueOf("dc=com");
     dn.isAncestorOf(null);
   }
 
@@ -1091,8 +1091,8 @@
   @Test(dataProvider = "createIsDescendantOfTestData")
   public void testIsDescendantOf(String s, String d, boolean e)
       throws Exception {
-    DN dn = DN.decode(s);
-    DN other = DN.decode(d);
+    DN dn = DN.valueOf(s);
+    DN other = DN.valueOf(d);
 
     assertEquals(dn.isDescendantOf(other), e, s + " isDescendantOf "
         + d);
@@ -1109,7 +1109,7 @@
   @Test(expectedExceptions = { NullPointerException.class,
       AssertionError.class })
   public void testIsDescendantOfException() throws Exception {
-    DN dn = DN.decode("dc=com");
+    DN dn = DN.valueOf("dc=com");
     dn.isDescendantOf(null);
   }
 
@@ -1177,8 +1177,8 @@
   @Test(dataProvider = "createDNEqualityData")
   public void testEquality(String first, String second, int result)
       throws Exception {
-    DN dn1 = DN.decode(first);
-    DN dn2 = DN.decode(second);
+    DN dn1 = DN.valueOf(first);
+    DN dn2 = DN.valueOf(second);
 
     if (result == 0) {
       assertTrue(dn1.equals(dn2), "DN equality for <" + first
@@ -1199,7 +1199,7 @@
    */
   @Test
   public void testEqualsNonDN() throws Exception {
-    DN dn = DN.decode("dc=example,dc=com");
+    DN dn = DN.valueOf("dc=example,dc=com");
 
     assertFalse(dn.equals("not a DN"));
   }
@@ -1221,8 +1221,8 @@
   @Test(dataProvider = "createDNEqualityData")
   public void testHashCode(String first, String second, int result)
       throws Exception {
-    DN dn1 = DN.decode(first);
-    DN dn2 = DN.decode(second);
+    DN dn1 = DN.valueOf(first);
+    DN dn2 = DN.valueOf(second);
 
     int h1 = dn1.hashCode();
     int h2 = dn2.hashCode();
@@ -1257,8 +1257,8 @@
   @Test(dataProvider = "createDNEqualityData")
   public void testCompareTo(String first, String second, int result)
       throws Exception {
-    DN dn1 = DN.decode(first);
-    DN dn2 = DN.decode(second);
+    DN dn1 = DN.valueOf(first);
+    DN dn2 = DN.valueOf(second);
 
     int rc = dn1.compareTo(dn2);
 
@@ -1290,7 +1290,7 @@
   @Test(dataProvider = "testDNs")
   public void testToString(String rawDN, String normDN,
       String stringDN) throws Exception {
-    DN dn = DN.decode(rawDN);
+    DN dn = DN.valueOf(rawDN);
     assertEquals(dn.toString(), stringDN);
   }
 }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java
index 084d79c..7c2cd64 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -78,7 +78,7 @@
     // Construct entry DN.
     DN entryDN;
     try {
-      entryDN = DN.decode("dc=example, dc=com");
+      entryDN = DN.valueOf("dc=example, dc=com");
     } catch (DirectoryException e) {
       throw new RuntimeException(e);
     }
@@ -276,7 +276,7 @@
         "{ base \"dc=example, dc=com\", maximum 2 }" };
 
     // Relative to the root DN.
-    DN rootDN = DN.nullDN();
+    DN rootDN = DN.rootDN();
 
     SubtreeSpecificationSet expected = new SubtreeSpecificationSet();
     for (String value : values) {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestSubtreeSpecification.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestSubtreeSpecification.java
index 8c58f5a..ef51eff 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestSubtreeSpecification.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestSubtreeSpecification.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -41,7 +41,7 @@
     SubtreeSpecificationTestCase {
 
   // Cached root DN.
-  private DN rootDN = DN.nullDN();
+  private DN rootDN = DN.rootDN();
 
   /**
    * Tests the {@link SubtreeSpecification#valueOf(DN, String)}
@@ -265,7 +265,7 @@
    */
   @Test
   public void testMatches1() throws Exception {
-    DN dn = DN.decode("dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\" }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -284,7 +284,7 @@
    */
   @Test
   public void testMatches2() throws Exception {
-    DN dn = DN.decode("dc=com");
+    DN dn = DN.valueOf("dc=com");
 
     String value = "{ base \"dc=sun, dc=com\" }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -303,7 +303,7 @@
    */
   @Test
   public void testMatches3() throws Exception {
-    DN dn = DN.decode("dc=foo, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=foo, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\" }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -322,7 +322,7 @@
    */
   @Test
   public void testMatches4() throws Exception {
-    DN dn = DN.decode("dc=foo, dc=bar, dc=com");
+    DN dn = DN.valueOf("dc=foo, dc=bar, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\" }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -341,7 +341,7 @@
    */
   @Test
   public void testMatches5() throws Exception {
-    DN dn = DN.decode("dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", minimum 1 }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -360,7 +360,7 @@
    */
   @Test
   public void testMatches6() throws Exception {
-    DN dn = DN.decode("dc=abc, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=abc, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", minimum 1 }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -379,7 +379,7 @@
    */
   @Test
   public void testMatches7() throws Exception {
-    DN dn = DN.decode("dc=xyz, dc=abc, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=xyz, dc=abc, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", minimum 1 }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -398,7 +398,7 @@
    */
   @Test
   public void testMatches8() throws Exception {
-    DN dn = DN.decode("dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", maximum 0 }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -417,7 +417,7 @@
    */
   @Test
   public void testMatches9() throws Exception {
-    DN dn = DN.decode("dc=foo, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=foo, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", maximum 0 }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -436,7 +436,7 @@
    */
   @Test
   public void testMatches10() throws Exception {
-    DN dn = DN.decode("dc=bar, dc=foo, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=bar, dc=foo, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", maximum 1 }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -455,7 +455,7 @@
    */
   @Test
   public void testMatches11() throws Exception {
-    DN dn = DN.decode("dc=bar, dc=foo, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=bar, dc=foo, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", maximum 2 }";
     SubtreeSpecification ss = SubtreeSpecification.valueOf(rootDN,
@@ -474,7 +474,7 @@
    */
   @Test
   public void testMatches12() throws Exception {
-    DN dn = DN.decode("dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificExclusions { chopAfter:\"\" } }";
@@ -494,7 +494,7 @@
    */
   @Test
   public void testMatches13() throws Exception {
-    DN dn = DN.decode("dc=foo, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=foo, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificExclusions { chopAfter:\"\" } }";
@@ -514,7 +514,7 @@
    */
   @Test
   public void testMatches14() throws Exception {
-    DN dn = DN.decode("dc=foo, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=foo, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificExclusions { chopAfter:\"dc=foo\" } }";
@@ -534,7 +534,7 @@
    */
   @Test
   public void testMatches15() throws Exception {
-    DN dn = DN.decode("dc=bar, dc=foo, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=bar, dc=foo, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificExclusions { chopAfter:\"dc=foo\" } }";
@@ -554,7 +554,7 @@
    */
   @Test
   public void testMatches16() throws Exception {
-    DN dn = DN.decode("dc=foo, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=foo, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificExclusions { chopBefore:\"dc=foo\" } }";
@@ -574,7 +574,7 @@
    */
   @Test
   public void testMatches17() throws Exception {
-    DN dn = DN.decode("dc=bar, dc=foo, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=bar, dc=foo, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificExclusions { chopBefore:\"dc=foo\" } }";
@@ -594,7 +594,7 @@
    */
   @Test
   public void testMatches18() throws Exception {
-    DN dn = DN.decode("dc=abc, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=abc, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificExclusions { chopBefore:\"dc=foo\" } }";
@@ -614,7 +614,7 @@
    */
   @Test
   public void testMatches19() throws Exception {
-    DN dn = DN.decode("dc=abc, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=abc, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificationFilter item:person }";
@@ -634,7 +634,7 @@
    */
   @Test
   public void testMatches20() throws Exception {
-    DN dn = DN.decode("dc=abc, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=abc, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificationFilter item:organization }";
@@ -654,7 +654,7 @@
    */
   @Test
   public void testMatches21() throws Exception {
-    DN dn = DN.decode("dc=abc, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=abc, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificationFilter not:item:person }";
@@ -674,7 +674,7 @@
    */
   @Test
   public void testMatches22() throws Exception {
-    DN dn = DN.decode("dc=abc, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=abc, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificationFilter not:item:organization }";
@@ -694,7 +694,7 @@
    */
   @Test
   public void testMatches23() throws Exception {
-    DN dn = DN.decode("dc=abc, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=abc, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificationFilter \"(objectClass=person)\" }";
@@ -714,7 +714,7 @@
    */
   @Test
   public void testMatches24() throws Exception {
-    DN dn = DN.decode("dc=abc, dc=sun, dc=com");
+    DN dn = DN.valueOf("dc=abc, dc=sun, dc=com");
 
     String value = "{ base \"dc=sun, dc=com\", "
         + "specificationFilter \"(objectClass=organization)\" }";
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/VirtualAttributeRuleTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/VirtualAttributeRuleTestCase.java
index cce3cab..84ff116 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/VirtualAttributeRuleTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/VirtualAttributeRuleTestCase.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -94,25 +94,25 @@
          new EntryDNVirtualAttributeProvider();
 
     LinkedHashSet<DN> dnSet1 = new LinkedHashSet<DN>(1);
-    dnSet1.add(DN.decode("o=test"));
+    dnSet1.add(DN.valueOf("o=test"));
 
     LinkedHashSet<DN> dnSet2 = new LinkedHashSet<DN>(1);
-    dnSet2.add(DN.decode("dc=example,dc=com"));
+    dnSet2.add(DN.valueOf("dc=example,dc=com"));
 
     LinkedHashSet<DN> dnSet3 = new LinkedHashSet<DN>(2);
-    dnSet3.add(DN.decode("o=test"));
-    dnSet3.add(DN.decode("dc=example,dc=com"));
+    dnSet3.add(DN.valueOf("o=test"));
+    dnSet3.add(DN.valueOf("dc=example,dc=com"));
 
 
     LinkedHashSet<DN> groupSet1 = new LinkedHashSet<DN>(1);
-    groupSet1.add(DN.decode("cn=Test Group,o=test"));
+    groupSet1.add(DN.valueOf("cn=Test Group,o=test"));
 
     LinkedHashSet<DN> groupSet2 = new LinkedHashSet<DN>(1);
-    groupSet2.add(DN.decode("cn=Example Group,o=test"));
+    groupSet2.add(DN.valueOf("cn=Example Group,o=test"));
 
     LinkedHashSet<DN> groupSet3= new LinkedHashSet<DN>(2);
-    groupSet3.add(DN.decode("cn=Test Group,o=test"));
-    groupSet3.add(DN.decode("cn=Example Group,o=test"));
+    groupSet3.add(DN.valueOf("cn=Test Group,o=test"));
+    groupSet3.add(DN.valueOf("cn=Example Group,o=test"));
 
 
     LinkedHashSet<SearchFilter> filterSet1 = new LinkedHashSet<SearchFilter>(1);
@@ -283,7 +283,7 @@
     TestCaseUtils.initializeTestBackend(true);
     addGroups();
     assertEquals(rule.appliesToEntry(
-                      DirectoryConfig.getEntry(DN.decode("o=test"))),
+                      DirectoryConfig.getEntry(DN.valueOf("o=test"))),
                  appliesToEntry);
     removeGroups();
   }
@@ -341,8 +341,8 @@
   {
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
-    conn.processDelete(DN.decode("cn=Test Group,o=Test"));
-    conn.processDelete(DN.decode("cn=Example Group,o=Test"));
+    conn.processDelete(DN.valueOf("cn=Test Group,o=Test"));
+    conn.processDelete(DN.valueOf("cn=Example Group,o=Test"));
   }
 }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestAddChangeRecordEntry.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestAddChangeRecordEntry.java
index cc65163..8178a1a 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestAddChangeRecordEntry.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestAddChangeRecordEntry.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -94,10 +95,10 @@
    */
   @Test
   public void testConstructorEmptyDN() throws Exception {
-    AddChangeRecordEntry entry = new AddChangeRecordEntry(DN.nullDN(),
+    AddChangeRecordEntry entry = new AddChangeRecordEntry(DN.rootDN(),
         attributes);
 
-    Assert.assertEquals(entry.getDN(), DN.nullDN());
+    Assert.assertEquals(entry.getDN(), DN.rootDN());
   }
 
   /**
@@ -108,8 +109,8 @@
    */
   @Test
   public void testConstructorNonNullDN() throws Exception {
-    DN testDN1 = DN.decode("dc=hello, dc=world");
-    DN testDN2 = DN.decode("dc=hello, dc=world");
+    DN testDN1 = DN.valueOf("dc=hello, dc=world");
+    DN testDN2 = DN.valueOf("dc=hello, dc=world");
 
     AddChangeRecordEntry entry = new AddChangeRecordEntry(testDN1,
         attributes);
@@ -125,7 +126,7 @@
    */
   @Test
   public void testChangeOperationType() throws Exception {
-    AddChangeRecordEntry entry = new AddChangeRecordEntry(DN.nullDN(), attributes);
+    AddChangeRecordEntry entry = new AddChangeRecordEntry(DN.rootDN(), attributes);
 
     Assert.assertEquals(entry.getChangeOperationType(),
         ChangeOperationType.ADD);
@@ -140,7 +141,7 @@
   @Test
   public void testGetAttributesEmpty() throws Exception {
     Map<AttributeType, List<Attribute>> empty = Collections.emptyMap();
-    AddChangeRecordEntry entry = new AddChangeRecordEntry(DN.nullDN(), empty);
+    AddChangeRecordEntry entry = new AddChangeRecordEntry(DN.rootDN(), empty);
 
     List<Attribute> attrs = entry.getAttributes();
     Assert.assertEquals(attrs.size(), 0);
@@ -154,7 +155,7 @@
    */
   @Test
   public void testGetAttributesNonEmpty() throws Exception {
-    AddChangeRecordEntry entry = new AddChangeRecordEntry(DN.nullDN(), attributes);
+    AddChangeRecordEntry entry = new AddChangeRecordEntry(DN.rootDN(), attributes);
 
     List<Attribute> attrs = entry.getAttributes();
     Assert.assertEquals(attrs.size(), 1);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestChangeRecordEntry.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestChangeRecordEntry.java
index e0e418b..d725941 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestChangeRecordEntry.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestChangeRecordEntry.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -108,9 +109,9 @@
    */
   @Test
   public void testConstructorEmptyDN() throws Exception {
-    MyChangeRecordEntry entry = new MyChangeRecordEntry(DN.nullDN());
+    MyChangeRecordEntry entry = new MyChangeRecordEntry(DN.rootDN());
 
-    Assert.assertEquals(entry.getDN(), DN.nullDN());
+    Assert.assertEquals(entry.getDN(), DN.rootDN());
   }
 
   /**
@@ -121,8 +122,8 @@
    */
   @Test
   public void testConstructorNonNullDN() throws Exception {
-    DN testDN1 = DN.decode("dc=hello, dc=world");
-    DN testDN2 = DN.decode("dc=hello, dc=world");
+    DN testDN1 = DN.valueOf("dc=hello, dc=world");
+    DN testDN2 = DN.valueOf("dc=hello, dc=world");
 
     MyChangeRecordEntry entry = new MyChangeRecordEntry(testDN1);
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestDeleteChangeRecordEntry.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestDeleteChangeRecordEntry.java
index 5052022..2cc8367 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestDeleteChangeRecordEntry.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestDeleteChangeRecordEntry.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -73,9 +74,9 @@
    */
   @Test
   public void testConstructorEmptyDN() throws Exception {
-    DeleteChangeRecordEntry entry = new DeleteChangeRecordEntry(DN.nullDN());
+    DeleteChangeRecordEntry entry = new DeleteChangeRecordEntry(DN.rootDN());
 
-    Assert.assertEquals(entry.getDN(), DN.nullDN());
+    Assert.assertEquals(entry.getDN(), DN.rootDN());
   }
 
   /**
@@ -86,8 +87,8 @@
    */
   @Test
   public void testConstructorNonNullDN() throws Exception {
-    DN testDN1 = DN.decode("dc=hello, dc=world");
-    DN testDN2 = DN.decode("dc=hello, dc=world");
+    DN testDN1 = DN.valueOf("dc=hello, dc=world");
+    DN testDN2 = DN.valueOf("dc=hello, dc=world");
 
     DeleteChangeRecordEntry entry = new DeleteChangeRecordEntry(testDN1);
 
@@ -102,7 +103,7 @@
    */
   @Test
   public void testChangeOperationType() throws Exception {
-    DeleteChangeRecordEntry entry = new DeleteChangeRecordEntry(DN.nullDN());
+    DeleteChangeRecordEntry entry = new DeleteChangeRecordEntry(DN.rootDN());
 
     Assert.assertEquals(entry.getChangeOperationType(),
         ChangeOperationType.DELETE);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java
index dfa9f98..d7b1b8e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -321,7 +322,7 @@
       Assert.assertNotNull(entry);
 
       Assert.assertEquals(entry.getDN(), DN
-          .decode("cn=john, dc=foo, dc=com"));
+          .valueOf("cn=john, dc=foo, dc=com"));
       Assert.assertTrue(entry.hasObjectClass(OC_TOP));
       Assert.assertTrue(entry.hasObjectClass(OC_PERSON));
       Assert.assertTrue(entry.hasValue(AT_CN, null, AttributeValues.create(
@@ -415,7 +416,7 @@
       Assert.assertNotNull(entry);
 
       Assert.assertEquals(entry.getDN(), DN
-          .decode("cn=anne, dc=foo, dc=com"));
+          .valueOf("cn=anne, dc=foo, dc=com"));
       Assert.assertTrue(entry.hasObjectClass(OC_TOP));
       Assert.assertTrue(entry.hasObjectClass(OC_PERSON));
       Assert.assertTrue(entry.hasValue(AT_CN, null, AttributeValues.create(
@@ -461,7 +462,7 @@
       Assert.assertTrue(change instanceof AddChangeRecordEntry);
       add = (AddChangeRecordEntry) change;
 
-      dn = DN.decode("cn=Fiona Jensen, ou=Marketing, dc=airius, dc=com");
+      dn = DN.valueOf("cn=Fiona Jensen, ou=Marketing, dc=airius, dc=com");
       Assert.assertEquals(add.getDN(), dn);
 
       List<Attribute> attrs = new ArrayList<Attribute>();
@@ -482,7 +483,7 @@
       Assert.assertTrue(change instanceof DeleteChangeRecordEntry);
       delete = (DeleteChangeRecordEntry) change;
 
-      dn = DN.decode("cn=Robert Jensen, ou=Marketing, dc=airius, dc=com");
+      dn = DN.valueOf("cn=Robert Jensen, ou=Marketing, dc=airius, dc=com");
       Assert.assertEquals(delete.getDN(), dn);
 
       // Change record #3.
@@ -491,7 +492,7 @@
       modifyDN = (ModifyDNChangeRecordEntry) change;
 
       dn = DN
-          .decode("cn=Paul Jensen, ou=Product Development, dc=airius, dc=com");
+          .valueOf("cn=Paul Jensen, ou=Product Development, dc=airius, dc=com");
       Assert.assertEquals(modifyDN.getDN(), dn);
 
       rdn = RDN.decode("cn=paula jensen");
@@ -505,12 +506,12 @@
       modifyDN = (ModifyDNChangeRecordEntry) change;
 
       dn = DN
-          .decode("ou=PD Accountants, ou=Product Development, dc=airius, dc=com");
+          .valueOf("ou=PD Accountants, ou=Product Development, dc=airius, dc=com");
       Assert.assertEquals(modifyDN.getDN(), dn);
 
       rdn = RDN.decode("ou=Product Development Accountants");
       Assert.assertEquals(modifyDN.getNewRDN(), rdn);
-      dn = DN.decode("ou=Accounting, dc=airius, dc=com");
+      dn = DN.valueOf("ou=Accounting, dc=airius, dc=com");
       Assert.assertEquals(modifyDN.getNewSuperiorDN(), dn);
       Assert.assertFalse(modifyDN.deleteOldRDN());
 
@@ -520,7 +521,7 @@
       modify = (ModifyChangeRecordEntry) change;
 
       dn = DN
-          .decode("cn=Paula Jensen, ou=Product Development, dc=airius, dc=com");
+          .valueOf("cn=Paula Jensen, ou=Product Development, dc=airius, dc=com");
       Assert.assertEquals(modify.getDN(), dn);
 
       i = modify.getModifications().iterator();
@@ -563,7 +564,7 @@
       modify = (ModifyChangeRecordEntry) change;
 
       dn = DN
-          .decode("cn=Ingrid Jensen, ou=Product Support, dc=airius, dc=com");
+          .valueOf("cn=Ingrid Jensen, ou=Product Support, dc=airius, dc=com");
       Assert.assertEquals(modify.getDN(), dn);
 
       i = modify.getModifications().iterator();
@@ -581,7 +582,7 @@
       Assert.assertTrue(change instanceof ModifyChangeRecordEntry);
       modify = (ModifyChangeRecordEntry) change;
 
-      Assert.assertTrue(modify.getDN().isNullDN());
+      Assert.assertTrue(modify.getDN().isRootDN());
 
       i = modify.getModifications().iterator();
 
@@ -597,7 +598,7 @@
       Assert.assertTrue(change instanceof ModifyChangeRecordEntry);
       modify = (ModifyChangeRecordEntry) change;
 
-      dn = DN.decode("uid=rogasawara, ou=\u55b6\u696d\u90e8, o=airius");
+      dn = DN.valueOf("uid=rogasawara, ou=\u55b6\u696d\u90e8, o=airius");
       Assert.assertEquals(modify.getDN(), dn);
 
       i = modify.getModifications().iterator();
@@ -675,7 +676,7 @@
       Assert.assertTrue(change instanceof AddChangeRecordEntry);
       AddChangeRecordEntry add = (AddChangeRecordEntry) change;
 
-      DN dn = DN.decode("cn=john smith, dc=com");
+      DN dn = DN.valueOf("cn=john smith, dc=com");
       Assert.assertEquals(add.getDN(), dn);
 
       Attribute attr = Attributes.create("description", TEMP_FILE_STRING);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java
index 0374dd8..b936528 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -307,7 +307,7 @@
     List<Entry[]> entries = new LinkedList<Entry[]>();
 
     for (String[] s : input) {
-      DN dn = DN.decode(s[0]);
+      DN dn = DN.valueOf(s[0]);
       Entry entry = new Entry(dn, null, null, null);
 
       for (int i = 1; i < s.length; i+=2) {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestModifyChangeRecordEntry.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestModifyChangeRecordEntry.java
index cf94258..cffc8d1 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestModifyChangeRecordEntry.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestModifyChangeRecordEntry.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -97,10 +98,10 @@
    */
   @Test
   public void testConstructorEmptyDN() throws Exception {
-    ModifyChangeRecordEntry entry = new ModifyChangeRecordEntry(DN.nullDN(),
+    ModifyChangeRecordEntry entry = new ModifyChangeRecordEntry(DN.rootDN(),
         modifications);
 
-    Assert.assertEquals(entry.getDN(), DN.nullDN());
+    Assert.assertEquals(entry.getDN(), DN.rootDN());
   }
 
   /**
@@ -111,8 +112,8 @@
    */
   @Test
   public void testConstructorNonNullDN() throws Exception {
-    DN testDN1 = DN.decode("dc=hello, dc=world");
-    DN testDN2 = DN.decode("dc=hello, dc=world");
+    DN testDN1 = DN.valueOf("dc=hello, dc=world");
+    DN testDN2 = DN.valueOf("dc=hello, dc=world");
 
     ModifyChangeRecordEntry entry = new ModifyChangeRecordEntry(testDN1,
         modifications);
@@ -128,7 +129,7 @@
    */
   @Test
   public void testChangeOperationType() throws Exception {
-    ModifyChangeRecordEntry entry = new ModifyChangeRecordEntry(DN.nullDN(),
+    ModifyChangeRecordEntry entry = new ModifyChangeRecordEntry(DN.rootDN(),
         modifications);
 
     Assert.assertEquals(entry.getChangeOperationType(),
@@ -144,7 +145,7 @@
   @Test
   public void testGetModificationsEmpty() throws Exception {
     List<RawModification> empty = Collections.emptyList();
-    ModifyChangeRecordEntry entry = new ModifyChangeRecordEntry(DN.nullDN(),
+    ModifyChangeRecordEntry entry = new ModifyChangeRecordEntry(DN.rootDN(),
                                                                 empty);
 
     List<RawModification> mods = entry.getModifications();
@@ -159,7 +160,7 @@
    */
   @Test
   public void testGetModificationsNonEmpty() throws Exception {
-    ModifyChangeRecordEntry entry = new ModifyChangeRecordEntry(DN.nullDN(),
+    ModifyChangeRecordEntry entry = new ModifyChangeRecordEntry(DN.rootDN(),
         modifications);
 
     List<RawModification> mods = entry.getModifications();
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestModifyDNChangeRecordEntry.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestModifyDNChangeRecordEntry.java
index 33fea57..8082244 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestModifyDNChangeRecordEntry.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestModifyDNChangeRecordEntry.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -57,7 +58,7 @@
     // start the server.
     TestCaseUtils.startServer();
 
-    newSuperiorDN = DN.decode("dc=com");
+    newSuperiorDN = DN.valueOf("dc=com");
     newRDN = RDN.decode("dc=foo");
   }
 
@@ -82,9 +83,9 @@
   @Test
   public void testConstructorEmptyDN() throws Exception {
     ModifyDNChangeRecordEntry entry = new ModifyDNChangeRecordEntry(
-        DN.nullDN(), newRDN, false, newSuperiorDN);
+        DN.rootDN(), newRDN, false, newSuperiorDN);
 
-    Assert.assertEquals(entry.getDN(), DN.nullDN());
+    Assert.assertEquals(entry.getDN(), DN.rootDN());
   }
 
   /**
@@ -95,8 +96,8 @@
    */
   @Test
   public void testConstructorNonNullDN() throws Exception {
-    DN testDN1 = DN.decode("dc=hello, dc=world");
-    DN testDN2 = DN.decode("dc=hello, dc=world");
+    DN testDN1 = DN.valueOf("dc=hello, dc=world");
+    DN testDN2 = DN.valueOf("dc=hello, dc=world");
 
     ModifyDNChangeRecordEntry entry = new ModifyDNChangeRecordEntry(
         testDN1, newRDN, false, newSuperiorDN);
@@ -113,7 +114,7 @@
   @Test
   public void testChangeOperationType() throws Exception {
     ModifyDNChangeRecordEntry entry =
-         new ModifyDNChangeRecordEntry(DN.nullDN(), newRDN, false, newSuperiorDN);
+         new ModifyDNChangeRecordEntry(DN.rootDN(), newRDN, false, newSuperiorDN);
 
     Assert.assertEquals(entry.getChangeOperationType(),
         ChangeOperationType.MODIFY_DN);
@@ -128,7 +129,7 @@
   @Test
   public void testGetNewRDN() throws Exception {
     ModifyDNChangeRecordEntry entry =
-         new ModifyDNChangeRecordEntry(DN.nullDN(), newRDN, false, newSuperiorDN);
+         new ModifyDNChangeRecordEntry(DN.rootDN(), newRDN, false, newSuperiorDN);
 
     Assert.assertEquals(entry.getNewRDN(), newRDN);
   }
@@ -142,7 +143,7 @@
   @Test
   public void testGetNewSuperiorDN() throws Exception {
     ModifyDNChangeRecordEntry entry =
-         new ModifyDNChangeRecordEntry(DN.nullDN(), newRDN, false, newSuperiorDN);
+         new ModifyDNChangeRecordEntry(DN.rootDN(), newRDN, false, newSuperiorDN);
 
     Assert
         .assertEquals(entry.getNewSuperiorDN(), newSuperiorDN);
@@ -157,7 +158,7 @@
   @Test
   public void testDeleteOldRDNFalse() throws Exception {
     ModifyDNChangeRecordEntry entry =
-         new ModifyDNChangeRecordEntry(DN.nullDN(), newRDN, false, newSuperiorDN);
+         new ModifyDNChangeRecordEntry(DN.rootDN(), newRDN, false, newSuperiorDN);
 
     Assert.assertEquals(entry.deleteOldRDN(), false);
   }
@@ -171,7 +172,7 @@
   @Test
   public void testDeleteOldRDNTrue() throws Exception {
     ModifyDNChangeRecordEntry entry =
-         new ModifyDNChangeRecordEntry(DN.nullDN(), newRDN, true, newSuperiorDN);
+         new ModifyDNChangeRecordEntry(DN.rootDN(), newRDN, true, newSuperiorDN);
 
     Assert.assertEquals(entry.deleteOldRDN(), true);
   }

--
Gitblit v1.10.0